@@ -403,7 +403,7 @@ void CAtHandler::add_cmds_wifi_netif() {
403
403
404
404
for (int i = 0 ;i<MAX_CLIENT_AVAILABLE;i++) {
405
405
if (serverClients[i].server == sock) {
406
- if (serverClients[i].client ) {
406
+ if (serverClients[i].client && !serverClients[i]. accepted ) {
407
407
serverClients[i].client .write (data_received.data (), data_received.size ());
408
408
}
409
409
}
@@ -491,6 +491,7 @@ void CAtHandler::add_cmds_wifi_netif() {
491
491
if (!serverClients[i].client )
492
492
break ;
493
493
serverClients[i].server = sock;
494
+ serverClients[i].accepted = false ;
494
495
}
495
496
}
496
497
@@ -501,6 +502,7 @@ void CAtHandler::add_cmds_wifi_netif() {
501
502
do {
502
503
if (serverClients[last_server_client_sock].client
503
504
&& serverClients[last_server_client_sock].server == sock
505
+ && !serverClients[last_server_client_sock].accepted
504
506
&& serverClients[last_server_client_sock].client .available () > 0 ) {
505
507
client_sock = last_server_client_sock;
506
508
break ;
@@ -532,6 +534,62 @@ void CAtHandler::add_cmds_wifi_netif() {
532
534
}
533
535
};
534
536
537
+ /* ....................................................................... */
538
+ command_table[_SERVERACCEPT] = [this ](auto & srv, auto & parser) {
539
+ /* ....................................................................... */
540
+ switch (parser.cmd_mode ) {
541
+ case chAT::CommandMode::Write: {
542
+ if (parser.args .size () != 1 ) {
543
+ return chAT::CommandStatus::ERROR;
544
+ }
545
+
546
+ auto &socket = parser.args [0 ];
547
+ if (socket.empty ()) {
548
+ return chAT::CommandStatus::ERROR;
549
+ }
550
+ int sock = atoi (socket.c_str ());
551
+
552
+ if (sock < 0 || sock >= MAX_SERVER_AVAILABLE) {
553
+ return chAT::CommandStatus::ERROR;
554
+ }
555
+
556
+ if (serverWiFi[sock] == nullptr ) {
557
+ return chAT::CommandStatus::ERROR;
558
+ }
559
+
560
+ int client_sock = -1 ;
561
+
562
+ /* accept */
563
+ for (int i = 0 ;i<MAX_CLIENT_AVAILABLE;i++) {
564
+ if (!serverClients[i].client ) {
565
+ serverClients[i].client = serverWiFi[sock]->available ();
566
+ if (serverClients[i].client ) {
567
+ serverClients[i].server = sock;
568
+ serverClients[i].accepted = true ;
569
+ client_sock = i;
570
+ }
571
+ break ;
572
+ }
573
+ }
574
+
575
+ int sock_to_send = -1 ;
576
+ if (client_sock != -1 ) {
577
+ sock_to_send = START_CLIENT_SERVER_SOCK + client_sock;
578
+ }
579
+
580
+ srv.write_response_prompt ();
581
+ srv.write_str ((const char *) String (sock_to_send).c_str ());
582
+ srv.write_line_end ();
583
+ return chAT::CommandStatus::OK;
584
+ }
585
+ case chAT::CommandMode::Run: {
586
+ return chAT::CommandStatus::ERROR;
587
+ }
588
+ default :
589
+ return chAT::CommandStatus::ERROR;
590
+ }
591
+ };
592
+
535
593
/* ....................................................................... */
536
594
command_table[_SERVEREND] = [this ](auto & srv, auto & parser) {
537
595
/* ....................................................................... */
@@ -870,4 +928,4 @@ void CAtHandler::add_cmds_wifi_netif() {
870
928
};
871
929
}
872
930
873
- #endif
931
+ #endif
0 commit comments