Пример #1
0
  def request(self, piece, start, length):
    self.socket.send(builder('interested'))

    while True:
      message = parser(self.socket.recv(400000))
      if not message:
        continue

      if message[0] == 'unchoke':
        self.socket.send(builder('request', piece, start, length))

      if message[0] == 'piece':
        self.write_block(message[1])
        return
Пример #2
0
def handle(socket, address):
    print green("Client connected")

    while True:
        data = socket.recv(2048)
        if not data:
            print red("Client disconnected")
            return

        message = parser(data)
        if message is None:
            return

        if message[0] == "transfer":
            transfer(message[1], socket)
Пример #3
0
def handle(socket, address):
  torrent = None
  while True:
    data = socket.recv(2048)
    if not data:
      print "Client disconnected"
      break

    if len(data) == 85:
      torrent = handshake(data, socket)
      continue

    message = parser(data)

    if message[0] == 'interested':
      message = builder('unchoke')
      socket.send(message)

    if message[0] == 'request':
      parse_request(socket, torrent, *message[1])
Пример #4
0
  def transfer_from(self, client, to, how_much, times=0):
    if times >= 3:
      return False

    with open("db/clients.txt") as f:
      clients = f.read()
      if "%s:" % client not in clients:
        raise ValueError("%s is not a client" % client)
      if "%s:" % to not in clients:
        raise ValueError("%s is not a client" % to)

    client = sha1(client).hexdigest()
    to = sha1(to).hexdigest()
    message = builder('transfer', client, to, int(how_much), int(time.time()))
    self.socket.send(message)

    response = parser(self.socket.recv(2048))
    if response is not None and response[0] == 'retry':
      time.sleep(1)
      self.transfer_from(client, to, how_much, times + 1)
    elif response is not None and response[0] == 'success':
      return True
Пример #5
0
  def bitfield(self):
    if not self.handshake:
      return

    bitfield = self.socket.recv(2048)
    return parser(bitfield)[1]