- m_freem(m->m_next);
- m->m_next = 0;
- m->m_len = sizeof(struct tcpiphdr);
-#define xchg(a,b) j=a; a=b; b=j
- xchg(ti->ti_dst.s_addr, ti->ti_src.s_addr);
- xchg(ti->ti_dport, ti->ti_sport);
+ if (tp) {
+ win = sbspace(&tp->t_inpcb->inp_socket->so_rcv);
+ ro = &tp->t_inpcb->inp_route;
+ }
+ if (flags == 0) {
+ m = m_get(M_DONTWAIT, MT_HEADER);
+ if (m == 0)
+ return;
+ m->m_len = sizeof (struct tcpiphdr) + 1;
+ *mtod(m, struct tcpiphdr *) = *ti;
+ ti = mtod(m, struct tcpiphdr *);
+ flags = TH_ACK;
+ tlen = 1;
+ } else {
+ m = dtom(ti);
+ m_freem(m->m_next);
+ m->m_next = 0;
+ m->m_off = (int)ti - (int)m;
+ m->m_len = sizeof (struct tcpiphdr);
+#define xchg(a,b,type) { type t; t=a; a=b; b=t; }
+ xchg(ti->ti_dst.s_addr, ti->ti_src.s_addr, u_long);
+ xchg(ti->ti_dport, ti->ti_sport, u_short);