diff options
author | Dean Camera <dean@fourwalledcubicle.com> | 2010-02-03 14:09:56 +0000 |
---|---|---|
committer | Dean Camera <dean@fourwalledcubicle.com> | 2010-02-03 14:09:56 +0000 |
commit | f4f44f9fc11d0ee9e0dbaf3323d095af32e8b0ef (patch) | |
tree | 6eb9d93748b655d5b3e69249b8248ce29cc689e4 | |
parent | 7d3ed400704f76e4ea3bae759d1c2298b1098585 (diff) | |
download | lufa-f4f44f9fc11d0ee9e0dbaf3323d095af32e8b0ef.tar.gz lufa-f4f44f9fc11d0ee9e0dbaf3323d095af32e8b0ef.tar.bz2 lufa-f4f44f9fc11d0ee9e0dbaf3323d095af32e8b0ef.zip |
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.
-rw-r--r-- | Projects/Webserver/Lib/uIPManagement.c | 15 | ||||
-rw-r--r-- | Projects/Webserver/Lib/uip/uip.c | 2 |
2 files changed, 17 insertions, 0 deletions
diff --git a/Projects/Webserver/Lib/uIPManagement.c b/Projects/Webserver/Lib/uIPManagement.c index 37080dfd7..90629b893 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 1abefd5dc..22a72043f 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; |