diff --git a/libraries/WiFi/src/WiFiClient.cpp b/libraries/WiFi/src/WiFiClient.cpp index d6f27354c723fb618ae5247ce4263ddd86ff4aee..bcea2bb8c3b01f062cf3f386fd2224ac8a9aca01 100644 --- a/libraries/WiFi/src/WiFiClient.cpp +++ b/libraries/WiFi/src/WiFiClient.cpp @@ -346,6 +346,34 @@ uint16_t WiFiClient::remotePort() const return remotePort(fd()); } +IPAddress WiFiClient::localIP(int fd) const +{ + struct sockaddr_storage addr; + socklen_t len = sizeof addr; + getsockname(fd, (struct sockaddr*)&addr, &len); + struct sockaddr_in *s = (struct sockaddr_in *)&addr; + return IPAddress((uint32_t)(s->sin_addr.s_addr)); +} + +uint16_t WiFiClient::localPort(int fd) const +{ + struct sockaddr_storage addr; + socklen_t len = sizeof addr; + getsockname(fd, (struct sockaddr*)&addr, &len); + struct sockaddr_in *s = (struct sockaddr_in *)&addr; + return ntohs(s->sin_port); +} + +IPAddress WiFiClient::localIP() const +{ + return localIP(fd()); +} + +uint16_t WiFiClient::localPort() const +{ + return localPort(fd()); +} + bool WiFiClient::operator==(const WiFiClient& rhs) { return clientSocketHandle == rhs.clientSocketHandle && remotePort() == rhs.remotePort() && remoteIP() == rhs.remoteIP(); diff --git a/libraries/WiFi/src/WiFiClient.h b/libraries/WiFi/src/WiFiClient.h index 5472c74ddb50130ebde142cdb296be4745350285..6d27c3e4b87c80086a5485d0aa3ced1678b5eb1d 100644 --- a/libraries/WiFi/src/WiFiClient.h +++ b/libraries/WiFi/src/WiFiClient.h @@ -85,6 +85,11 @@ public: uint16_t remotePort() const; uint16_t remotePort(int fd) const; + IPAddress localIP() const; + IPAddress localIP(int fd) const; + uint16_t localPort() const; + uint16_t localPort(int fd) const; + //friend class WiFiServer; using Print::write; };