- hdr.dst = c->dst;
- hdr.src = c->src;
- hdr.ack = c->rcv.irs + 1;
- hdr.seq = c->snd.iss;
- hdr.ctl = SYN | ACK;
- print_packet(c->utcp, "send", &hdr, sizeof hdr);
- utcp->send(utcp, &hdr, sizeof hdr);
+ struct {
+ struct hdr hdr;
+ uint8_t data[4];
+ } pkt;
+
+ pkt.hdr.src = c->src;
+ pkt.hdr.dst = c->dst;
+ pkt.hdr.ack = c->rcv.irs + 1;
+ pkt.hdr.seq = c->snd.iss;
+ pkt.hdr.wnd = c->rcv.wnd;
+ pkt.hdr.ctl = SYN | ACK;
+ if(init) {
+ pkt.hdr.aux = 0x0101;
+ pkt.data[0] = 1;
+ pkt.data[1] = 0;
+ pkt.data[2] = 0;
+ pkt.data[3] = c->flags & 0x7;
+ print_packet(c->utcp, "send", &pkt, sizeof hdr + 4);
+ utcp->send(utcp, &pkt, sizeof hdr + 4);
+ } else {
+ pkt.hdr.aux = 0;
+ print_packet(c->utcp, "send", &pkt, sizeof hdr);
+ utcp->send(utcp, &pkt, sizeof hdr);
+ }