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: tcp/tcpsend.c
- Revision:
- 144:6bd5c54efc7d
- Parent:
- 133:a37eb35a03f1
- Child:
- 145:206bf0d073c7
--- a/tcp/tcpsend.c Thu May 09 07:47:12 2019 +0000 +++ b/tcp/tcpsend.c Sun May 12 17:17:49 2019 +0000 @@ -6,6 +6,7 @@ #include "net.h" #include "action.h" #include "tcp.h" +#include "tcpbuf.h" #include "tcphdr.h" #include "tcb.h" #include "ip4.h" @@ -45,23 +46,15 @@ return false; } } -static int addApplicationData(void* pPacket, uint16_t port, uint32_t start, int mss, int todo) -{ - int dataLength = 0; +static int addApplicationData(int *pDataLength, void* pPacket, uint16_t port, uint32_t start, int mss, char* pAppData) +{ char* pData = (char*)pPacket + TcpHdrSizeGet(); switch (port) { - case 80: - HttpSendReply(&dataLength, pData, start, mss, todo); - break; - case 443: - HttpsSendReply(&dataLength, pData, start, mss, todo); - break; - default: - break; - } - - return dataLength; + case 80: return HttpSendReply (pDataLength, pData, start, mss, pAppData); + case 443: return HttpsSendReply(pDataLength, pData, start, mss, pAppData); + default: return 0; //0: not started; +1: started; -1: finished + } } static int preparePacket(void* pPacket, struct tcb* pTcb, int dataLength, int* pSize) { @@ -103,22 +96,12 @@ { if (pTcb->bytesSentToRem - pTcb->bytesAckdByRem < pTcb->window) { - if (pTcb->todo && pTcb->postComplete && MsTimerAbsolute(pTcb->delayUntil)) //don't send response until any post has completed + //0: not started; +1: started; -1: finished + int state = addApplicationData(&dataLength, pPacket, pTcb->locPort, pTcb->bytesSentToRem - 1, pTcb->remMss, pTcb->appData); + if (state == TCP_APP_FINISHED || state == TCP_APP_NOT_STARTED && pTcb->rcvdFin) { - dataLength = addApplicationData(pPacket, pTcb->locPort, pTcb->bytesSentToRem - 1, pTcb->remMss, pTcb->todo); - if (dataLength < pTcb->remMss) - { - TcpHdrFIN = true; - pTcb->sentFin = true; - } - } - else - { - if (pTcb->rcvdFin) - { - TcpHdrFIN = true; - pTcb->sentFin = true; - } + TcpHdrFIN = true; + pTcb->sentFin = true; } } } @@ -162,10 +145,10 @@ case TCB_ESTABLISHED: case TCB_CLOSE_FIN_WAIT: - if (pTcb->todo) + if (pTcb->appStarted) { - dataLength = addApplicationData(pPacket, pTcb->locPort, seqNum - 1, pTcb->remMss, pTcb->todo); - if (dataLength < pTcb->remMss) + bool added = addApplicationData(&dataLength, pPacket, pTcb->locPort, seqNum - 1, pTcb->remMss, pTcb->appData); + if (added && dataLength < pTcb->remMss) { TcpHdrFIN = true; pTcb->sentFin = true;