Andrew Boyson / net

Dependents:   oldheating gps motorhome heating

Revision:
59:e0e556c8bd46
Parent:
57:e0fb648acf48
--- a/udp/tftp.cpp	Thu Dec 07 20:44:32 2017 +0000
+++ b/udp/tftp.cpp	Thu Dec 14 20:55:40 2017 +0000
@@ -74,12 +74,10 @@
 
 int      (*TftpGetNextByteFunction)();
 
-static char* pHeader;
 static int   size;
 
-static void logHeader()
+static void logHeader(char* p)
 {
-    char* p = pHeader;
     if (NetTraceVerbose)
     {
         Log ("TFTP header\r\n");
@@ -94,13 +92,13 @@
         Log ("\r\n");
     }
 }
-static int sendBlock(uint16_t block)
+static int sendBlock(uint16_t block, char* pHeader)
 {
     /*2 bytes    2 bytes     n bytes
      ----------------------------------
     | Opcode |   Block #  |   Data     |
      ---------------------------------- */
-    char* p = pHeader;
+     char* p = pHeader;
     *p++ = 0;
     *p++ = TFTP_DATA;
     *p++ = block >> 8;
@@ -118,13 +116,13 @@
     size = p - pHeader;
     return UNICAST_TFTP;
 }
-static void handleError()
+static void handleError(char* p)
 {
      /*2 bytes   2 bytes      string    1 byte
      -----------------------------------------
     |  ERROR |  ErrorCode |   ErrMsg   |   0  |
      ----------------------------------------- */
-    char* p = pHeader + 2; //Skip the op code which we already know
+    p += 2; //Skip the op code which we already know
     if (NetTraceNewLine) Log("\r\n");
     LogTime("TFTP error - ");
     logError(p); p += 2;
@@ -132,27 +130,27 @@
     Log("\r\n");
     TftpWriteStatus = TFTP_WRITE_STATUS_NONE;
 }
-static int handleAck()
+static int handleAck(char* pHeaderRx, char* pHeaderTx)
 {
-    /*2 bytes   2 bytes
-     ---------------------
-    |   ACK  |   Block #  |
-     --------------------- */
-     
-    char* p = pHeader + 2; //Skip the op code which we already know
+    /* 2 bytes    2 bytes
+     -----------------------
+    |   ACK    |   Block #  |
+     ----------------------- */
+    char* p = pHeaderRx;
+    p += 2; //Skip the op code which we already know
     uint16_t block = *p++;
     block <<= 8;
     block += *p++;
     
-    return sendBlock(block + 1);
+    return sendBlock(block + 1, pHeaderTx);
 }
-static int sendRequest()
+static int sendRequest(char* pHeader)
 {
     /*2 bytes    string   1 byte     string   1 byte
      -----------------------------------------------
     |   WRQ  |  Filename  |   0  |    Mode    |  0  |
      ----------------------------------------------- */
-    char* p = pHeader;
+     char* p = pHeader;
     *p++ = 0;
     *p++ = TFTP_WRQ;
     char* pName = TftpFileName;
@@ -165,13 +163,14 @@
     return UNICAST_TFTP;
 }
 static void (*pTraceBack)(void);
-int TftpHandlePacketReceived(void (*traceback)(void), int* pSize, void * pPacket)
+int TftpHandlePacketReceived(void (*traceback)(void), int sizeRx, void * pPacketRx, int* pSizeTx, void* pPacketTx)
 {
     pTraceBack = traceback;
-    pHeader = (char*)pPacket;
-    size = *pSize;
+    char* pHeaderRx = (char*)pPacketRx;
+    char* pHeaderTx = (char*)pPacketTx;
+    size = sizeRx;
     
-    char* p = pHeader;
+    char* p = pHeaderRx;
     
     if (*p)
     {
@@ -183,7 +182,7 @@
         if (NetTraceNewLine) Log("\r\n");
         LogTimeF("TFTP received packet\r\n");
         if (NetTraceStack) pTraceBack();
-        logHeader();
+        logHeader(pHeaderRx);
     }
     p++;
     int dest = DO_NOTHING;
@@ -191,19 +190,19 @@
     {
         case TFTP_ACK:
             if (TftpWriteStatus == TFTP_WRITE_STATUS_NONE) return DO_NOTHING;
-            dest = handleAck();
+            dest = handleAck(pHeaderRx, pHeaderTx);
             break;
         case TFTP_ERROR:
-            handleError(); 
+            handleError(pHeaderRx); 
             return DO_NOTHING;
         default:
             LogTimeF("\r\nTFTP packet unknown mode %d\r\n", *p);
             return DO_NOTHING;
     }
 
-    if (TftpTrace) logHeader();
+    if (TftpTrace) logHeader(pHeaderTx);
 
-    *pSize = size;
+    *pSizeTx = size;
     return ActionMakeFromDestAndTrace(dest, TftpTrace && NetTraceStack);
 }
 static bool resolve4(char* server, uint32_t* pIp)
@@ -252,7 +251,7 @@
 {
     if (TftpWriteStatus != TFTP_WRITE_STATUS_REQUEST) return DO_NOTHING; //Wait until a request to send a file
     
-    pHeader = (char*)pPacket;
+    char* pHeader = (char*)pPacket;
     size = *pSize;
 
     if (!TftpServerName[0])
@@ -284,12 +283,12 @@
 
     //Have IP and MAC so send request
     TftpWriteStatus = TFTP_WRITE_STATUS_IN_PROGRESS;
-    int dest = sendRequest();
+    int dest = sendRequest(pHeader);
     if (TftpTrace)
     {
         if (NetTraceNewLine) Log("\r\n");
         LogTimeF("TFTP Sending request\r\n");
-        logHeader();
+        logHeader(pHeader);
     }
     *pSize = size;
     return ActionMakeFromDestAndTrace(dest, TftpTrace && NetTraceStack);