From f4f44f9fc11d0ee9e0dbaf3323d095af32e8b0ef Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Wed, 3 Feb 2010 14:09:56 +0000 Subject: [PATCH] Re-add Webserver uIP application polling, apply patch to uIP by Andrew Ruder to fix corrupt TCP streams when multiple applications are used and the applications are polled for more data. --- Projects/Webserver/Lib/uIPManagement.c | 15 +++++++++++++++ Projects/Webserver/Lib/uip/uip.c | 2 ++ 2 files changed, 17 insertions(+) diff --git a/Projects/Webserver/Lib/uIPManagement.c b/Projects/Webserver/Lib/uIPManagement.c index 37080dfd73..90629b893b 100644 --- a/Projects/Webserver/Lib/uIPManagement.c +++ b/Projects/Webserver/Lib/uIPManagement.c @@ -175,6 +175,21 @@ static void uIPManagement_ProcessIncommingPacket(void) /** Manages the currently open network connections, including TCP and (if enabled) UDP. */ static void uIPManagement_ManageConnections(void) { + /* Poll TCP connections for more data to send back to the host */ + for (uint8_t i = 0; i < UIP_CONNS; i++) + { + uip_poll_conn(&uip_conns[i]); + + /* If a response was generated, send it */ + if (uip_len > 0) + { + /* Add destination MAC to outgoing packet */ + uip_arp_out(); + + RNDIS_Host_SendPacket(&Ethernet_RNDIS_Interface, uip_buf, uip_len); + } + } + /* Manage open connections for timeouts */ if (timer_expired(&ConnectionTimer)) { diff --git a/Projects/Webserver/Lib/uip/uip.c b/Projects/Webserver/Lib/uip/uip.c index 1abefd5dcc..22a72043f1 100644 --- a/Projects/Webserver/Lib/uip/uip.c +++ b/Projects/Webserver/Lib/uip/uip.c @@ -689,6 +689,7 @@ uip_process(u8_t flag) if(flag == UIP_POLL_REQUEST) { if((uip_connr->tcpstateflags & UIP_TS_MASK) == UIP_ESTABLISHED && !uip_outstanding(uip_connr)) { + uip_len = uip_slen = 0; uip_flags = UIP_POLL; UIP_APPCALL(); goto appsend; @@ -794,6 +795,7 @@ uip_process(u8_t flag) } else if((uip_connr->tcpstateflags & UIP_TS_MASK) == UIP_ESTABLISHED) { /* If there was no need for a retransmission, we poll the application for new data. */ + uip_len = uip_slen = 0; uip_flags = UIP_POLL; UIP_APPCALL(); goto appsend;