def handle_content(self, faceid: int, packet: Content, request_entry: RequestTableEntry, cl_content: bool, to_lower: multiprocessing.Queue, to_higher: multiprocessing.Queue): """Handle incoming content""" self._request_table.remove(request_entry) if request_entry.chunked is False: # Not chunked content if not packet.get_bytes().startswith(b'mdo:'): to_higher.put([faceid, packet]) return else: # Received metadata data --> chunked content request_entry.chunked = True if packet.get_bytes().startswith( b'mdo:'): # Request all frames from metadata self.handle_received_meta_data(faceid, packet, request_entry, to_lower, cl_content) else: self.handle_received_chunk_data(faceid, packet, request_entry, to_higher)
def save_if_longest(self, packet: Content, ca_entry: CaEntry): """ Check if the received ca content is longer than the existing one and if so, replace it. In the case where both neighbours have chunks available, we want to send the interests only to the one which has more. """ if packet.get_bytes().startswith( b'mdo:'): # Content is metadata, read size from metadata _, _, content_size = self.chunkifyer.parse_meta_data( packet.content) else: # Content is string, size equals length of the string content_size = (len(packet.content)) content_size = int(content_size) if content_size > ca_entry.size: ca_entry.ca = packet ca_entry.size = content_size