A stack which works with or without an Mbed os library. Provides IPv4 or IPv6 with a full 1500 byte buffer.

Dependents:   oldheating gps motorhome heating

Revision:
97:d91f7db00235
Parent:
96:43eb7a110f1a
Child:
98:b977424ec7f7
--- a/tcp/tcprecv.c	Sat Dec 29 19:03:50 2018 +0000
+++ b/tcp/tcprecv.c	Wed Jan 02 17:48:38 2019 +0000
@@ -14,6 +14,7 @@
 #include    "http.h"
 #include     "led.h"
 #include "mstimer.h"
+#include   "fault.h"
 
 static void log(void (*traceback)(void), char* fmt, ...)
 {
@@ -103,6 +104,8 @@
 
 int TcpHandleReceivedPacket(void (*traceback)(void), int sizeRx, void* pPacketRx, int* pSizeTx, void* pPacketTx, int ipType, int remArIndex, int locIpScope)
 {
+    FaultPoint = FAULT_POINT_TcpHandleReceivedPacket;
+    
     int action = DO_NOTHING;
     bool traceRequested = false;
     
@@ -111,6 +114,7 @@
     if (remArIndex < 0)
     {
         log(traceback, "invalid remote AR index %d -> ignored packet", remArIndex);
+        FaultPoint = 0;
         return DO_NOTHING;
     }
     
@@ -138,6 +142,7 @@
         default: //Send reset if unknown port
             log(traceback, "unhandled local port %hu -> sent reset", TcpHdrDstPort);
             action = sendResetFromPacket(pSizeTx, pPacketTx, ipType, remArIndex, locIpScope, seqLengthRcvd);
+            FaultPoint = 0;
             return action;
     }
     
@@ -148,6 +153,7 @@
     {
         log(traceback, "no more tcbs available -> sent reset");
         action = sendResetFromPacket(pSizeTx, pPacketTx, ipType, remArIndex, locIpScope, seqLengthRcvd);
+        FaultPoint = 0;
         return action;
     }
     pTcb->timeLastRcvd     = MsTimerCount;
@@ -166,6 +172,7 @@
             log(traceback, "received reset -> reaped TCB");
             pTcb->state = TCB_EMPTY;
         }
+        FaultPoint = 0;
         return DO_NOTHING;        //Don't reply
     }
     
@@ -177,6 +184,7 @@
             log(traceback, "received a SYN on an open connection -> sent reset");
             pTcb->state = TCB_EMPTY;
             action = TcpSendReset(pSizeTx, pPacketTx, pTcb);
+            FaultPoint = 0;
             return action;
         }
         else
@@ -192,6 +200,7 @@
         log(traceback, "non SYN packet received on a closed connection -> sent reset");
         pTcb->state = TCB_EMPTY;
         action = sendResetFromPacket(pSizeTx, pPacketTx, ipType, remArIndex, locIpScope, seqLengthRcvd);
+        FaultPoint = 0;
         return action;
     }
     
@@ -221,6 +230,7 @@
             log(traceback, "seq rcvd is %d and last seq ackd was %d -> resent last ACK", seqRcvdFromRem, pTcb->bytesAckdToRem);
         }
         action = TcpResendLastAck(pSizeTx, pPacketTx, pTcb);
+        FaultPoint = 0;
         return action;
     }
     //Ignore data before established
@@ -229,6 +239,7 @@
         log(traceback, "data received before connection established -> sent reset");
         pTcb->state = TCB_EMPTY;
         action = TcpSendReset(pSizeTx, pPacketTx, pTcb);
+        FaultPoint = 0;
         return action;
     }
     
@@ -270,5 +281,6 @@
     
     action = TcpSend(pSizeTx, pPacketTx, pTcb);
 
+    FaultPoint = 0;
     return action;
 }