Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
    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]
Ejemplo n.º 4
0
 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
Ejemplo n.º 5
0
    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]
Ejemplo n.º 6
0
 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)
Ejemplo n.º 7
0
 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)