diff --git a/tasmota/tasmota_xdrv_driver/xdrv_58_range_extender.ino b/tasmota/tasmota_xdrv_driver/xdrv_58_range_extender.ino index ed806c158..c3c112594 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_58_range_extender.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_58_range_extender.ino @@ -94,6 +94,8 @@ const char kDrvRgxCommands[] PROGMEM = "Rgx|" // Prefix #ifdef USE_WIFI_RANGE_EXTENDER_NAPT "|" "NAPT" + "|" + "Port" #endif // USE_WIFI_RANGE_EXTENDER_NAPT "|" "Clients" @@ -108,6 +110,7 @@ void (*const DrvRgxCommand[])(void) PROGMEM = { &CmndRgxPassword, #ifdef USE_WIFI_RANGE_EXTENDER_NAPT &CmndRgxNAPT, + &CmndRgxPort, #endif // USE_WIFI_RANGE_EXTENDER_NAPT &CmndRgxClients, &CmndRgxAddresses, @@ -120,7 +123,6 @@ void (*const DrvRgxCommand[])(void) PROGMEM = { #endif // ESP8266 #endif // USE_WIFI_RANGE_EXTENDER_NAPT -#include #include #ifdef ESP8266 #include @@ -280,7 +282,51 @@ void CmndRgxNAPT(void) } } ResponseCmndStateText(Settings->sbflag1.range_extender_napt); -}; +} + +void CmndRgxPort(void) +{ + char *tok, *state, *parm_mac; + uint16_t gw, dst; + uint8_t proto = 0; + + Response_P(PSTR("ERROR")); + + if (ArgC()!=4) return; + if ((tok = strtok_r(XdrvMailbox.data, ", ", &state)) == 0) return; + if (strcasecmp("TCP", tok) == 0) proto = IP_PROTO_TCP; + if (strcasecmp("UDP", tok) == 0) proto = IP_PROTO_UDP; + if (!proto) return; + if ((tok = strtok_r(0, ", ", &state)) == 0) return; + if ((gw = strtoul(tok, nullptr, 0)) == 0) return; + if ((parm_mac = strtok_r(0, ", ", &state)) == 0) return; + if ((tok = strtok_r(0, ", ", &state)) == 0) return; + if ((dst = strtoul(tok, nullptr, 0)) == 0) return; + +#ifdef ESP32 + wifi_sta_list_t wifi_sta_list = {0}; + tcpip_adapter_sta_list_t adapter_sta_list = {0}; + + esp_wifi_ap_get_sta_list(&wifi_sta_list); + tcpip_adapter_get_sta_list(&wifi_sta_list, &adapter_sta_list); + + for (int i=0; i %_I:%u"), + (proto == IP_PROTO_TCP) ? "TCP" : "UDP", (uint32_t)WiFi.localIP(), gw, adapter_sta_list.sta[i].ip.addr, dst); + } + break; + } + } +#endif // ESP32 +} #endif // USE_WIFI_RANGE_EXTENDER_NAPT void ResponseRgxConfig(void)