#include // cout #include // strcmp #include "config.h" #include "tools.h" // isPositiveInt #include "cwifiserveritcp.h" #ifdef ENABLE_VHOST #include "cwifiservervtcp.h" #endif #include "cctrlserver.h" #include "cselect.h" #include "cdynbuffer.h" using namespace std; CDynBuffer Buffer; // Buffer to stock received values #ifdef ENABLE_VHOST TPort Port_VHOST = DEFAULT_WIFI_CLIENT_PORT_VHOST; #endif TPort Port_TCP = DEFAULT_WIFI_CLIENT_PORT_INET; TPort Port_Spy = DEFAULT_WIFI_SPY_PORT; TPort Port_Ctrl = DEFAULT_CTRL_PORT; CSelect Scheduler; void RemoveClient(CWifiServer* srv, bool srvIsSpy, TIndex i, TDescriptor socket) { if( ! srvIsSpy ) { cout<<"Client disconnected : "; srv->ShowInfoWifi(i) ; cout<GetReferenceOnInfoWifiByIndex(i)->GetCid() <CloseClient(i); //del master socket to set Scheduler.DelNode(socket); } void ForwardData(bool srcIsSpy, CWifiServer* src, CWifiServer* otherDst) { int valread; TPower power; for ( TIndex i = 0 ; i < src->GetNumberClient() ; ) { TDescriptor socket = (*src)[i]; if( ! src->IsEnable(i) ) { RemoveClient(src, srcIsSpy , i, socket); continue; } if( Scheduler.DescriptorHasAction(socket) ) { //Check if it was for closing , and also read the //incoming message valread=src->RecvSignal(socket,&power,&Buffer); if( valread <=0 ) { RemoveClient(src, srcIsSpy , i, socket); continue; } if( ! srcIsSpy ) { src->SendAllOtherClients(i,power,Buffer.GetBuffer(),valread); otherDst->SendAllClientsWithoutLoss(power,Buffer.GetBuffer(),valread); } else { src->SendAllOtherClientsWithoutLoss(i,power,Buffer.GetBuffer(),valread); otherDst->SendAllClientsWithoutLoss(power,Buffer.GetBuffer(),valread); } } i++; } } int vwifi_server() { TDescriptor socket; CListInfo infoSockets; CListInfo infoWifis; CListInfo infoWifisDeconnected; #ifdef ENABLE_VHOST CWifiServerVTCP wifiServerVTCP(&infoSockets,&infoWifis,&infoWifisDeconnected); cout<<"CLIENT VHOST : "; wifiServerVTCP.Init(Port_VHOST); if( ! wifiServerVTCP.Listen(WIFI_MAX_DECONNECTED_CLIENT) ) { cerr<<"Error : wifiServerVTCP.Listen"<ShowInfoWifi(wifiServer->GetNumberClient()-1) ; cout<ShowInfoWifi(wifiServer->GetNumberClient()-1) ; cout<GetCid()<