Skip to content

Commit

Permalink
Merge pull request #20 from niclabs/felipe
Browse files Browse the repository at this point in the history
Removing FSM after successful reassembly
  • Loading branch information
StarBrand committed Jun 16, 2021
2 parents 3cd33b3 + b5e808f commit 51a1e73
Show file tree
Hide file tree
Showing 5 changed files with 483 additions and 436 deletions.
2 changes: 1 addition & 1 deletion fragmentation_layer/code/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import binascii
import struct

from message import MESSAGE
from message import SHORT_MESSAGE as MESSAGE
from schc_handlers import SCHCNodeHandler
from schc_protocols import SCHCProtocol

Expand Down
19 changes: 12 additions & 7 deletions fragmentation_layer/code/schc_handlers/schc_gateway_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,18 @@ class SCHCGatewayHandler(SCHCHandler):
def __init__(self, protocol, mtu, on_receive_callback=None):
super().__init__(protocol, mtu)
if on_receive_callback:
def after_reassembly_processing(msg_bytes):
# TODO decompress before calling callback
on_receive_callback(msg_bytes)
used_callback = on_receive_callback
else:
used_callback = lambda msg: print("Message received", msg)

def create_after_processing_callback(rule_id, dtag):
def after_reassembly_processing(msg_bytes):
# TODO decompress before calling callback
print("Message received:", msg_bytes)
self.callback = after_reassembly_processing
used_callback(msg_bytes)
#self.__sessions__[rule_id].pop(dtag)
return after_reassembly_processing

self.callback_creator = create_after_processing_callback

def send_package(self, packet):
if self.__protocol__.id == SCHCProtocol.LoRaWAN:
Expand All @@ -36,7 +40,9 @@ def receive(self, rule_id, dtag, message):
if rule_id == LoRaWAN.ACK_ON_ERROR:
# message received
from schc_machines.lorawan import AckOnErrorReceiver
self.assign_session(rule_id, dtag, AckOnErrorReceiver(LoRaWAN(LoRaWAN.ACK_ON_ERROR), on_success=self.callback))
self.assign_session(rule_id, dtag, AckOnErrorReceiver(
LoRaWAN(LoRaWAN.ACK_ON_ERROR),
on_success=self.callback_creator(rule_id, dtag)))
self.__sessions__[rule_id][dtag].receive_message(message)
elif rule_id == LoRaWAN.ACK_ALWAYS:
# response received
Expand Down Expand Up @@ -64,7 +70,6 @@ def handle(self, message, f_port=None, url=None, dev_id=None):
"payload_raw": base64.b64encode(response[1:]).decode("utf-8")
}
r = requests.post(url, data=json.dumps(post_obj), headers={'content-type': 'application/json'})
print(r.status_code)

def generate_message(self, rule_id, dtag, mtu=512):
message = self.__sessions__[rule_id][dtag].generate_message(mtu)
Expand Down
2 changes: 1 addition & 1 deletion fragmentation_layer/code/schc_handlers/schc_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,5 +35,5 @@ def receive(self, rule_id, dtag, message):
def assign_session(self, rule_id, dtag, machine):
if rule_id not in self.__sessions__.keys():
self.__sessions__[rule_id] = dict()
if dtag not in self.__sessions__[rule_id].keys():
if dtag not in self.__sessions__[rule_id].keys() or self.__sessions__[rule_id][dtag].is_active() == False:
self.__sessions__[rule_id][dtag] = machine
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ def generate_message(self, mtu):
if self.sm.__last_window__ and self.__success__:
self.sm.state = self.sm.states["end"]
self.sm.state.enter_state()
self.sm.inactivity_timer.reset()
self.sm.on_success(self.sm.payload.as_bytes())
if len(self.sm.message_to_send) > 0:
message = self.sm.message_to_send.pop(0)
self._logger_.schc_message(message)
Expand Down Expand Up @@ -153,7 +155,6 @@ def receive_all1_schc_fragment(self, schc_message):
self._logger_.debug("Integrity check successful")
compressed_bitmap = None
self.__success__ = True
self.sm.on_success(self.sm.payload.as_bytes())
else:
self._logger_.error("Integrity check failed:\tSender: {}\tReceiver:{}".format(
schc_message.header.rcs.rcs,
Expand Down
Loading

0 comments on commit 51a1e73

Please sign in to comment.