func (h *httpStatKeeper) handleIncomplete(tx httpTX) {
	key := Key{
		SrcIPHigh: uint64(tx.tup.saddr_h),
		SrcIPLow:  uint64(tx.tup.saddr_l),
		SrcPort:   uint16(tx.tup.sport),
	}

	otherHalf, ok := h.incomplete[key]
	if !ok {
		if len(h.incomplete) >= h.maxEntries {
			atomic.AddInt64(&h.telemetry.dropped, 1)
		} else {
			h.incomplete[key] = tx
		}

		return
	}

	request, response := tx, otherHalf
	if response.StatusClass() == 0 {
		request, response = response, request
	}

	// Merge response into request
	request.response_status_code = response.response_status_code
	request.response_last_seen = response.response_last_seen
	h.add(request)
	delete(h.incomplete, key)
}
// handleIncomplete is responsible for handling incomplete transactions
// (eg. httpTX objects that have either only the request or response information)
// this happens only in the context of localhost traffic with NAT and these disjoint
// parts of the transactions are joined here by src port
handleIncomplete is responsible for handling incomplete transactions

this happens only in the context of localhost traffic with NAT and these disjoint
parts of the transactions are joined here by src port
// handleIncomplete is responsible for handling incomplete transactions // ( eg . httpTX objects that have either only the request or response information ) // this happens only in the context of localhost traffic with NAT and these disjoint // parts of the transactions are joined here by src port
func (h *httpStatKeeper) handleIncomplete(tx httpTX) {
	key := Key{
		SrcIPHigh: uint64(tx.tup.saddr_h),
		SrcIPLow:  uint64(tx.tup.saddr_l),
		SrcPort:   uint16(tx.tup.sport),
	}
	otherHalf, ok := h.incomplete[key]
	if !ok {
		if len(h.incomplete) >= h.maxEntries {
			atomic.AddInt64(&h.telemetry.dropped, 1)
		} else {
			h.incomplete[key] = tx
		}
		return
	}
	request, response := tx, otherHalf
	if response.StatusClass() == 0 {
		request, response = response, request
	}
	request.response_status_code = response.response_status_code
	request.response_last_seen = response.response_last_seen
	h.add(request)
	delete(h.incomplete, key)
}
func ( h * httpStatKeeper ) handleIncomplete ( tx httpTX ) { key := Key { SrcIPHigh : uint64 ( tx . tup . saddr_h ) , SrcIPLow : uint64 ( tx . tup . saddr_l ) , SrcPort : uint16 ( tx . tup . sport ) , } otherHalf , ok := h . incomplete [ key ] if ! ok { if len ( h . incomplete ) >= h . maxEntries { atomic . AddInt64 ( & h . telemetry . dropped , 1 ) } else { h . incomplete [ key ] = tx } return } request , response := tx , otherHalf if response . StatusClass ( ) == 0 { request , response = response , request } request . response_status_code = response . response_status_code request . response_last_seen = response . response_last_seen h . add ( request ) delete ( h . incomplete , key ) }
handleIncomplete is responsible for handling incomplete transactions
handleIncomplete is responsible for handling incomplete transactions
// Merge response into request