Exemple #1
0
class DHTPeerFinder(PeerFinder):
    # TODO: rename MetaNet to this
    _default_peers = [
        {
            "host": "violet.shishnet.org",
            "port": 52525
        }
    ]

    def __init__(self, core):
        self.core = core
        self.sender = Thread(target=self.run, name="DHTPeerFinder[Send]")
        self.sender.daemon = True

    def start(self):
        self.sender.start()

    def run(self):
        self._log("Getting external IP info")
        nat_type, external_ip, external_port = stun.get_ip_info()
        #nat_type, external_ip, external_port = None, "0.0.0.0", 12345
        self._log("Public addr: %s:%s" % (external_ip, external_port))

        self._log("Connecting to DHT")
        self.dht = DHT("0.0.0.0", 52525)
        self.public_contact = (external_ip, external_port)
        for peer in self.core.config.get("peers", self._default_peers):
            self.dht.bootstrap(peer["host"], peer["port"])

    def _log(self, msg):
        log.info("[MetaNet] %s" % msg)

    def offer(self, chunk):
        self._log("Offering %s" % chunk.id)

        if chunk.id not in self.dht:
            self.dht[chunk.id] = [self.public_contact]
        else:
            self.dht[chunk.id] = self.dht[chunk.id] + [self.public_contact]

    def request(self, chunk):
        self._log("Requesting %s" % chunk.id)
from pydht import DHT
import sys
import json
import tempfile

from twisted.python import log
from twisted.internet import reactor

NUM_NODES = 2
PORT_START = 4000
HOST = "localhost"

print "Creating node, joining network"
node = DHT("localhost", PORT_START + 50)
node.bootstrap("localhost", PORT_START)
print "Done."

class MyServerProtocol(WebSocketServerProtocol):

   def makeUrl(self):
       return tempfile.NamedTemporaryFile()

   def onConnect(self, request):
      print "Client connecting: {}".format(request.peer)

   def onOpen(self):
      print "WebSocket connection open."

   def onMessage(self, payload, isBinary):
      global node
Exemple #3
0
def join_network(hostname, port, boot_host, boot_port):
    n = DHT(hostname, port)
    n.bootstrap(boot_host, boot_port)
    return n