Andrew Boyson / net

Dependents:   oldheating gps motorhome heating

Revision:
147:a6093b52e654
Parent:
146:0fc66d610fd6
Child:
154:ba9879b19d9f
--- a/tcp/tcpsend.c	Wed May 15 15:33:15 2019 +0000
+++ b/tcp/tcpsend.c	Fri May 17 15:01:32 2019 +0000
@@ -43,15 +43,29 @@
         default:  return false;
     }    
 }
-static bool addApplicationData(int *pDataLength, void* pPacket, uint16_t port, uint32_t start, int mss, char* pAppState, bool clientFinished)
-{    
+
+static bool addAppData(int *pDataLength, void* pPacket, uint16_t port, uint32_t start, int mss, char* pAppState, char* pTlsState, bool clientFinished)
+{
+    *pDataLength = 0;
+    int todo = 0;
+    switch (port)
+    {
+        case  80: todo = HttpShimPoll(clientFinished, pAppState, pTlsState, false); break;
+        case 443: todo = HttpShimPoll(clientFinished, pAppState, pTlsState, true ); break;
+    }
+    switch (todo)
+    {
+        case -1: return true;
+        case  0: return false;
+        case  1: break;
+    }
     char* pData = (char*)pPacket + TcpHdrSizeGet();
     TcpBufStart(start, mss, pData);
     bool finished = false;
     switch (port)
     {
-        case  80: finished = HttpShimReplyPoll(pAppState, clientFinished, false); break;
-        case 443: finished = HttpShimReplyPoll(pAppState, clientFinished, true ); break;
+        case  80: finished = HttpShimReply(pAppState, pTlsState); break;
+        case 443: finished = HttpShimReply(pAppState, pTlsState); break;
     }
     *pDataLength = TcpBufLength();
     return finished;
@@ -96,7 +110,7 @@
             {
                 if (pTcb->bytesSentToRem - pTcb->bytesAckdByRem < pTcb->window)
                 {
-                    bool finished = addApplicationData(&dataLength, pPacket, pTcb->locPort, pTcb->bytesSentToRem - 1, pTcb->remMss, pTcb->appData, pTcb->rcvdFin);
+                    bool finished = addAppData(&dataLength, pPacket, pTcb->locPort, pTcb->bytesSentToRem - 1, pTcb->remMss, pTcb->appData, pTcb->tlsData, pTcb->rcvdFin);
                     if (finished)
                     {
                         TcpHdrFIN     = true;
@@ -145,7 +159,7 @@
         case TCB_ESTABLISHED:
         case TCB_CLOSE_FIN_WAIT:
             {
-                bool finished = addApplicationData(&dataLength, pPacket, pTcb->locPort, seqNum - 1, pTcb->remMss, pTcb->appData, pTcb->rcvdFin);
+                bool finished = addAppData(&dataLength, pPacket, pTcb->locPort, seqNum - 1, pTcb->remMss, pTcb->appData, pTcb->tlsData, pTcb->rcvdFin);
                 if (finished)
                 {
                     TcpHdrFIN     = true;