예제 #1
0
 def _handleSearchRequest0(self, connection, payload):
     if payload[:32] != bs.int2bytes(0, 32):
         hashfilename = binascii.hexlify(payload[:32]).decode()
     else:
         hashfilename = None
     n = bs.byte2int(payload, 33)
     if n:
         username = payload[33:33+n].decode()
         self.searchResults0(connection, hashfilename, username)
예제 #2
0
 def unpackPeers(self, payload):
     """
     Unpacks peers who are received from an other peer.
     """
     n = bs.byte2int(payload, 0)
     peers = [None]*n
     for i in range(0, n):
         ip = socket.inet_ntoa(payload[(6*i+1):(6*i+5)])
         port = struct.unpack("!H", payload[(6*i+5):(6*i+7)])[0]
         peers[i] = (ip, port)
     return peers
예제 #3
0
 def _handleUploadReport0(self, connection, payload):
     """
     Handles the received upload report, if the report contains a error
     a IOError is thrown.
     """
     successful = False
     try:
         successful = bs.byte2int(payload, 0)
     except IndexError:
         pass
     if not successful:
         raise IOError("Sending fragment failed")
예제 #4
0
 def _handlerequestFragment0(self, connection, payload):
     hashfile = binascii.hexlify(payload[:32]).decode()
     n = bs.byte2int(payload, 33)
     if n:
         name = payload[33:33+n].decode()
         self.logger.info("Handle request fragment")
         self.logger.debug("request: {} | {}".format(hashfile, name))
         try:
             fragment = self.fileManager.getFragment(name, hashfile)
             self.sendFragment0(connection, fragment)
         except FileNotFoundError:
             self.sendFragment0(connection)
     else:
         self.sendFragment0(connection)
예제 #5
0
 def _handlejoinNet0(self, connection, payload):
     """
     Handles a version 0 join request and replies if the peer list is
     demanded.
     """
     port = struct.unpack("!H", payload[:2])[0]
     try:
         reply = bs.byte2int(payload, 2)
     except IndexError:
         reply = False
     if reply:
         self.sharePeers0(connection)
     address = (connection.getpeername()[0], port)
     self.addPeer(address)
예제 #6
0
파일: readyAES.py 프로젝트: Liblor/Cirrolus
 def _unpad(self, s):
     return s[:-bs.byte2int(s[len(s)-1:])]
예제 #7
0
 def unpackMessage(self, message):
     version = bs.byte2int(message, 2)
     messageId = bs.byte2int(message, 3)
     payload = message[4:]
     return version, messageId, payload