def __init__(self, factory, host, port): self.factory = factory self.host = host self.peer_port = port self.connect_trans_id = n_random(4) self.key = n_random(4) self.connected = False self.deferred = defer.Deferred()
def datagramReceived(self, datagram, addr): self.timeout.reset(5) if not self.connected: assert len(datagram) >= 16 action, trans_id, conn_id = struct.unpack('!I4sQ', datagram) assert action == 0 assert self.connect_trans_id == trans_id self.connect_id = conn_id self.trans_id = n_random(4) self.transport.write(self._make_announce_pack(actions['announce'], events['started'])) self.connected = True else: size = len(datagram) assert size >= 20 action, trans_id = struct.unpack_from('!I4s', datagram) assert action == 1 assert trans_id == self.trans_id datagram = datagram[8:] self.peers(datagram) self.timeout.cancel()