Andrew Boyson / web

Dependents:   oldheating gps motorhome heating

Files at this revision

API Documentation at this revision

Comitter:
andrewboyson
Date:
Fri May 17 15:02:00 2019 +0000
Parent:
124:a2de6c22f85e
Child:
126:6b547c86da6e
Commit message:
Updated net library

Changed in this revision

web.c Show annotated file Show diff for this revision Revisions of this file
--- a/web.c	Tue May 14 19:19:52 2019 +0000
+++ b/web.c	Fri May 17 15:02:00 2019 +0000
@@ -56,7 +56,7 @@
     if (WebServerThisReply(todo)) return;
 }
 
-static void handleRequest(int size, char* pRequestStream, uint32_t positionInRequestStream, char* pStateData)
+static void handleRequest(char* pStateData, int size, char* pRequestStream, uint32_t positionInRequestStream)
 {
     struct state* pState = (struct state*)pStateData;
     
@@ -116,13 +116,24 @@
     if (!pState->postComplete) handlePost(pState->toDo, contentLength, contentStart, size, pRequestStream, positionInRequestStream, &pState->postComplete);
 }
 
-static bool sendReply(char* pStateData, bool clientFinished)
+static int pollSomethingToSend(char* pStateData, bool clientFinished) //returns 0 no; +1 yes; -1 finished; 
 {
     struct state* pState = (struct state*)pStateData;
     
-    if (!pState->toDo                       ) return clientFinished; //If the client has never sent anything and has finished then finish
-    if (!pState->postComplete               ) return false;
-    if (!MsTimerAbsolute(pState->delayUntil)) return false;
+    if (!pState->toDo)
+    {
+        if (clientFinished) return -1; //The client hasn't requested anything and never will so finish
+        else                return  0; //The client hasn't requested anything yet but still could
+    }
+    if (!pState->postComplete               ) return 0; //Wait for the request (usually a POST) to finish
+    if (!MsTimerAbsolute(pState->delayUntil)) return 0; //Wait a while (usually after a LOGIN attempt)
+    
+    return 1; //Yep, set up anything (just TSL at the moment) then call sendReply
+}
+
+static bool sendReply(char* pStateData)
+{
+    struct state* pState = (struct state*)pStateData;
     
     int todo = pState->toDo; //Make a copy so that we don't modify todo in the state
 
@@ -149,7 +160,8 @@
 int WebInit()
 {
     HttpRequestFunction = handleRequest;
-    HttpReplyPollFunction   = sendReply;
+    HttpPollFunction    = pollSomethingToSend;
+    HttpReplyFunction   = sendReply;
     
     WebLoginInit();