diff --git a/UNOR4USBBridge/at_handler.h b/UNOR4USBBridge/at_handler.h index b46a26b..c85062a 100644 --- a/UNOR4USBBridge/at_handler.h +++ b/UNOR4USBBridge/at_handler.h @@ -49,6 +49,7 @@ class CServerClient { public: WiFiClient client; int server = -1; + bool accepted = false; }; class CAtHandler { diff --git a/UNOR4USBBridge/cmds_wifi_netif.h b/UNOR4USBBridge/cmds_wifi_netif.h index 658e4dd..cf6dac9 100644 --- a/UNOR4USBBridge/cmds_wifi_netif.h +++ b/UNOR4USBBridge/cmds_wifi_netif.h @@ -403,7 +403,7 @@ void CAtHandler::add_cmds_wifi_netif() { for(int i = 0;i 0) { client_sock = last_server_client_sock; break; @@ -532,6 +534,62 @@ void CAtHandler::add_cmds_wifi_netif() { } }; + /* ....................................................................... */ + command_table[_SERVERACCEPT] = [this](auto & srv, auto & parser) { + /* ....................................................................... */ + switch (parser.cmd_mode) { + case chAT::CommandMode::Write: { + if (parser.args.size() != 1) { + return chAT::CommandStatus::ERROR; + } + + auto &socket = parser.args[0]; + if (socket.empty()) { + return chAT::CommandStatus::ERROR; + } + int sock = atoi(socket.c_str()); + + if(sock < 0 || sock >= MAX_SERVER_AVAILABLE) { + return chAT::CommandStatus::ERROR; + } + + if(serverWiFi[sock] == nullptr) { + return chAT::CommandStatus::ERROR; + } + + int client_sock = -1; + + /* accept */ + for(int i = 0;iavailable(); + if (serverClients[i].client) { + serverClients[i].server = sock; + serverClients[i].accepted = true; + client_sock = i; + } + break; + } + } + + int sock_to_send = -1; + if(client_sock != -1) { + sock_to_send = START_CLIENT_SERVER_SOCK + client_sock; + } + + srv.write_response_prompt(); + srv.write_str((const char *) String(sock_to_send).c_str()); + srv.write_line_end(); + return chAT::CommandStatus::OK; + } + case chAT::CommandMode::Run: { + return chAT::CommandStatus::ERROR; + } + default: + return chAT::CommandStatus::ERROR; + } + }; + /* ....................................................................... */ command_table[_SERVEREND] = [this](auto & srv, auto & parser) { /* ....................................................................... */ @@ -870,4 +928,4 @@ void CAtHandler::add_cmds_wifi_netif() { }; } -#endif \ No newline at end of file +#endif diff --git a/UNOR4USBBridge/commands.h b/UNOR4USBBridge/commands.h index a2cdf2f..7eb0ff4 100644 --- a/UNOR4USBBridge/commands.h +++ b/UNOR4USBBridge/commands.h @@ -81,6 +81,7 @@ enum { #define _SSLREMOTEPORT "+SSLREMOTEPORT" #define _SSLPEEK "+SSLPEEK" #define _SERVERAVAILABLE "+SERVERAVAILABLE" +#define _SERVERACCEPT "+SERVERACCEPT" #define _SERVEREND "+SERVEREND" #define _UDPBEGIN "+UDPBEGIN"