+ def verify_enough_packet_data_in_pcap(self):
+ """
+ Check if enough data is available in file handled by internal pcap
+ reader so that a whole packet can be read.
+
+ :returns: True if enough data present, else False
+ """
+ orig_pos = self._pcap_reader.f.tell() # save file position
+ enough_data = False
+ # read packet header from pcap
+ packet_header_size = 16
+ caplen = None
+ end_pos = None
+ hdr = self._pcap_reader.f.read(packet_header_size)
+ if len(hdr) == packet_header_size:
+ # parse the capture length - caplen
+ sec, usec, caplen, wirelen = struct.unpack(
+ self._pcap_reader.endian + "IIII", hdr)
+ self._pcap_reader.f.seek(0, 2) # seek to end of file
+ end_pos = self._pcap_reader.f.tell() # get position at end
+ if end_pos >= orig_pos + len(hdr) + caplen:
+ enough_data = True # yay, we have enough data
+ self._pcap_reader.f.seek(orig_pos, 0) # restore original position
+ return enough_data
+