A stack which works with or without an Mbed os library. Provides IPv4 or IPv6 with a full 1500 byte buffer.
Dependents: oldheating gps motorhome heating
Diff: ip4/udptcp4.cpp
- Revision:
- 37:793b39683406
- Parent:
- 15:6ca6778168b1
- Child:
- 47:73af5c0b0dc2
diff -r 900e24b27bfb -r 793b39683406 ip4/udptcp4.cpp --- a/ip4/udptcp4.cpp Mon Sep 25 07:09:32 2017 +0000 +++ b/ip4/udptcp4.cpp Wed Oct 04 07:51:02 2017 +0000 @@ -1,14 +1,13 @@ -#include "mbed.h" -#include "log.h" -#include "net.h" -#include "dhcp.h" -#include "eth.h" -#include "ip.h" -#include "ip4.h" -#include "tcp.h" -#include "udp.h" - -#define DEBUG false +#include "mbed.h" +#include "log.h" +#include "net.h" +#include "action.h" +#include "dhcp.h" +#include "eth.h" +#include "ip.h" +#include "ip4.h" +#include "tcp.h" +#include "udp.h" static uint16_t calculateChecksum(uint8_t pro, uint32_t srcIp, uint32_t dstIp, int size, void* pPacket) { @@ -33,7 +32,7 @@ { if (!action) return; - Ip4DestIpFromAction(action, pDstIp); + Ip4DestIpFromDest(ActionGetDestPart(action), pDstIp); *pSrcIp = DhcpLocalIp; @@ -51,21 +50,38 @@ case UDP: UdpAddChecksum(pPacket, checksum); break; } - switch (pro) + if (ActionGetTracePart(action)) { - case TCP: if (DEBUG)TcpLogHeader("IPv4 packet sent", pPacket, 0); break; - case UDP: if (DEBUG)UdpLogHeader("IPv4 packet sent", pPacket, 0); break; + switch (pro) + { + case TCP: TcpLogHeader(0); break; + case UDP: UdpLogHeader(0); break; + } } } -int Tcp4HandleReceivedPacket(uint32_t* pSrcIp, uint32_t* pDstIp, int* pSize, void * pPacket) +static void (*pTraceBack)(void); +static int tracePacketProtocol; +static uint16_t calculatedChecksum; +static void trace() +{ + pTraceBack(); + switch(tracePacketProtocol) + { + case UDP: UdpLogHeader(calculatedChecksum); break; + case TCP: TcpLogHeader(calculatedChecksum); break; + default: LogTimeF("UdpTcp4 - traceback unrecognised protocol %d\r\n", tracePacketProtocol); break; + } +} +int Tcp4HandleReceivedPacket(void (*traceback)(void), uint32_t* pSrcIp, uint32_t* pDstIp, int* pSize, void * pPacket) { - uint16_t calculatedChecksum = calculateChecksum(TCP, *pSrcIp, *pDstIp, *pSize, pPacket); - if (DEBUG) TcpLogHeader("IPv4 packet received", pPacket, calculatedChecksum); + pTraceBack = traceback; + tracePacketProtocol = TCP; + calculatedChecksum = calculateChecksum(TCP, *pSrcIp, *pDstIp, *pSize, pPacket); TcpReadHeader(pPacket, *pSize); - int action = TcpHandleReceivedPacket(pSize, pPacket); + int action = TcpHandleReceivedPacket(trace, pSize, pPacket); *pDstIp = *pSrcIp; @@ -74,14 +90,15 @@ return action; } -int Udp4HandleReceivedPacket(uint32_t* pSrcIp, uint32_t* pDstIp, int* pSize, void * pPacket) +int Udp4HandleReceivedPacket(void (*traceback)(void), uint32_t* pSrcIp, uint32_t* pDstIp, int* pSize, void* pPacket) { - uint16_t calculatedChecksum = calculateChecksum(UDP, *pSrcIp, *pDstIp, *pSize, pPacket); - if (DEBUG) UdpLogHeader("IPv4 packet received", pPacket, calculatedChecksum); + pTraceBack = traceback; + tracePacketProtocol = UDP; + calculatedChecksum = calculateChecksum(UDP, *pSrcIp, *pDstIp, *pSize, pPacket); UdpReadHeader(pPacket, *pSize); - int action = UdpHandleReceivedPacket(pSize, pPacket); + int action = UdpHandleReceivedPacket(trace, pSize, pPacket); *pDstIp = *pSrcIp;