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)
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
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")
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)
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)
def _unpad(self, s): return s[:-bs.byte2int(s[len(s)-1:])]
def unpackMessage(self, message): version = bs.byte2int(message, 2) messageId = bs.byte2int(message, 3) payload = message[4:] return version, messageId, payload