def _on_chunk_received(self, transport, peer, peer_guid, chunk): session_id = chunk.session_id blob_id = chunk.blob_id key = (peer, peer_guid, session_id) if key in self._blacklist: return if chunk.size == 0 or (chunk.version == 1 and chunk.blob_size == 0): return if key in self._data_blobs: blob = self._data_blobs[key] if blob.transferred == 0: blob.id = chunk.blob_id else: # create an in-memory blob blob = MessageBlob(chunk.application_id, "", chunk.blob_size, session_id, chunk.blob_id) self._data_blobs[key] = blob try: blob.append_chunk(chunk) except AssertionError, err: logger.warning( "Couldn't append chunk to blob, ignoring it. Reason: %s" % err) return
def _on_chunk_received(self, transport, peer, peer_guid, chunk): session_id = chunk.session_id blob_id = chunk.blob_id key = (peer, peer_guid, session_id) if key in self._blacklist: return if chunk.size == 0 or (chunk.version == 1 and chunk.blob_size == 0): return if key in self._data_blobs: blob = self._data_blobs[key] if blob.transferred == 0: blob.id = chunk.blob_id else: # create an in-memory blob blob = MessageBlob(chunk.application_id, "", chunk.blob_size, session_id, chunk.blob_id) self._data_blobs[key] = blob try: blob.append_chunk(chunk) except AssertionError, err: logger.warning("Couldn't append chunk to blob, ignoring it. Reason: %s" % err ) return
def _on_chunk_received(self, transport, chunk): self.emit("chunk-transferred", chunk) session_id = chunk.header.session_id blob_id = chunk.header.blob_id if session_id == 0: # signaling blob if blob_id in self._signaling_blobs: blob = self._signaling_blobs[blob_id] else: # create an in-memory blob blob = MessageBlob(chunk.application_id, "", chunk.header.blob_size, session_id, chunk.header.blob_id) self._signaling_blobs[blob_id] = blob else: # data blob if session_id in self._data_blobs: blob = self._data_blobs[session_id] if blob.transferred == 0: blob.id = chunk.header.blob_id else: # create an in-memory blob blob = MessageBlob(chunk.application_id, "", chunk.header.blob_size, session_id, chunk.header.blob_id) self._data_blobs[session_id] = blob blob.append_chunk(chunk) if blob.is_complete(): blob.data.seek(0, 0) self.emit("blob-received", blob) if session_id == 0: del self._signaling_blobs[blob_id] else: del self._data_blobs[session_id]
def register_data_buffer(self, peer, peer_guid, session_id, buffer, size): if (peer, peer_guid, session_id) in self._data_blobs: logger.warning("registering already registered blob "\ "with session_id=" + str(session_id)) return blob = MessageBlob(0, buffer, size, session_id) self._data_blobs[(peer, peer_guid, session_id)] = blob
def send_data(self, peer, peer_guid, application_id, session_id, data): blob = MessageBlob(application_id, data, None, session_id, None) transport = self._get_transport(peer, peer_guid, blob) transport.send(peer, peer_guid, blob)
def _on_notification_received(self, protocol, peer, peer_guid, type, data): if type is not UserNotificationTypes.P2P_DATA: return blob = MessageBlob(0, data, None, 0) self.emit("blob-received", peer, peer_guid, blob)