aboutsummaryrefslogtreecommitdiff
path: root/Projects
diff options
context:
space:
mode:
authorDean Camera <[email protected]>2010-02-03 14:09:56 +0000
committerDean Camera <[email protected]>2010-02-03 14:09:56 +0000
commitf4f44f9fc11d0ee9e0dbaf3323d095af32e8b0ef (patch)
tree6eb9d93748b655d5b3e69249b8248ce29cc689e4 /Projects
parent7d3ed400704f76e4ea3bae759d1c2298b1098585 (diff)
downloadqmk_firmware-f4f44f9fc11d0ee9e0dbaf3323d095af32e8b0ef.tar.gz
qmk_firmware-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.
Diffstat (limited to 'Projects')
-rw-r--r--Projects/Webserver/Lib/uIPManagement.c15
-rw-r--r--Projects/Webserver/Lib/uip/uip.c2
2 files changed, 17 insertions, 0 deletions
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;