Ejemplo n.º 1
0
Archivo: swarm.py Proyecto: mct/kohorte
    def __init__(self, directory, sha=None, clone=False):
        self.directory = os.path.abspath(directory)
        self.clone = clone
        self.peers = []
        self.dampen = {}
        self.aka = {}  # mapping of addr's to peer-ids
        self.loops = {}
        self.closed = False

        if self.clone:
            self.git = None
            self.sha = sha
        else:
            self.git = Git(self.directory)
            self.sha = self.git.root

        self.short_sha = self.sha[:7]

        if self.index.has_key(self.sha):
            raise Exception("Swarm already exists for %s" % self.directory)

        self.index[self.sha] = self
        EventLoop.register(self)

        print timestamp(), self, "Registered", self.sha
        lpd.LPD.update()
Ejemplo n.º 2
0
    def __init__(self, host, port, listen_port):
        if [ x for x in self.index if x.host == host and x.port == port ]:
            raise Exception("Tracker already exists for %s:%d" % (host, port))

        self.closed = False
        self.host = host                # Tracker's hostname
        self.port = port                # Tracker's port
        self.listen_port = listen_port  # Our port, to announce
        self.swarms = {}                # Map of Swarm objects to announcement expire times
        self.transaction_id = random.randint(0, 2**32)
        self.key = random.randint(0, 2**32)
        self.state = STATE_SOCK

        self.sock = None
        self.sock_next_attempt = 0

        self.current_swarm = None

        self.conn_id = None
        self.conn_id_expires = 0
        self.conn_id_next_attempt = 0
        self.conn_id_retry = 0

        self.announce_next_attempt = 0
        self.announce_retry = 0

        self.unmute_time = 0

        self.index.append(self)
        EventLoop.register(self)
        print timestamp(), self, "Registered"
Ejemplo n.º 3
0
    def __init__(self, addr, backlog=5):
        sock = socket.socket()
        sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        sock.bind(addr)
        sock.listen(backlog)
        sock.setblocking(False)

        self.sock = sock
        self.addr = sock.getsockname()

        EventLoop.register(self)
        print timestamp(), self, "Listening"
Ejemplo n.º 4
0
Archivo: lpd.py Proyecto: mct/kohorte
    def __init__(self, port, announce_time=600, sock_attempt_time=5):
        if self.index:
            raise Exception("An instance already exists?")

        self.port = port
        self.announce_time = announce_time
        self.sock_attempt_time = sock_attempt_time
        self.last_sock_attempt = 0
        self.sock = None
        self.open_socket()
        self.index.append(self)
        EventLoop.register(self)
Ejemplo n.º 5
0
Archivo: child.py Proyecto: mct/kohorte
    def __init__(self, peer, tag, cmd):
        self.tag = tag
        self.peer = peer
        self.cmd = cmd

        self.popen = Popen(cmd, stdout=PIPE, stderr=STDOUT, preexec_fn=os.setsid)
        self.pid = self.popen.pid
        self.fd = self.popen.stdout
        self.eof = False
        self.closed = False

        # Set non-blocking
        flags = fcntl.fcntl(self.fd, fcntl.F_GETFL)
        flags |= os.O_NONBLOCK
        fcntl.fcntl(self.fd, fcntl.F_SETFL, flags)

        print timestamp(), self, "Running", repr(' '.join(cmd))
        EventLoop.register(self)
Ejemplo n.º 6
0
Archivo: proxy.py Proyecto: mct/kohorte
    def __init__(self, listener, sock, addr, peer):
        sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 1024*128)
        sock.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 1024*128)

        self.listener = listener
        self.auth = listener.auth
        self.sock = sock
        self.addr = addr
        self.peer = peer
        self.readbuf = ''
        self.bytes_read = 0
        self.request = ''
        self.idle_timeout = time.time()
        self.sent_header = False
        self.eof = False
        self.closed = False
        self.id_ = None
        self.filename = None

        #print timestamp(), self, "Incomming connection from", self.addr
        EventLoop.register(self)
Ejemplo n.º 7
0
    def __init__(self, peer, sock, addr):
        if sock is None:
            # No sock argument means outbound connection
            sock = socket.socket()
            sock.setblocking(False)
            sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 1024*128)
            sock.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 1024*128)
            self.connected = False
        else:
            self.connected = True

        self.peer = peer
        self.sock = sock
        self.addr = addr

        self.host = addr[0]
        self.port = addr[1]

        self.readbuf = ''
        self.parse_state = STATE_START
        self.parse_len = 0
        self.helo = False
        self.last_read_time = time.time()
        self.last_ping_time = time.time()
        self.closed = False

        if not self.connected:
            print timestamp(), self, "Connecting to", self.addr
            try:
                self.sock.connect(self.addr)
            except socket.error as e:
                if e.errno != errno.EINPROGRESS:
                    raise
            else:
                print timestamp(), self, "Connected immediately?"
                self.on_connect()

        EventLoop.register(self)
Ejemplo n.º 8
0
Archivo: proxy.py Proyecto: mct/kohorte
    def __init__(self, peer, port=0, backlog=4):
        sock = socket.socket()
        sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        sock.bind(('127.0.0.1', port))
        sock.listen(backlog)
        sock.setblocking(False)

        self.peer = peer
        self.sock = sock
        self.addr = sock.getsockname()
        self.closed = False

        # Generate a random username and password for authentication.  We're
        # binding to localhost, but this prevents another user on the system
        # from hijacking our connection.
        self.auth = '%s:%s' % (base64.b32encode(os.urandom(10)), base64.b32encode(os.urandom(10)))
        self.url = 'http://%s@%s:%d/' % (self.auth, self.addr[0], self.addr[1])
        self.children = []

        self.set_env()

        EventLoop.register(self)
        print timestamp(), self, "Proxy URL", self.url