docs: def add_packet(self, packet):
          """Add a packet to this flow"""
  
          # First packet?
          if not self.meta['flow_id']:
              self.meta['flow_id'] = flow_tuple(packet)
              self.meta['src'] = self.meta['flow_id'][0]
              self.meta['dst'] = self.meta['flow_id'][1]
              self.meta['src_domain'] = packet['packet']['src_domain']
              self.meta['dst_domain'] = packet['packet']['dst_domain']
              self.meta['sport'] = self.meta['flow_id'][2]
              self.meta['dport'] = self.meta['flow_id'][3]
              self.meta['protocol'] = self.meta['flow_id'][4]
              self.meta['direction'] = self._cts_or_stc(packet)
              self.meta['start'] = packet['timestamp']
              self.meta['end'] = packet['timestamp']
  
          # Add the packet
          self.meta['packet_list'].append(packet)
          if packet['timestamp'] < self.meta['start']:
              self.meta['start'] = packet['timestamp']
          if packet['timestamp'] > self.meta['end']:
              self.meta['end'] = packet['timestamp']
  
          # State of connection/flow
          if self.meta['protocol'] == 'TCP':
              flags = packet['transport']['flags']
              if 'syn' in flags:
                  self.meta['state'] = 'partial_syn'
                  self.meta['direction'] = 'CTS'
              elif 'fin' in flags:
                  # print('--- FIN RECEIVED %s ---'  % str(self.meta['flow_id))
                  self.meta['state'] = 'complete' if self.meta['state'] == 'partial_syn' else 'partial'
                  self.meta['timeout'] = datetime.now() + timedelta(seconds=1)
              elif 'syn_ack' in flags:
                  self.meta['state'] = 'partial_syn'
                  self.meta['direction'] = 'STC'
              elif 'fin_ack'in flags:
                  # print('--- FIN_ACK RECEIVED %s ---' % str(self.meta['flow_id))
                  self.meta['state'] = 'complete' if self.meta['state'] == 'partial_syn' else 'partial'
                  self.meta['timeout'] = datetime.now() + timedelta(seconds=1)
              elif 'rst' in flags:
                  # print('--- RESET RECEIVED %s ---' % str(self.meta['flow_id))
                  self.meta['state'] = 'partial'
                  self.meta['timeout'] = datetime.now() + timedelta(seconds=1)
  
          # Only collect UDP and TCP
          if self.meta['protocol'] not in ['UDP', 'TCP']:
              self.meta['timeout'] = datetime.now()