diff --git a/src/flow.c b/src/flow.c index dc5219e101..9549792bb6 100644 --- a/src/flow.c +++ b/src/flow.c @@ -93,6 +93,7 @@ static ThreadVars *stream_pseudo_pkt_detect_TV = NULL; static ThreadVars *stream_pseudo_pkt_detect_prev_TV = NULL; static TmSlot *stream_pseudo_pkt_decode_tm_slot = NULL; +static ThreadVars *stream_pseudo_pkt_decode_TV = NULL; static ThreadVars *flow_manager_TV = NULL; @@ -374,8 +375,8 @@ static inline int FlowForceReassemblyForFlowV2(ThreadVars *tv, Flow *f) p1 = FFRPseudoPacketSetup(1, f); if (p1 == NULL) exit(0); - p1->tcph->th_seq = htons(ssn->server.next_seq); - p1->tcph->th_ack = htons(ssn->client.seg_list_tail->seq + + p1->tcph->th_seq = htonl(ssn->server.next_seq); + p1->tcph->th_ack = htonl(ssn->client.seg_list_tail->seq + ssn->client.seg_list_tail->payload_len); p1->tcph->th_offx2 = 0x50; p1->tcph->th_flags |= TH_ACK; @@ -390,8 +391,8 @@ static inline int FlowForceReassemblyForFlowV2(ThreadVars *tv, Flow *f) } if (server_ok == 1) { - p2->tcph->th_seq = htons(ssn->client.next_seq); - p2->tcph->th_ack = htons(ssn->server.seg_list_tail->seq + + p2->tcph->th_seq = htonl(ssn->client.next_seq); + p2->tcph->th_ack = htonl(ssn->server.seg_list_tail->seq + ssn->server.seg_list_tail->payload_len); p2->tcph->th_offx2 = 0x50; p2->tcph->th_flags |= TH_ACK; @@ -404,8 +405,8 @@ static inline int FlowForceReassemblyForFlowV2(ThreadVars *tv, Flow *f) if (p3 == NULL) { exit(0); } - p3->tcph->th_seq = htons(ssn->server.next_seq); - p3->tcph->th_ack = htons(ssn->client.seg_list_tail->seq + + p3->tcph->th_seq = htonl(ssn->server.next_seq); + p3->tcph->th_ack = htonl(ssn->client.seg_list_tail->seq + ssn->client.seg_list_tail->payload_len); p3->tcph->th_offx2 = 0x50; p3->tcph->th_flags |= TH_ACK; @@ -414,8 +415,8 @@ static inline int FlowForceReassemblyForFlowV2(ThreadVars *tv, Flow *f) p3->tcph->th_sum = TCPCalculateChecksum((uint16_t *)&(p3->ip4h->ip_src), (uint16_t *)p3->tcph, 20); } else { - p2->tcph->th_seq = htons(ssn->client.next_seq); - p2->tcph->th_ack = htons(ssn->server.last_ack); + p2->tcph->th_seq = htonl(ssn->client.next_seq); + p2->tcph->th_ack = htonl(ssn->server.last_ack); p2->tcph->th_offx2 = 0x50; p2->tcph->th_flags |= TH_ACK; p2->tcph->th_win = 10; @@ -428,8 +429,8 @@ static inline int FlowForceReassemblyForFlowV2(ThreadVars *tv, Flow *f) if (p1 == NULL) { exit(0); } - p1->tcph->th_seq = htons(ssn->client.next_seq); - p1->tcph->th_ack = htons(ssn->server.seg_list_tail->seq + + p1->tcph->th_seq = htonl(ssn->client.next_seq); + p1->tcph->th_ack = htonl(ssn->server.seg_list_tail->seq + ssn->server.seg_list_tail->payload_len); p1->tcph->th_offx2 = 0x50; p1->tcph->th_flags |= TH_ACK; @@ -442,8 +443,8 @@ static inline int FlowForceReassemblyForFlowV2(ThreadVars *tv, Flow *f) if (p2 == NULL) { exit(0); } - p2->tcph->th_seq = htons(ssn->server.next_seq); - p2->tcph->th_ack = htons(ssn->client.last_ack); + p2->tcph->th_seq = htonl(ssn->server.next_seq); + p2->tcph->th_ack = htonl(ssn->client.last_ack); p2->tcph->th_offx2 = 0x50; p2->tcph->th_flags |= TH_ACK; p2->tcph->th_win = 10;