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()
Example #2
0
File: reader.py Project: blanu/Dust
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()