printf("ReassembleInsertSegment: before list seg: seg->seq %u, list_seg->seq %u, list_seg->payload_len %u\n",seg->seq,list_seg->seq,list_seg->payload_len);
seg->next=list_seg;
if(prev_seg==NULL)stream->seg_list=seg;
elseprev_seg->next=seg;
return0;
/* seg partly overlaps with list_seg, starts before, ends on list seq */
printf("ReassembleInsertSegment: starts before list seg, ends on list seq: seg->seq %u, list_seg->seq %u, list_seg->payload_len %u\n",seg->seq,list_seg->seq,list_seg->payload_len);
/* seg partly overlaps with list_seg, starts before, ends inside */
printf("ReassembleInsertSegment: starts before list seg, ends inside list: seg->seq %u, list_seg->seq %u, list_seg->payload_len %u\n",seg->seq,list_seg->seq,list_seg->payload_len);
/* seg fully overlaps list_seg, starts before, at end point */
}elseif(SEQ_LT(seg->seq,list_seg->seq)&&
SEQ_EQ((seg->seq+seg->payload_len),
(list_seg->seq+list_seg->payload_len))){
printf("ReassembleInsertSegment: starts before list seg, ends at list end: seg->seq %u, list_seg->seq %u, list_seg->payload_len %u\n",seg->seq,list_seg->seq,list_seg->payload_len);
/* seg fully overlaps list_seg, starts before, ends after list endpoint */
}elseif(SEQ_LT(seg->seq,list_seg->seq)&&
SEQ_GT((seg->seq+seg->payload_len),
(list_seg->seq+list_seg->payload_len))){
printf("ReassembleInsertSegment: starts before list seg, ends before list end: seg->seq %u, list_seg->seq %u, list_seg->payload_len %u\n",seg->seq,list_seg->seq,list_seg->payload_len);
/* seg starts at seq, but end before list_seg end. */
}elseif(SEQ_EQ(seg->seq,list_seg->seq)&&
SEQ_LT((seg->seq+seg->payload_len),
(list_seg->seq+list_seg->payload_len))){
printf("ReassembleInsertSegment: starts at list seq, ends before list end: seg->seq %u, list_seg->seq %u, list_seg->payload_len %u\n",seg->seq,list_seg->seq,list_seg->payload_len);
/* seg starts at seq, ends at seq, retransmission. */
}elseif(SEQ_EQ(seg->seq,list_seg->seq)&&
SEQ_EQ((seg->seq+seg->payload_len),
(list_seg->seq+list_seg->payload_len))){
/* check csum, ack, other differences? */
printf("ReassembleInsertSegment: (retransmission) starts at list seq, ends at list end: seg->seq %u, list_seg->seq %u, list_seg->payload_len %u\n",seg->seq,list_seg->seq,list_seg->payload_len);
/* seg starts at seq, ends beyond seq. */
}elseif(SEQ_EQ(seg->seq,list_seg->seq)&&
SEQ_GT((seg->seq+seg->payload_len),
(list_seg->seq+list_seg->payload_len))){
printf("ReassembleInsertSegment: starts at list seq, ends beyond list end: seg->seq %u, list_seg->seq %u, list_seg->payload_len %u\n",seg->seq,list_seg->seq,list_seg->payload_len);
/* seg starts after seq, before end, ends before seq. */
}elseif(SEQ_GT(seg->seq,list_seg->seq)&&
SEQ_LT((seg->seq+seg->payload_len),
(list_seg->seq+list_seg->payload_len))){
printf("ReassembleInsertSegment: starts beyond list seq, ends before list end: seg->seq %u, list_seg->seq %u, list_seg->payload_len %u\n",seg->seq,list_seg->seq,list_seg->payload_len);
/* seg starts after seq, before end, ends at seq. */
}elseif(SEQ_GT(seg->seq,list_seg->seq)&&
SEQ_EQ((seg->seq+seg->payload_len),
(list_seg->seq+list_seg->payload_len))){
printf("ReassembleInsertSegment: starts beyond list seq, ends at list end: seg->seq %u, list_seg->seq %u, list_seg->payload_len %u\n",seg->seq,list_seg->seq,list_seg->payload_len);
/* seg starts after seq, before end, ends beyond seq. */
printf("ReassembleInsertSegment: starts beyond list seq, before list end, ends at list end: seg->seq %u, list_seg->seq %u, list_seg->payload_len %u\n",seg->seq,list_seg->seq,list_seg->payload_len);
printf("ReassembleInsertSegment: (normal insert) starts at list end, ends beyond list end: seg->seq %u, list_seg->seq %u, list_seg->payload_len %u\n",seg->seq,list_seg->seq,list_seg->payload_len);
list_seg->next=seg;
return0;
}else{
printf("ReassembleInsertSegment: (normal, inspect more of the list) starts at list seq, ends beyond list end: seg->seq %u, list_seg->seq %u, list_seg->payload_len %u\n",seg->seq,list_seg->seq,list_seg->payload_len);