Added construct functions to all TLVs that did not have one.
This commit is contained in:
parent
e4797b745a
commit
806287f834
@ -83,6 +83,12 @@ class Pad1TLV(TLV):
|
||||
"""
|
||||
return 1
|
||||
|
||||
@staticmethod
|
||||
def construct() -> "Pad1TLV":
|
||||
tlv = Pad1TLV()
|
||||
tlv.type = 0
|
||||
return tlv
|
||||
|
||||
|
||||
class PadNTLV(TLV):
|
||||
"""
|
||||
@ -116,6 +122,13 @@ class PadNTLV(TLV):
|
||||
# TODO Add some easter eggs
|
||||
squirrel.add_system_message(f"I received {self.length} zeros, am I so a bag guy ? :cold_sweat:")
|
||||
|
||||
@staticmethod
|
||||
def construct(length: int) -> "Pad1TLV":
|
||||
tlv = PadNTLV()
|
||||
tlv.type = 1
|
||||
tlv.length = length
|
||||
tlv.mbz = b'0'*length
|
||||
return tlv
|
||||
|
||||
class HelloTLV(TLV):
|
||||
type: int = 2
|
||||
@ -147,7 +160,7 @@ class HelloTLV(TLV):
|
||||
timeH = time.time()
|
||||
timeHL = None
|
||||
if not squirrel.is_active(sender) :
|
||||
sender.id = source_id #The sender we are given misses an id
|
||||
sender.id = self.source_id #The sender we are given misses an id
|
||||
else :
|
||||
timeHL = squirrel.activehazelnuts[(sender.address, sender.port)]
|
||||
if self.is_long and dest_id == squirrel.id :
|
||||
@ -165,6 +178,18 @@ class HelloTLV(TLV):
|
||||
def is_long(self) -> bool:
|
||||
return self.length == 16
|
||||
|
||||
@staticmethod
|
||||
def construct(length: str, squirrel: Any) -> "HelloTLV":
|
||||
tlv = HelloTLV()
|
||||
tlv.type = 2
|
||||
tlv.source_id = squirrel.id if squirrel else 0
|
||||
if length == "short":
|
||||
tlv.length = 8
|
||||
else :
|
||||
tlv.length = 16
|
||||
tlv.dest_id = None
|
||||
return tlv
|
||||
|
||||
|
||||
class NeighbourTLV(TLV):
|
||||
type: int = 3
|
||||
@ -189,6 +214,14 @@ class NeighbourTLV(TLV):
|
||||
squirrel.potentialhazelnuts[(ip_address, port)] = squirrel.new_hazel(ip_address, port)
|
||||
squirrel.add_system_message(f"New potential friend {self.ip_address}:{self.port}!")
|
||||
|
||||
@staticmethod
|
||||
def construct(address: IPv6Address, port: int) -> "Pad1TLV":
|
||||
tlv = NeighbourTLV()
|
||||
tlv.type = 3
|
||||
tlv.length = 18 #A priori...
|
||||
tlv.ip_address = address
|
||||
tlv.port = port
|
||||
return tlv
|
||||
|
||||
class DataTLV(TLV):
|
||||
type: int = 4
|
||||
@ -320,6 +353,14 @@ class GoAwayTLV(TLV):
|
||||
squirrel.potentialhazelnuts[(sender.address, sender.port)] = sender
|
||||
squirrel.add_system_message("Some told me that he went away : "+message)
|
||||
|
||||
@staticmethod
|
||||
def construct(GAtype: GoAwayType, message: str) -> "Pad1TLV":
|
||||
tlv = GoAwayTLV()
|
||||
tlv.type = 6
|
||||
tlv.code = GAtype
|
||||
tlv.message = message.encode("UTF-8")
|
||||
tlv.length = 1 + len(tlv.message)
|
||||
return tlv
|
||||
|
||||
class WarningTLV(TLV):
|
||||
type: int = 7
|
||||
|
Loading…
Reference in New Issue
Block a user