diff --git a/libraries/ESP8266WiFi/src/WiFiClient.cpp b/libraries/ESP8266WiFi/src/WiFiClient.cpp index 50e8d1123..9455ac60e 100644 --- a/libraries/ESP8266WiFi/src/WiFiClient.cpp +++ b/libraries/ESP8266WiFi/src/WiFiClient.cpp @@ -263,6 +263,22 @@ uint16_t WiFiClient::remotePort() return _client->getRemotePort(); } +IPAddress WiFiClient::localIP() +{ + if (!_client) + return IPAddress(0U); + + return IPAddress(_client->getLocalAddress()); +} + +uint16_t WiFiClient::localPort() +{ + if (!_client) + return 0; + + return _client->getLocalPort(); +} + int8_t WiFiClient::_s_connected(void* arg, void* tpcb, int8_t err) { return reinterpret_cast(arg)->_connected(tpcb, err); diff --git a/libraries/ESP8266WiFi/src/WiFiClient.h b/libraries/ESP8266WiFi/src/WiFiClient.h index 161ca0be1..fc18a3133 100644 --- a/libraries/ESP8266WiFi/src/WiFiClient.h +++ b/libraries/ESP8266WiFi/src/WiFiClient.h @@ -60,6 +60,8 @@ public: IPAddress remoteIP(); uint16_t remotePort(); + IPAddress localIP(); + uint16_t localPort(); bool getNoDelay(); void setNoDelay(bool nodelay); static void setLocalPortStart(uint16_t port) { _localPort = port; } diff --git a/libraries/ESP8266WiFi/src/include/ClientContext.h b/libraries/ESP8266WiFi/src/include/ClientContext.h index 619356862..aedd30327 100644 --- a/libraries/ESP8266WiFi/src/include/ClientContext.h +++ b/libraries/ESP8266WiFi/src/include/ClientContext.h @@ -125,6 +125,18 @@ class ClientContext { return _pcb->remote_port; } + uint32_t getLocalAddress() { + if(!_pcb) return 0; + + return _pcb->local_ip.addr; + } + + uint16_t getLocalPort() { + if(!_pcb) return 0; + + return _pcb->local_port; + } + size_t getSize() const { if(!_rx_buf) return 0;