Пример #1
0
 def __init__(self,
              resultfunc,
              downloadid,
              peerid,
              ip,
              port,
              rawserver,
              encrypted=False):
     self.resultfunc = resultfunc
     self.downloadid = downloadid
     self.peerid = peerid
     self.ip = ip
     self.port = port
     self.encrypted = encrypted
     self.closed = False
     self.buffer = ''
     self.read = self._read
     self.write = self._write
     try:
         self.connection = rawserver.start_connection((ip, port), self)
         if encrypted:
             self._dc = not (CRYPTO_OK and CHECK_PEER_ID_ENCRYPTED)
             self.encrypter = Crypto(True, disable_crypto=self._dc)
             self.write(self.encrypter.pubkey + self.encrypter.padding())
         else:
             self.encrypter = None
             self.write(
                 chr(len(protocol_name)) + protocol_name + (chr(0) * 8) +
                 downloadid)
     except socketerror:
         self.answer(False)
     except IOError:
         self.answer(False)
     self.next_len = 1 + len(protocol_name)
     self.next_func = self.read_header
Пример #2
0
 def __init__(self,
              Encoder,
              connection,
              id,
              ext_handshake=False,
              encrypted=None,
              options=None):
     self.Encoder = Encoder
     self.connection = connection
     self.connecter = Encoder.connecter
     self.id = id
     self.locally_initiated = (id != None)
     self.readable_id = make_readable(id)
     self.complete = False
     self.keepalive = lambda: None
     self.closed = False
     self.buffer = ''
     self.bufferlen = None
     self.log = None
     self.read = self._read
     self.write = self._write
     self.cryptmode = 0
     self.encrypter = None
     if self.locally_initiated:
         incompletecounter.increment()
         if encrypted:
             self.encrypted = True
             self.encrypter = Crypto(True)
             self.write(self.encrypter.pubkey + self.encrypter.padding())
         else:
             self.encrypted = False
             self.write(
                 chr(len(protocol_name)) + protocol_name + option_pattern +
                 self.Encoder.download_id)
         self.next_len, self.next_func = 1 + len(
             protocol_name), self.read_header
     elif ext_handshake:
         self.Encoder.connecter.external_connection_made += 1
         if encrypted:  # passed an already running encrypter
             self.encrypter = encrypted
             self.encrypted = True
             self._start_crypto()
             self.next_len, self.next_func = 14, self.read_crypto_block3c
         else:
             self.encrypted = False
             self.options = options
             self.write(self.Encoder.my_id)
             self.next_len, self.next_func = 20, self.read_peer_id
     else:
         self.encrypted = None  # don't know yet
         self.next_len, self.next_func = 1 + len(
             protocol_name), self.read_header
     self.Encoder.raw_server.add_task(self._auto_close, 30)
Пример #3
0
 def read_header(self, s):
     if self._read_header(s):
         if self.encrypted or self.Encoder.config['crypto_stealth']:
             return None
         return 8, self.read_options
     if self.locally_initiated and not self.encrypted:
         return None
     elif not self.Encoder.config['crypto_allowed']:
         return None
     if not self.encrypted:
         self.encrypted = True
         self.encrypter = Crypto(self.locally_initiated)
     self._write_buffer(s)
     return self.encrypter.keylength, self.read_crypto_header