Module lora_multihop.header
Expand source code
from lora_multihop import variables
__author__ = "Marvin Rausch"
EXPECTED_VALUE_COUNT_ROUTE_REQUEST_HEADER = 5
EXPECTED_VALUE_COUNT_ROUTE_REPLY_HEADER = 6
EXPECTED_VALUE_COUNT_MESSAGE_HEADER = 6
class Header:
def __init__(self, received_from, source, flag, ttl):
"""
constructor of Header class
:param received_from: address of node where the message comes from (LR,{addr},...) - last forwarding
:param source:
:param flag: int which defines header type
:param ttl: time to live
"""
self.received_from = received_from
self.source = source
self.flag = flag
self.ttl = int(ttl)
def __create_message_header_obj(received_from, header_str):
"""
creates message header object; helper function which is called by create_header_obj_from_raw message
:param received_from: address of last node which has forwarded message
:param header_str: from LoRa module received message as string
:return: message header object with attributes of received message
"""
payload = header_str[20:len(header_str) - 1]
if len(payload) == 0:
raise ValueError('payload missing')
return MessageHeader(received_from, header_str[1:5], header_str[8:9], header_str[10:14], header_str[15:19],
header_str[20:26], header_str[27:len(header_str) - 1])
def create_header_obj_from_raw_message(raw_message):
"""
creates a header object of appropriate header type from raw message
:param raw_message: raw message from LoRa module as string
:return: header object (type of header obj depends on flag in raw message)
"""
try:
raw_message_as_list = raw_message.split(variables.LORA_MODULE_DELIMITER, maxsplit=3)
received_from = raw_message_as_list[1]
check_addr_field(received_from, 'received_from')
header_str = raw_message_as_list[3]
# header_str = header_str.strip()
header_as_list = header_str.split(variables.HEADER_DELIMITER)
# remove first and last element, because they are empty strings (delimiter without values)
del header_as_list[0]
del header_as_list[len(header_as_list) - 1]
source = header_as_list[0]
check_addr_field(source, 'source')
flag = header_as_list[1]
check_int_field(flag)
flag = int(flag)
ttl = header_as_list[2]
check_int_field(ttl)
ttl = int(ttl)
if flag == MessageHeader.HEADER_TYPE or flag == MessageAcknowledgeHeader.HEADER_TYPE:
destination = header_as_list[3]
if destination not in variables.AVAILABLE_NODES:
raise ValueError(
"unknown destination: {destination} \n available destinations are {available_destinations}".format(
destination=destination, available_destinations=str(variables.AVAILABLE_NODES)))
if flag == MessageAcknowledgeHeader.HEADER_TYPE:
return MessageAcknowledgeHeader(received_from, source, ttl, destination, header_as_list[4])
else:
return __create_message_header_obj(received_from, header_str)
elif flag == RouteRequestHeader.HEADER_TYPE or flag == RouteReplyHeader.HEADER_TYPE:
# it is a route request or a route reply header
hops = header_as_list[3]
check_int_field(hops)
end_node = header_as_list[4]
check_addr_field(end_node, 'end_node')
if flag == RouteRequestHeader.HEADER_TYPE:
if len(header_as_list) != EXPECTED_VALUE_COUNT_ROUTE_REQUEST_HEADER:
raise ValueError('route request header has an unexpected length')
return RouteRequestHeader(received_from, source, ttl, hops, end_node)
next_node = header_as_list[5]
check_addr_field(next_node, 'next_node')
return RouteReplyHeader(received_from, source, ttl, hops, end_node, next_node)
elif flag == RouteErrorHeader.HEADER_TYPE:
broken_node = header_as_list[3]
check_addr_field(broken_node, 'broken node')
return RouteErrorHeader(received_from, source, ttl, broken_node)
elif flag == RegistrationHeader.HEADER_TYPE:
subscribe = header_as_list[3]
if subscribe == 'true':
subscribe = True
elif subscribe == 'false':
subscribe = False
else:
raise ValueError(f'invalid value for subscribe parameter: {subscribe}')
peer_id = header_as_list[4]
if len(peer_id) == 0:
raise ValueError(f'invalid value for subscribe parameter: {subscribe}')
return RegistrationHeader(received_from, source, ttl, subscribe, peer_id)
elif flag == ConnectRequestHeader.HEADER_TYPE:
end_node = header_as_list[3]
check_addr_field(end_node, 'end_node')
next_node = header_as_list[4]
check_addr_field(next_node, 'end_node')
return ConnectRequestHeader(received_from, source, ttl, end_node, next_node, header_as_list[5],
header_as_list[6], header_as_list[7])
elif flag == DisconnectRequestHeader.HEADER_TYPE:
end_node = header_as_list[3]
check_addr_field(end_node, 'end_node')
next_node = header_as_list[4]
check_addr_field(next_node, 'end_node')
return DisconnectRequestHeader(received_from, source, ttl, end_node, next_node, header_as_list[5],
header_as_list[6])
raise ValueError(f"flag {flag} is not a valid flag")
except IndexError:
raise ValueError("header has an unexpected length")
def check_int_field(str_to_convert, length=1):
"""
helper function to convert string to int and check whether the string has the correct length
:param str_to_convert: string which should be converted to integer
:param length: expected length of the string
:return: int value of the string
"""
if len(str_to_convert) != length:
int(str_to_convert)
def check_addr_field(addr_str, field_name=''):
"""
helper function which checks whether the passed string has the correct length. Can be used to validate addresses
in raw message from LoRa module.
:param addr_str: addr string from raw message
:param field_name: name of address type (e.g. source, destination, ...). This value is used for the exception
message.
:raises ValueError if length of passed string is not equal to expected length
"""
if len(addr_str) != 4:
raise ValueError(
"header field '{field_name}' has an unexpected format: {addr_str}".format(field_name=field_name,
addr_str=addr_str))
def get_received_from_value(raw_message):
"""
extracts address of last node which has forwarded received message from raw message
:param raw_message: received message as string
:return: address of last node which has forwarded received message as string
"""
try:
received_from = raw_message.split(variables.LORA_MODULE_DELIMITER)[1]
check_addr_field(received_from)
return received_from
except IndexError:
raise ValueError('could not get received from value of message')
def get_flag_from_raw_message(raw_message):
"""
get flag of raw message
:param raw_message: message as str where to search for flag
:return: flag as int
"""
try:
header_str = raw_message.split(',')[3]
flag = header_str[4:5]
flag = int(flag)
except IndexError:
raise ValueError('flag was not set')
return flag
class RouteRequestHeader(Header):
LENGTH = 11
HEADER_TYPE = 3
def __init__(self, received_from, source, ttl, hops, end_node):
super().__init__(received_from, source, self.HEADER_TYPE, ttl)
self.end_node = end_node
self.hops = int(hops)
def __str__(self):
"""
to string method to make obj human readable for debugging purposes
:return:
"""
return self.source + " " + self.flag + " " + str(self.ttl) + " " + str(self.hops) + " " + self.end_node
def get_header_str(self):
"""
create header message from header object which can be sent over LoRa network
:return: header object as string (format like defined in routing protocol)
"""
return create_header_str(self.source, str(self.flag), str(self.ttl), str(self.hops), self.end_node)
class RouteReplyHeader(Header):
LENGTH = 15
HEADER_TYPE = 4
def __init__(self, received_from, source, ttl, hops, end_node, next_node):
super().__init__(received_from, source, self.HEADER_TYPE, ttl)
self.end_node = end_node
self.hops = int(hops)
self.next_node = next_node
def __str__(self):
"""
to string method to make obj human readable for debugging purposes
:return:
"""
return self.source + " " + self.flag + " " + str(self.ttl) + " " + str(self.hops) + " " + self.end_node + " " \
+ self.next_node
def get_header_str(self):
"""
create header message from header object which can be sent over LoRa network
:return: header object as string (format like defined in routing protocol)
"""
return create_header_str(self.source, str(self.flag), str(self.ttl), str(self.hops), self.end_node,
self.next_node)
class MessageHeader(Header):
LENGTH = 14
HEADER_TYPE = 1
def __init__(self, received_from, source, ttl, destination, next_node, message_id, payload):
super().__init__(received_from, source, self.HEADER_TYPE, ttl)
self.next_node = next_node
self.payload = payload
self.destination = destination
self.message_id = int(message_id)
def get_header_str(self):
"""
create header message from header object which can be sent over LoRa network
:return: header object as string (format like defined in routing protocol)
"""
return create_header_str(self.source, str(self.flag), str(self.ttl), self.destination, self.next_node,
f'{self.message_id:06d}', self.payload)
class RouteErrorHeader(Header):
HEADER_TYPE = 5
def __init__(self, received_from, source, ttl, broken_node):
super().__init__(received_from, source, self.HEADER_TYPE, ttl)
self.broken_node = broken_node
def get_header_str(self):
"""
create header message from header object which can be sent over LoRa network
:return: header object as string (format like defined in routing protocol)
"""
return create_header_str(self.source, str(self.flag), str(self.ttl), self.broken_node)
class MessageAcknowledgeHeader(Header):
HEADER_TYPE = 2
def __init__(self, received_from, source, ttl, destination, message_id):
super().__init__(received_from, source, self.HEADER_TYPE, ttl)
self.flag = self.HEADER_TYPE
self.received_from = received_from
self.destination = destination
self.ttl = ttl
self.message_id = message_id
def get_header_str(self):
"""
create header message from header object which can be sent over LoRa network
:return: header object as string (format like defined in routing protocol)
"""
return create_header_str(str(self.source), str(self.flag), str(self.ttl), self.destination, self.message_id)
class RegistrationHeader(Header):
HEADER_TYPE = 6
def __init__(self, received_from, source, ttl, subscribe, peer_id):
super().__init__(received_from, source, self.HEADER_TYPE, ttl)
self.flag = self.HEADER_TYPE
self.ttl = ttl
self.peer_id = peer_id
self.subscribe = subscribe
def get_header_str(self):
"""
create header message from header object which can be sent over LoRa network
:return: header object as string (format like defined in routing protocol)
"""
if self.subscribe:
subscribe_str = 'true'
else:
subscribe_str = 'false'
return create_header_str(str(self.source), str(self.flag), str(self.ttl), subscribe_str, self.peer_id)
class ConnectRequestHeader(Header):
HEADER_TYPE = 7
def __init__(self, received_from, source, ttl, end_node, next_node, source_peer_id, target_peer_id, timeout):
super().__init__(received_from, source, self.HEADER_TYPE, ttl)
self.end_node = end_node
self.next_node = next_node
self.source_peer_id = source_peer_id
self.target_peer_id = target_peer_id
self.timeout = timeout
def __str__(self):
"""
to string method to make obj human readable for debugging purposes
:return:
"""
return self.source + " " + self.flag + " " + str(self.ttl) + " " + self.end_node + " " + self.next_node + \
" " + self.source_peer_id + " " + self.target_peer_id + " " + self.timeout
def get_header_str(self):
"""
create header message from header object which can be sent over LoRa network
:return: header object as string (format like defined in routing protocol)
"""
return create_header_str(self.source, str(self.flag), str(self.ttl), self.end_node, self.next_node,
self.source_peer_id, self.target_peer_id, self.timeout)
class DisconnectRequestHeader(Header):
HEADER_TYPE = 8
def __init__(self, received_from, source, ttl, end_node, next_node, source_peer_id, target_peer_id):
super().__init__(received_from, source, self.HEADER_TYPE, ttl)
self.end_node = end_node
self.next_node = next_node
self.source_peer_id = source_peer_id
self.target_peer_id = target_peer_id
def __str__(self):
"""
to string method to make obj human readable for debugging purposes
:return:
"""
return self.source + " " + self.flag + " " + str(self.ttl) + " " + self.end_node + " " + self.next_node + \
" " + self.source_peer_id + " " + self.target_peer_id
def get_header_str(self):
"""
create header message from header object which can be sent over LoRa network
:return: header object as string (format like defined in routing protocol)
"""
return create_header_str(self.source, str(self.flag), str(self.ttl), self.end_node, self.next_node,
self.source_peer_id, self.target_peer_id)
def create_header_str(*args):
"""
create header str with delimiters
:param args: values which should be in header
:return: values concatenated as str with '|' as delimiter
"""
header_str = '|'
for arg in args:
header_str = header_str + str(arg) + '|'
return header_str
Functions
def check_addr_field(addr_str, field_name='')
-
helper function which checks whether the passed string has the correct length. Can be used to validate addresses in raw message from LoRa module. :param addr_str: addr string from raw message :param field_name: name of address type (e.g. source, destination, …). This value is used for the exception message. :raises ValueError if length of passed string is not equal to expected length
Expand source code
def check_addr_field(addr_str, field_name=''): """ helper function which checks whether the passed string has the correct length. Can be used to validate addresses in raw message from LoRa module. :param addr_str: addr string from raw message :param field_name: name of address type (e.g. source, destination, ...). This value is used for the exception message. :raises ValueError if length of passed string is not equal to expected length """ if len(addr_str) != 4: raise ValueError( "header field '{field_name}' has an unexpected format: {addr_str}".format(field_name=field_name, addr_str=addr_str))
def check_int_field(str_to_convert, length=1)
-
helper function to convert string to int and check whether the string has the correct length :param str_to_convert: string which should be converted to integer :param length: expected length of the string :return: int value of the string
Expand source code
def check_int_field(str_to_convert, length=1): """ helper function to convert string to int and check whether the string has the correct length :param str_to_convert: string which should be converted to integer :param length: expected length of the string :return: int value of the string """ if len(str_to_convert) != length: int(str_to_convert)
def create_header_obj_from_raw_message(raw_message)
-
creates a header object of appropriate header type from raw message :param raw_message: raw message from LoRa module as string :return: header object (type of header obj depends on flag in raw message)
Expand source code
def create_header_obj_from_raw_message(raw_message): """ creates a header object of appropriate header type from raw message :param raw_message: raw message from LoRa module as string :return: header object (type of header obj depends on flag in raw message) """ try: raw_message_as_list = raw_message.split(variables.LORA_MODULE_DELIMITER, maxsplit=3) received_from = raw_message_as_list[1] check_addr_field(received_from, 'received_from') header_str = raw_message_as_list[3] # header_str = header_str.strip() header_as_list = header_str.split(variables.HEADER_DELIMITER) # remove first and last element, because they are empty strings (delimiter without values) del header_as_list[0] del header_as_list[len(header_as_list) - 1] source = header_as_list[0] check_addr_field(source, 'source') flag = header_as_list[1] check_int_field(flag) flag = int(flag) ttl = header_as_list[2] check_int_field(ttl) ttl = int(ttl) if flag == MessageHeader.HEADER_TYPE or flag == MessageAcknowledgeHeader.HEADER_TYPE: destination = header_as_list[3] if destination not in variables.AVAILABLE_NODES: raise ValueError( "unknown destination: {destination} \n available destinations are {available_destinations}".format( destination=destination, available_destinations=str(variables.AVAILABLE_NODES))) if flag == MessageAcknowledgeHeader.HEADER_TYPE: return MessageAcknowledgeHeader(received_from, source, ttl, destination, header_as_list[4]) else: return __create_message_header_obj(received_from, header_str) elif flag == RouteRequestHeader.HEADER_TYPE or flag == RouteReplyHeader.HEADER_TYPE: # it is a route request or a route reply header hops = header_as_list[3] check_int_field(hops) end_node = header_as_list[4] check_addr_field(end_node, 'end_node') if flag == RouteRequestHeader.HEADER_TYPE: if len(header_as_list) != EXPECTED_VALUE_COUNT_ROUTE_REQUEST_HEADER: raise ValueError('route request header has an unexpected length') return RouteRequestHeader(received_from, source, ttl, hops, end_node) next_node = header_as_list[5] check_addr_field(next_node, 'next_node') return RouteReplyHeader(received_from, source, ttl, hops, end_node, next_node) elif flag == RouteErrorHeader.HEADER_TYPE: broken_node = header_as_list[3] check_addr_field(broken_node, 'broken node') return RouteErrorHeader(received_from, source, ttl, broken_node) elif flag == RegistrationHeader.HEADER_TYPE: subscribe = header_as_list[3] if subscribe == 'true': subscribe = True elif subscribe == 'false': subscribe = False else: raise ValueError(f'invalid value for subscribe parameter: {subscribe}') peer_id = header_as_list[4] if len(peer_id) == 0: raise ValueError(f'invalid value for subscribe parameter: {subscribe}') return RegistrationHeader(received_from, source, ttl, subscribe, peer_id) elif flag == ConnectRequestHeader.HEADER_TYPE: end_node = header_as_list[3] check_addr_field(end_node, 'end_node') next_node = header_as_list[4] check_addr_field(next_node, 'end_node') return ConnectRequestHeader(received_from, source, ttl, end_node, next_node, header_as_list[5], header_as_list[6], header_as_list[7]) elif flag == DisconnectRequestHeader.HEADER_TYPE: end_node = header_as_list[3] check_addr_field(end_node, 'end_node') next_node = header_as_list[4] check_addr_field(next_node, 'end_node') return DisconnectRequestHeader(received_from, source, ttl, end_node, next_node, header_as_list[5], header_as_list[6]) raise ValueError(f"flag {flag} is not a valid flag") except IndexError: raise ValueError("header has an unexpected length")
def create_header_str(*args)
-
create header str with delimiters :param args: values which should be in header :return: values concatenated as str with '|' as delimiter
Expand source code
def create_header_str(*args): """ create header str with delimiters :param args: values which should be in header :return: values concatenated as str with '|' as delimiter """ header_str = '|' for arg in args: header_str = header_str + str(arg) + '|' return header_str
def get_flag_from_raw_message(raw_message)
-
get flag of raw message :param raw_message: message as str where to search for flag :return: flag as int
Expand source code
def get_flag_from_raw_message(raw_message): """ get flag of raw message :param raw_message: message as str where to search for flag :return: flag as int """ try: header_str = raw_message.split(',')[3] flag = header_str[4:5] flag = int(flag) except IndexError: raise ValueError('flag was not set') return flag
def get_received_from_value(raw_message)
-
extracts address of last node which has forwarded received message from raw message :param raw_message: received message as string :return: address of last node which has forwarded received message as string
Expand source code
def get_received_from_value(raw_message): """ extracts address of last node which has forwarded received message from raw message :param raw_message: received message as string :return: address of last node which has forwarded received message as string """ try: received_from = raw_message.split(variables.LORA_MODULE_DELIMITER)[1] check_addr_field(received_from) return received_from except IndexError: raise ValueError('could not get received from value of message')
Classes
class ConnectRequestHeader (received_from, source, ttl, end_node, next_node, source_peer_id, target_peer_id, timeout)
-
constructor of Header class :param received_from: address of node where the message comes from (LR,{addr},…) - last forwarding :param source: :param flag: int which defines header type :param ttl: time to live
Expand source code
class ConnectRequestHeader(Header): HEADER_TYPE = 7 def __init__(self, received_from, source, ttl, end_node, next_node, source_peer_id, target_peer_id, timeout): super().__init__(received_from, source, self.HEADER_TYPE, ttl) self.end_node = end_node self.next_node = next_node self.source_peer_id = source_peer_id self.target_peer_id = target_peer_id self.timeout = timeout def __str__(self): """ to string method to make obj human readable for debugging purposes :return: """ return self.source + " " + self.flag + " " + str(self.ttl) + " " + self.end_node + " " + self.next_node + \ " " + self.source_peer_id + " " + self.target_peer_id + " " + self.timeout def get_header_str(self): """ create header message from header object which can be sent over LoRa network :return: header object as string (format like defined in routing protocol) """ return create_header_str(self.source, str(self.flag), str(self.ttl), self.end_node, self.next_node, self.source_peer_id, self.target_peer_id, self.timeout)
Ancestors
Class variables
var HEADER_TYPE
Methods
def get_header_str(self)
-
create header message from header object which can be sent over LoRa network :return: header object as string (format like defined in routing protocol)
Expand source code
def get_header_str(self): """ create header message from header object which can be sent over LoRa network :return: header object as string (format like defined in routing protocol) """ return create_header_str(self.source, str(self.flag), str(self.ttl), self.end_node, self.next_node, self.source_peer_id, self.target_peer_id, self.timeout)
class DisconnectRequestHeader (received_from, source, ttl, end_node, next_node, source_peer_id, target_peer_id)
-
constructor of Header class :param received_from: address of node where the message comes from (LR,{addr},…) - last forwarding :param source: :param flag: int which defines header type :param ttl: time to live
Expand source code
class DisconnectRequestHeader(Header): HEADER_TYPE = 8 def __init__(self, received_from, source, ttl, end_node, next_node, source_peer_id, target_peer_id): super().__init__(received_from, source, self.HEADER_TYPE, ttl) self.end_node = end_node self.next_node = next_node self.source_peer_id = source_peer_id self.target_peer_id = target_peer_id def __str__(self): """ to string method to make obj human readable for debugging purposes :return: """ return self.source + " " + self.flag + " " + str(self.ttl) + " " + self.end_node + " " + self.next_node + \ " " + self.source_peer_id + " " + self.target_peer_id def get_header_str(self): """ create header message from header object which can be sent over LoRa network :return: header object as string (format like defined in routing protocol) """ return create_header_str(self.source, str(self.flag), str(self.ttl), self.end_node, self.next_node, self.source_peer_id, self.target_peer_id)
Ancestors
Class variables
var HEADER_TYPE
Methods
def get_header_str(self)
-
create header message from header object which can be sent over LoRa network :return: header object as string (format like defined in routing protocol)
Expand source code
def get_header_str(self): """ create header message from header object which can be sent over LoRa network :return: header object as string (format like defined in routing protocol) """ return create_header_str(self.source, str(self.flag), str(self.ttl), self.end_node, self.next_node, self.source_peer_id, self.target_peer_id)
class Header (received_from, source, flag, ttl)
-
constructor of Header class :param received_from: address of node where the message comes from (LR,{addr},…) - last forwarding :param source: :param flag: int which defines header type :param ttl: time to live
Expand source code
class Header: def __init__(self, received_from, source, flag, ttl): """ constructor of Header class :param received_from: address of node where the message comes from (LR,{addr},...) - last forwarding :param source: :param flag: int which defines header type :param ttl: time to live """ self.received_from = received_from self.source = source self.flag = flag self.ttl = int(ttl)
Subclasses
class MessageAcknowledgeHeader (received_from, source, ttl, destination, message_id)
-
constructor of Header class :param received_from: address of node where the message comes from (LR,{addr},…) - last forwarding :param source: :param flag: int which defines header type :param ttl: time to live
Expand source code
class MessageAcknowledgeHeader(Header): HEADER_TYPE = 2 def __init__(self, received_from, source, ttl, destination, message_id): super().__init__(received_from, source, self.HEADER_TYPE, ttl) self.flag = self.HEADER_TYPE self.received_from = received_from self.destination = destination self.ttl = ttl self.message_id = message_id def get_header_str(self): """ create header message from header object which can be sent over LoRa network :return: header object as string (format like defined in routing protocol) """ return create_header_str(str(self.source), str(self.flag), str(self.ttl), self.destination, self.message_id)
Ancestors
Class variables
var HEADER_TYPE
Methods
def get_header_str(self)
-
create header message from header object which can be sent over LoRa network :return: header object as string (format like defined in routing protocol)
Expand source code
def get_header_str(self): """ create header message from header object which can be sent over LoRa network :return: header object as string (format like defined in routing protocol) """ return create_header_str(str(self.source), str(self.flag), str(self.ttl), self.destination, self.message_id)
class MessageHeader (received_from, source, ttl, destination, next_node, message_id, payload)
-
constructor of Header class :param received_from: address of node where the message comes from (LR,{addr},…) - last forwarding :param source: :param flag: int which defines header type :param ttl: time to live
Expand source code
class MessageHeader(Header): LENGTH = 14 HEADER_TYPE = 1 def __init__(self, received_from, source, ttl, destination, next_node, message_id, payload): super().__init__(received_from, source, self.HEADER_TYPE, ttl) self.next_node = next_node self.payload = payload self.destination = destination self.message_id = int(message_id) def get_header_str(self): """ create header message from header object which can be sent over LoRa network :return: header object as string (format like defined in routing protocol) """ return create_header_str(self.source, str(self.flag), str(self.ttl), self.destination, self.next_node, f'{self.message_id:06d}', self.payload)
Ancestors
Class variables
var HEADER_TYPE
var LENGTH
Methods
def get_header_str(self)
-
create header message from header object which can be sent over LoRa network :return: header object as string (format like defined in routing protocol)
Expand source code
def get_header_str(self): """ create header message from header object which can be sent over LoRa network :return: header object as string (format like defined in routing protocol) """ return create_header_str(self.source, str(self.flag), str(self.ttl), self.destination, self.next_node, f'{self.message_id:06d}', self.payload)
class RegistrationHeader (received_from, source, ttl, subscribe, peer_id)
-
constructor of Header class :param received_from: address of node where the message comes from (LR,{addr},…) - last forwarding :param source: :param flag: int which defines header type :param ttl: time to live
Expand source code
class RegistrationHeader(Header): HEADER_TYPE = 6 def __init__(self, received_from, source, ttl, subscribe, peer_id): super().__init__(received_from, source, self.HEADER_TYPE, ttl) self.flag = self.HEADER_TYPE self.ttl = ttl self.peer_id = peer_id self.subscribe = subscribe def get_header_str(self): """ create header message from header object which can be sent over LoRa network :return: header object as string (format like defined in routing protocol) """ if self.subscribe: subscribe_str = 'true' else: subscribe_str = 'false' return create_header_str(str(self.source), str(self.flag), str(self.ttl), subscribe_str, self.peer_id)
Ancestors
Class variables
var HEADER_TYPE
Methods
def get_header_str(self)
-
create header message from header object which can be sent over LoRa network :return: header object as string (format like defined in routing protocol)
Expand source code
def get_header_str(self): """ create header message from header object which can be sent over LoRa network :return: header object as string (format like defined in routing protocol) """ if self.subscribe: subscribe_str = 'true' else: subscribe_str = 'false' return create_header_str(str(self.source), str(self.flag), str(self.ttl), subscribe_str, self.peer_id)
class RouteErrorHeader (received_from, source, ttl, broken_node)
-
constructor of Header class :param received_from: address of node where the message comes from (LR,{addr},…) - last forwarding :param source: :param flag: int which defines header type :param ttl: time to live
Expand source code
class RouteErrorHeader(Header): HEADER_TYPE = 5 def __init__(self, received_from, source, ttl, broken_node): super().__init__(received_from, source, self.HEADER_TYPE, ttl) self.broken_node = broken_node def get_header_str(self): """ create header message from header object which can be sent over LoRa network :return: header object as string (format like defined in routing protocol) """ return create_header_str(self.source, str(self.flag), str(self.ttl), self.broken_node)
Ancestors
Class variables
var HEADER_TYPE
Methods
def get_header_str(self)
-
create header message from header object which can be sent over LoRa network :return: header object as string (format like defined in routing protocol)
Expand source code
def get_header_str(self): """ create header message from header object which can be sent over LoRa network :return: header object as string (format like defined in routing protocol) """ return create_header_str(self.source, str(self.flag), str(self.ttl), self.broken_node)
class RouteReplyHeader (received_from, source, ttl, hops, end_node, next_node)
-
constructor of Header class :param received_from: address of node where the message comes from (LR,{addr},…) - last forwarding :param source: :param flag: int which defines header type :param ttl: time to live
Expand source code
class RouteReplyHeader(Header): LENGTH = 15 HEADER_TYPE = 4 def __init__(self, received_from, source, ttl, hops, end_node, next_node): super().__init__(received_from, source, self.HEADER_TYPE, ttl) self.end_node = end_node self.hops = int(hops) self.next_node = next_node def __str__(self): """ to string method to make obj human readable for debugging purposes :return: """ return self.source + " " + self.flag + " " + str(self.ttl) + " " + str(self.hops) + " " + self.end_node + " " \ + self.next_node def get_header_str(self): """ create header message from header object which can be sent over LoRa network :return: header object as string (format like defined in routing protocol) """ return create_header_str(self.source, str(self.flag), str(self.ttl), str(self.hops), self.end_node, self.next_node)
Ancestors
Class variables
var HEADER_TYPE
var LENGTH
Methods
def get_header_str(self)
-
create header message from header object which can be sent over LoRa network :return: header object as string (format like defined in routing protocol)
Expand source code
def get_header_str(self): """ create header message from header object which can be sent over LoRa network :return: header object as string (format like defined in routing protocol) """ return create_header_str(self.source, str(self.flag), str(self.ttl), str(self.hops), self.end_node, self.next_node)
class RouteRequestHeader (received_from, source, ttl, hops, end_node)
-
constructor of Header class :param received_from: address of node where the message comes from (LR,{addr},…) - last forwarding :param source: :param flag: int which defines header type :param ttl: time to live
Expand source code
class RouteRequestHeader(Header): LENGTH = 11 HEADER_TYPE = 3 def __init__(self, received_from, source, ttl, hops, end_node): super().__init__(received_from, source, self.HEADER_TYPE, ttl) self.end_node = end_node self.hops = int(hops) def __str__(self): """ to string method to make obj human readable for debugging purposes :return: """ return self.source + " " + self.flag + " " + str(self.ttl) + " " + str(self.hops) + " " + self.end_node def get_header_str(self): """ create header message from header object which can be sent over LoRa network :return: header object as string (format like defined in routing protocol) """ return create_header_str(self.source, str(self.flag), str(self.ttl), str(self.hops), self.end_node)
Ancestors
Class variables
var HEADER_TYPE
var LENGTH
Methods
def get_header_str(self)
-
create header message from header object which can be sent over LoRa network :return: header object as string (format like defined in routing protocol)
Expand source code
def get_header_str(self): """ create header message from header object which can be sent over LoRa network :return: header object as string (format like defined in routing protocol) """ return create_header_str(self.source, str(self.flag), str(self.ttl), str(self.hops), self.end_node)