diff --git a/libraries/ESP8266WiFi/src/WiFiUdp.cpp b/libraries/ESP8266WiFi/src/WiFiUdp.cpp index 1a98f83b5..56aac1141 100644 --- a/libraries/ESP8266WiFi/src/WiFiUdp.cpp +++ b/libraries/ESP8266WiFi/src/WiFiUdp.cpp @@ -36,6 +36,7 @@ extern "C" #include "lwip/udp.h" #include "lwip/inet.h" #include "lwip/igmp.h" +#include "lwip/mem.h" #include "include/UdpContext.h" /* Constructor */ @@ -209,23 +210,19 @@ void WiFiUDP::flush() _ctx->flush(); } -IPAddress WiFiUDP::remoteIP() +IPAddress WiFiUDP::remoteIP() { - uint8_t _remoteIp[4] = {0}; - uint8_t _remotePort[2] = {0}; + if (!_ctx) + return IPAddress(0U); - // WiFiDrv::getRemoteData(_sock, _remoteIp, _remotePort); - IPAddress ip(_remoteIp); - return ip; + return IPAddress(_ctx->getRemoteAddress()); } -uint16_t WiFiUDP::remotePort() +uint16_t WiFiUDP::remotePort() { - uint8_t _remoteIp[4] = {0}; - uint8_t _remotePort[2] = {0}; + if (!_ctx) + return 0; - // WiFiDrv::getRemoteData(_sock, _remoteIp, _remotePort); - uint16_t port = (_remotePort[0]<<8)+_remotePort[1]; - return port; + return _ctx->getRemotePort(); } diff --git a/libraries/ESP8266WiFi/src/include/UdpContext.h b/libraries/ESP8266WiFi/src/include/UdpContext.h index 33b2d36d7..576d4200b 100644 --- a/libraries/ESP8266WiFi/src/include/UdpContext.h +++ b/libraries/ESP8266WiFi/src/include/UdpContext.h @@ -102,6 +102,24 @@ public: return _rx_buf->len - _rx_buf_offset; } + uint32_t getRemoteAddress() + { + if (!_rx_buf) + return 0; + + struct ip_hdr* iphdr = (struct ip_hdr*) (((uint8_t*)_rx_buf->payload) - UDP_HLEN - IP_HLEN); + return iphdr->src.addr; + } + + uint16_t getRemotePort() + { + if (!_rx_buf) + return 0; + + struct udp_hdr* udphdr = (struct udp_hdr*) (((uint8_t*)_rx_buf->payload) - UDP_HLEN); + return ntohs(udphdr->src); + } + bool next() { if (!_rx_buf) diff --git a/libraries/ESP8266WiFi/src/include/lwipopts.h b/libraries/ESP8266WiFi/src/include/lwipopts.h index 04b1d6277..1678a4025 100644 --- a/libraries/ESP8266WiFi/src/include/lwipopts.h +++ b/libraries/ESP8266WiFi/src/include/lwipopts.h @@ -39,6 +39,9 @@ #define __LWIPOPTS_H__ +#define EBUF_LWIP 1 +#define LWIP_ESP 1 +#define EP_OFFSET 36 /* ----------------------------------------------- ---------- Platform specific locking ---------- @@ -242,7 +245,7 @@ * (requires the LWIP_TCP option) */ #ifndef MEMP_NUM_TCP_PCB -#define MEMP_NUM_TCP_PCB 5 +#define MEMP_NUM_TCP_PCB (*((volatile uint32*)0x600011FC)) #endif /**