Reticulum/FPE/Packet.py

35 lines
874 B
Python
Raw Normal View History

2016-06-03 11:02:02 -06:00
import struct
from Transport import *
class Packet:
def __init__(self, destination, data):
self.destination = destination
self.data = data
self.flags = 0x00
self.header = 0x00
self.raw = None
self.sent = False
self.mtu = 0
def send(self):
if not self.sent:
self.MTU = self.destination.MTU
self.header = struct.pack("!B", self.header ^ self.destination.type ^ self.flags)
self.header += self.destination.hash
self.ciphertext = self.destination.encrypt(self.data)
self.raw = self.header + self.ciphertext
if len(self.raw) > self.MTU:
raise IOError("Packet size exceeds MTU of "+Packet.MTU+" bytes")
Transport.outbound(self.raw)
self.sent = True
else:
raise IOError("Packet was already sent")
def resend(self):
if self.sent:
Transport.outbound(self.raw)
else:
raise IOError("Packet was not sent yet")