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
diff -r d48c899e482f -r e0e556c8bd46 udp/tftp.cpp
--- 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);