📄 tfcoalesce.c,v
字号:
head 1.2;access;symbols;locks dls:1.2; strict;comment @ * @;1.2date 97.09.21.19.29.52; author dls; state Dist;branches;next 1.1;1.1date 94.01.14.03.51.20; author dls; state v2e1;branches;next ;desc@@1.2log@pre-3e code@text@/* tfcoalesce.c - tfcoalesce */#include <conf.h>#include <kernel.h>#include <network.h>/*------------------------------------------------------------------------ * tfcoalesce - join TCP fragments *------------------------------------------------------------------------ */int tfcoalesce(ptcb, datalen, ptcp)struct tcb *ptcb;int datalen;struct tcp *ptcp;{ struct tcpfrag *tf = 0; int new; ptcb->tcb_rnext += datalen; ptcb->tcb_rbcount += datalen; if (ptcb->tcb_rnext == ptcb->tcb_finseq) goto alldone; if ((ptcb->tcb_rnext - ptcb->tcb_pushseq) >= 0) { ptcp->tcp_code |= TCPF_PSH; ptcb->tcb_pushseq = 0; } if (ptcb->tcb_rsegq < 0) /* see if this closed a hole */ return OK; tf = (struct tcpfrag *)deq(ptcb->tcb_rsegq); if (tf == 0) return OK; while ((tf->tf_seq - ptcb->tcb_rnext) <= 0) { new = tf->tf_len - (ptcb->tcb_rnext - tf->tf_seq); if (new > 0) { ptcb->tcb_rnext += new; ptcb->tcb_rbcount += new; } if (ptcb->tcb_rnext == ptcb->tcb_finseq) goto alldone; if ((ptcb->tcb_rnext - ptcb->tcb_pushseq) >= 0) { ptcp->tcp_code |= TCPF_PSH; ptcb->tcb_pushseq = 0; } freemem(tf, sizeof(struct tcpfrag)); tf = (struct tcpfrag *)deq(ptcb->tcb_rsegq); if (tf == 0) { freeq(ptcb->tcb_rsegq); ptcb->tcb_rsegq = EMPTY; return OK; } } enq(ptcb->tcb_rsegq, tf, -tf->tf_seq); /* got one too many */ return OK;alldone: if (tf) freemem(tf, sizeof(struct tcpfrag)); while (tf = (struct tcpfrag *)deq(ptcb->tcb_rsegq)) freemem(tf, sizeof(struct tcpfrag)); freeq(ptcb->tcb_rsegq); ptcb->tcb_rsegq = EMPTY; ptcp->tcp_code |= TCPF_FIN; return OK;}@1.1log@Initial revision@text@d16 1a16 1 struct tcpfrag *tf;d30 2d55 3a57 1 doa58 1 while (tf = (struct tcpfrag *)deq(ptcb->tcb_rsegq));@
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -