code: async def _go_through_packets_from_fd(self, fd, packet_callback, packet_count=None):
          
          packets_captured = 0
          self._log.debug('Starting to go through packets')
  
          psml_struct, data = await self._get_psml_struct(fd)
  
          while True:
              try:
                  packet, data = await self._get_packet_from_stream(fd, data, got_first_packet=packets_captured > 0,
                                                                    psml_structure=psml_struct)
              except EOFError:
                  self._log.debug('EOF reached')
                  break
  
              if packet:
                  packets_captured += 1
                  try:
                      packet_callback(packet)
                  except StopCapture:
                      self._log.debug('User-initiated capture stop in callback')
                      break
  
              if packet_count and packets_captured >= packet_count:
                  break
docs: A coroutine which goes through a stream and calls a given callback for each XML packet seen in it.