Introduce intent for TFW messages and fix FSM related bugs

This commit is contained in:
R. Richard
2019-08-23 15:27:03 +02:00
committed by therealkrispet
parent f626fef8f8
commit 2e5867cc49
14 changed files with 42 additions and 19 deletions

View File

@ -12,6 +12,7 @@ from tfw.internals.networking import message_bytes
def sign_message(key, message):
message.pop('scope', None)
message.pop('intent', None)
message.pop('signature', None)
signature = message_signature(key, message)
message['signature'] = b64encode(signature).decode()
@ -23,6 +24,7 @@ def message_signature(key, message):
def verify_message(key, message):
message.pop('scope', None)
message.pop('intent', None)
message = deepcopy(message)
try:
signature_b64 = message.pop('signature')

View File

@ -1,4 +1,5 @@
from .event_handler import EventHandler
from .event_handler_factory_base import EventHandlerFactoryBase
from .control_event_handler import ControlEventHandler
from .fsm_aware_event_handler import FSMAwareEventHandler
from .signed_event_handler import SignedEventHandler

View File

@ -0,0 +1,9 @@
from tfw.internals.networking import Intent
from .event_handler import EventHandler
class ControlEventHandler(EventHandler): # pylint: disable=abstract-method
def _event_callback(self, message):
if message.get('intent') != Intent.EVENT.value:
self.handle_event(message, self.connector)

View File

@ -7,6 +7,7 @@ LOG = logging.getLogger(__name__)
class FSMAware:
keys = ['fsm.update']
def __init__(self):
self.fsm_state = None
self.fsm_in_accepted_state = False

View File

@ -2,13 +2,13 @@ import logging
from tfw.internals.crypto import KeyManager, verify_message
from .event_handler import EventHandler
from .control_event_handler import ControlEventHandler
LOG = logging.getLogger(__name__)
# pylint: disable=abstract-method
class SignedEventHandler(EventHandler):
class SignedEventHandler(ControlEventHandler):
def __init__(self, connector):
self._auth_key = KeyManager().auth_key
super().__init__(connector)

View File

@ -2,3 +2,4 @@ from .serialization import serialize_tfw_msg, deserialize_tfw_msg, with_deserial
from .zmq_connector import ZMQConnector, ZMQDownlinkConnector, ZMQUplinkConnector
from .zmq_listener import ZMQListener
from .scope import Scope
from .intent import Intent

View File

@ -0,0 +1,6 @@
from enum import Enum
class Intent(Enum):
CONTROL = 'control'
EVENT = 'event'

View File

@ -4,6 +4,7 @@ import zmq
from zmq.eventloop.zmqstream import ZMQStream
from .scope import Scope
from .intent import Intent
from .serialization import (
serialize_tfw_msg,
deserialize_tfw_msg,
@ -51,8 +52,10 @@ class ZMQUplinkConnector:
self._zmq_push_socket.setsockopt(zmq.SNDHWM, 0)
self._zmq_push_socket.connect(connect_addr)
def send_message(self, message, scope=Scope.ZMQ):
def send_message(self, message, scope=Scope.ZMQ, intent=None):
message['scope'] = scope.value
if isinstance(intent, Intent):
message['intent'] = intent.value
self._zmq_push_socket.send_multipart(serialize_tfw_msg(message))
def close(self):