Andrew Boyson / net

Dependents:   oldheating gps motorhome heating

Revision:
59:e0e556c8bd46
Parent:
52:fbc5a46b5e16
--- a/ip4/icmp/icmp4.cpp	Thu Dec 07 20:44:32 2017 +0000
+++ b/ip4/icmp/icmp4.cpp	Thu Dec 14 20:55:40 2017 +0000
@@ -6,8 +6,6 @@
 #include   "dhcp.h"
 #include  "echo4.h"
 
-#define HEADER_SIZE 4
-
 #define ECHO_REPLY   0
 #define UNREACHABLE  3
 #define REDIRECT     5
@@ -23,8 +21,6 @@
 static uint8_t  code;
 static uint16_t checksum;
 static uint16_t calculated;
-static int      dataLength;
-//static void*    pData;
 
 static void logType(uint16_t type)
 {
@@ -44,7 +40,6 @@
         LogF("  Code           %u\r\n",    code);
         LogF("  Checksum (hex) %04hX\r\n", checksum);
         LogF("  Calculated     %04hX\r\n", calculated);
-        LogF("  Data length    %d\r\n",    dataLength);
     }
     else
     {
@@ -60,8 +55,6 @@
           code =             pHeader->code;
       checksum = NetToHost16(pHeader->checksum);
     calculated = NetCheckSum(size, pPacket);
-//       pData = (char*)pPacket + HEADER_SIZE;
-    dataLength =           size - HEADER_SIZE;
 }
 static void writeHeader(void* pPacket, int size)
 {    
@@ -78,17 +71,22 @@
     pTraceBack();
     logHeader();
 }
-int Icmp4HandleReceivedPacket(void (*traceback)(void), uint32_t* pSrcIp, uint32_t* pDstIp, int* pSize, void * pPacket)
+int Icmp4HandleReceivedPacket(void (*traceback)(void), void* pPacketRx, int sizeRx, void* pPacketTx, int* pSizeTx, uint32_t* pSrcIp, uint32_t* pDstIp)
 {
     pTraceBack = traceback;
 
-    readHeader(pPacket, *pSize);
+    readHeader(pPacketRx, sizeRx);
+    
+    int dataLengthRx =           sizeRx - sizeof(header);
+    int dataLengthTx =         *pSizeTx - sizeof(header);
+    char* pPayloadRx = (char*)pPacketRx + sizeof(header);
+    char* pPayloadTx = (char*)pPacketTx + sizeof(header);
     
     int action = DO_NOTHING;
     switch (type)
     {
         case ECHO_REQUEST:
-            action = Echo4HandleRequest(trace, &type, &code);
+            action = Echo4HandleRequest(trace, &type, &code, pPayloadRx, dataLengthRx, pPayloadTx, &dataLengthTx);
             break;
         case UNREACHABLE:
             return DO_NOTHING;
@@ -103,9 +101,9 @@
     *pDstIp = *pSrcIp;
     *pSrcIp = DhcpLocalIp;
 
-    *pSize = HEADER_SIZE + dataLength;
+    *pSizeTx = sizeof(header) + dataLengthTx;
     
-    writeHeader(pPacket, *pSize);
+    writeHeader(pPacketTx, *pSizeTx);
     
     if (ActionGetTracePart(action)) logHeader();