class PendingMessage: def __init__(self, reader, name, msg): self.reader = reader self.name = name self.msg = msg destAddress = self.reader.book[self.name]['tracker'] dest, outport, v6 = decodeAddress(destAddress) recipient = self.reader.book[self.name]['pubkey'] self.endkey = decode(recipient) self.reader.trackback.setPutPeerForEndpointCallback( recipient, self.foundPeer) self.tracker = TrackerClient(self.reader.router, addr=(dest, outport)) self.tracker.getPeerForEndpoint(recipient) def foundPeer(self, endkey, peer): destkey = decode(peer[0]) addr = peer[1] if self.reader.keys.isKnown( addr) or self.reader.keys.outgoingInvites.getInviteForHost( False, decodeAddress(addr)): self.sendMessage(decodeAddress(addr)) else: self.reader.trackback.setPutInviteForPeerCallback( addr, self.foundInvite) self.tracker.getInviteForPeer(addr) def foundInvite(self, addr, invite): self.sendMessage(decodeAddress(addr)) def sendMessage(self, addr): data = self.msg.encode('ascii') onion = OnionPacket() onion.createOnionPacket(self.reader.keys.getEndpoint(), self.endkey, data, self.reader.keys.entropy) dustmail = DustmailClient(self.reader.router, addr) dustmail.sendMessage(encode(onion.packet)) self.reader.commandDone.set()
class PendingMessage: def __init__(self, reader, name, msg): self.reader=reader self.name=name self.msg=msg destAddress=self.reader.book[self.name]['tracker'] dest, outport, v6=decodeAddress(destAddress) recipient=self.reader.book[self.name]['pubkey'] self.endkey=decode(recipient) self.reader.trackback.setPutPeerForEndpointCallback(recipient, self.foundPeer) self.tracker=TrackerClient(self.reader.router, addr=(dest, outport)) self.tracker.getPeerForEndpoint(recipient) def foundPeer(self, endkey, peer): destkey=decode(peer[0]) addr=peer[1] if self.reader.keys.isKnown(addr) or self.reader.keys.outgoingInvites.getInviteForHost(False, decodeAddress(addr)): self.sendMessage(decodeAddress(addr)) else: self.reader.trackback.setPutInviteForPeerCallback(addr, self.foundInvite) self.tracker.getInviteForPeer(addr) def foundInvite(self, addr, invite): self.sendMessage(decodeAddress(addr)) def sendMessage(self, addr): data=self.msg.encode('ascii') onion=OnionPacket() onion.createOnionPacket(self.reader.keys.getEndpoint(), self.endkey, data, self.reader.keys.entropy) dustmail=DustmailClient(self.reader.router, addr) dustmail.sendMessage(encode(onion.packet)) self.reader.commandDone.set()
ipv=int(sys.argv[5]) if ipv==6: v6=True else: v6=False host=getPublicIP(v6) print('Host: '+str(host)) keys=KeyManager() keys.setInvitePassword(passwd) keys.loadKnownHosts('config/knownhosts.yaml') keys.loadKeypair('config/id.yaml') keys.loadIncomingInvites('config/incoming_invites.ip') keys.loadOutgoingInvites('config/outgoing_invites.ip') router=PacketRouter(v6, inport, keys, passwd) router.connect(dest, outport) tracker=TrackerClient(router) trackback=router.getService('trackback') router.start() tracker.putPeerForEndpoint('43aafb64bc96460f3928f6068b2a01aa87bac16da6dc034b4525d1837e9cb85e', ['43aafb64bc96460f3928f6068b2a01aa87bac16da6dc034b4525d1837e9cb85e', encodeAddress((host, inport))]) trackback.setPutPeerForEndpointCallback('43aafb64bc96460f3928f6068b2a01aa87bac16da6dc034b4525d1837e9cb85e', foundPeer) tracker.getPeerForEndpoint('43aafb64bc96460f3928f6068b2a01aa87bac16da6dc034b4525d1837e9cb85e') while True: time.sleep(1)