Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: oldheating gps motorhome heating
Diff: udp/tftp.cpp
- 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);