]> git.meshlink.io Git - utcp/blobdiff - utcp.c
Remove debug message.
[utcp] / utcp.c
diff --git a/utcp.c b/utcp.c
index c650ab700ad150fa876b0944a6872ea39298f352..bfd9921f56a23e24c25078e7b73d53768456ca88 100644 (file)
--- a/utcp.c
+++ b/utcp.c
@@ -418,6 +418,8 @@ struct utcp_connection *utcp_connect_ex(struct utcp *utcp, uint16_t dst, utcp_re
        gettimeofday(&c->conn_timeout, NULL);
        c->conn_timeout.tv_sec += utcp->timeout;
 
+       start_retransmit_timer(c);
+
        return c;
 }
 
@@ -589,8 +591,13 @@ static void retransmit(struct utcp_connection *c) {
                        pkt->hdr.seq = c->snd.iss;
                        pkt->hdr.ack = 0;
                        pkt->hdr.ctl = SYN;
-                       print_packet(c->utcp, "rtrx", pkt, sizeof pkt->hdr);
-                       utcp->send(utcp, pkt, sizeof pkt->hdr);
+                       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, "rtrx", pkt, sizeof pkt->hdr + 4);
+                       utcp->send(utcp, pkt, sizeof pkt->hdr + 4);
                        break;
 
                case SYN_RECEIVED:
@@ -1427,8 +1434,15 @@ struct timeval utcp_timeout(struct utcp *utcp) {
                        retransmit(c);
                }
 
-               if(c->poll && buffer_free(&c->sndbuf) && (c->state == ESTABLISHED || c->state == CLOSE_WAIT))
-                       c->poll(c, buffer_free(&c->sndbuf));
+               if(c->poll) {
+                       if((c->state == ESTABLISHED || c->state == CLOSE_WAIT)) {
+                               uint32_t len =  buffer_free(&c->sndbuf);
+                               if(len)
+                                       c->poll(c, len);
+                       } else if(c->state == CLOSED) {
+                               c->poll(c, 0);
+                       }
+               }
 
                if(timerisset(&c->conn_timeout) && timercmp(&c->conn_timeout, &next, <))
                        next = c->conn_timeout;