diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.cpp b/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.cpp index 01d32920f3..1fc13a116e 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.cpp +++ b/libraries/ESP8266WiFi/src/ESP8266WiFiGeneric.cpp @@ -38,6 +38,7 @@ extern "C" { #include "lwip/opt.h" #include "lwip/err.h" #include "lwip/dns.h" +#include "lwip/init.h" // LWIP_VERSION_ } #include "WiFiClient.h" @@ -419,7 +420,11 @@ bool ESP8266WiFiGenericClass::forceSleepWake() { // ------------------------------------------------ Generic Network function --------------------------------------------- // ----------------------------------------------------------------------------------------------------------------------- +#if LWIP_VERSION_MAJOR == 1 void wifi_dns_found_callback(const char *name, ip_addr_t *ipaddr, void *callback_arg); +#else +void wifi_dns_found_callback(const char *name, const ip_addr_t *ipaddr, void *callback_arg); +#endif /** * Resolve the given hostname to an IP address. @@ -465,7 +470,12 @@ int ESP8266WiFiGenericClass::hostByName(const char* aHostname, IPAddress& aResul * @param ipaddr * @param callback_arg */ -void wifi_dns_found_callback(const char *name, ip_addr_t *ipaddr, void *callback_arg) { +#if LWIP_VERSION_MAJOR == 1 +void wifi_dns_found_callback(const char *name, ip_addr_t *ipaddr, void *callback_arg) +#else +void wifi_dns_found_callback(const char *name, const ip_addr_t *ipaddr, void *callback_arg) +#endif +{ (void) name; if(ipaddr) { (*reinterpret_cast(callback_arg)) = ipaddr->addr; diff --git a/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.cpp b/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.cpp index 1d7d22736d..136a60300c 100644 --- a/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.cpp +++ b/libraries/ESP8266WiFi/src/ESP8266WiFiSTA.cpp @@ -36,6 +36,7 @@ extern "C" { #include "smartconfig.h" #include "lwip/err.h" #include "lwip/dns.h" +#include "lwip/init.h" // LWIP_VERSION_ } #include "debug.h" @@ -400,8 +401,13 @@ IPAddress ESP8266WiFiSTAClass::gatewayIP() { * @return IPAddress DNS Server IP */ IPAddress ESP8266WiFiSTAClass::dnsIP(uint8_t dns_no) { +#if LWIP_VERSION_MAJOR == 1 ip_addr_t dns_ip = dns_getserver(dns_no); return IPAddress(dns_ip.addr); +#else + const ip_addr_t* dns_ip = dns_getserver(dns_no); + return IPAddress(dns_ip->addr); +#endif } diff --git a/libraries/ESP8266WiFi/src/WiFiClient.cpp b/libraries/ESP8266WiFi/src/WiFiClient.cpp index 4b19ed1b0e..144cf194b5 100644 --- a/libraries/ESP8266WiFi/src/WiFiClient.cpp +++ b/libraries/ESP8266WiFi/src/WiFiClient.cpp @@ -106,11 +106,13 @@ int WiFiClient::connect(IPAddress ip, uint16_t port) // if the default interface is down, tcp_connect exits early without // ever calling tcp_err // http://lists.gnu.org/archive/html/lwip-devel/2010-05/msg00001.html +#if LWIP_VERSION_MAJOR == 1 netif* interface = ip_route(&addr); if (!interface) { DEBUGV("no route to host\r\n"); return 0; } +#endif tcp_pcb* pcb = tcp_new(); if (!pcb) @@ -163,6 +165,11 @@ bool WiFiClient::getNoDelay() { return _client->getNoDelay(); } +size_t WiFiClient::availableForWrite () +{ + return _client->availableForWrite(); +} + size_t WiFiClient::write(uint8_t b) { return write(&b, 1); diff --git a/libraries/ESP8266WiFi/src/WiFiClient.h b/libraries/ESP8266WiFi/src/WiFiClient.h index dabd65f26e..cb4f75c37b 100644 --- a/libraries/ESP8266WiFi/src/WiFiClient.h +++ b/libraries/ESP8266WiFi/src/WiFiClient.h @@ -75,6 +75,8 @@ class WiFiClient : public Client, public SList { void setNoDelay(bool nodelay); static void setLocalPortStart(uint16_t port) { _localPort = port; } + size_t availableForWrite(); + friend class WiFiServer; using Print::write; diff --git a/libraries/ESP8266WiFi/src/include/ClientContext.h b/libraries/ESP8266WiFi/src/include/ClientContext.h index 1d621df4ce..7a357390d6 100644 --- a/libraries/ESP8266WiFi/src/include/ClientContext.h +++ b/libraries/ESP8266WiFi/src/include/ClientContext.h @@ -124,6 +124,11 @@ class ClientContext } } + size_t availableForWrite () + { + return _pcb? tcp_sndbuf(_pcb): 0; + } + void setNoDelay(bool nodelay) { if(!_pcb) { diff --git a/libraries/ESP8266WiFi/src/include/UdpContext.h b/libraries/ESP8266WiFi/src/include/UdpContext.h index a1ce2327ed..cb5c5628d5 100644 --- a/libraries/ESP8266WiFi/src/include/UdpContext.h +++ b/libraries/ESP8266WiFi/src/include/UdpContext.h @@ -23,8 +23,12 @@ class UdpContext; -extern "C" void esp_yield(); -extern "C" void esp_schedule(); +extern "C" { +void esp_yield(); +void esp_schedule(); +#include "lwip/init.h" // LWIP_VERSION_ +} + #define GET_IP_HDR(pb) reinterpret_cast(((uint8_t*)((pb)->payload)) - UDP_HLEN - IP_HLEN); #define GET_UDP_HDR(pb) reinterpret_cast(((uint8_t*)((pb)->payload)) - UDP_HLEN); @@ -104,10 +108,17 @@ class UdpContext udp_disconnect(_pcb); } +#if LWIP_VERSION_MAJOR == 1 void setMulticastInterface(ip_addr_t addr) { udp_set_multicast_netif_addr(_pcb, addr); } +#else + void setMulticastInterface(const ip_addr_t& addr) + { + udp_set_multicast_netif_addr(_pcb, &addr); + } +#endif void setMulticastTTL(int ttl) { @@ -328,7 +339,7 @@ class UdpContext } void _recv(udp_pcb *upcb, pbuf *pb, - ip_addr_t *addr, u16_t port) + const ip_addr_t *addr, u16_t port) { (void) upcb; (void) addr; @@ -353,9 +364,15 @@ class UdpContext } +#if LWIP_VERSION_MAJOR == 1 static void _s_recv(void *arg, udp_pcb *upcb, pbuf *p, ip_addr_t *addr, u16_t port) +#else + static void _s_recv(void *arg, + udp_pcb *upcb, pbuf *p, + const ip_addr_t *addr, u16_t port) +#endif { reinterpret_cast(arg)->_recv(upcb, p, addr, port); }