int SendJSONCmd(char *js, char *rsp, uint16_t rsp_len) { int timeout = 5000; // In milliseconds SOCKET sclient; if ( ConnectToClient(&sclient, DUO_SERVER_IP_ADDRESS, DUO_SERVER_CMD_PORT) < 0 ) { return -1; } setsockopt(sclient,SOL_SOCKET,SO_SNDTIMEO,(const char*)&timeout,sizeof(timeout)); setsockopt(sclient,SOL_SOCKET,SO_RCVTIMEO,(const char*)&timeout,sizeof(timeout)); // Send request if (cmdline_params.verbose) printf("\nSend json request command:\n\n%s\n\n", js); if (send(sclient, js, strlen(js), 0) == SOCKET_ERROR) { printf("\nERROR: Sent request command failed!\n"); closesocket(sclient); WSACleanup(); return -1; } // Receive respond int ret = recv(sclient, rsp, rsp_len, 0); rsp[ret] = '\0'; if (ret <= 0) { printf("\nERROR: Receive respond timeout!\n"); closesocket(sclient); WSACleanup(); return -1; } if (cmdline_params.verbose) printf("\nReceived: %s\n", rsp); closesocket(sclient); WSACleanup(); return 0; }
bool NetworkConnectionMenu::signal_ok() { bool r = false; std::list<GameServerInfo> lst; // Hack: force loading of teams before creating threads. GetTeamsList(); // Which tab is displayed ? std::string id = tabs->GetCurrentTabId(); if (id == TAB_SERVER_ID) { // Hosting your own server r = HostingServer(srv_port_number->GetText(), srv_game_name->GetText(), srv_game_pwd->GetPassword(), srv_internet_server->GetValue()); if (!r) goto out; // Remember the parameters Config::GetInstance()->SetNetworkServerPort(srv_port_number->GetText()); Config::GetInstance()->SetNetworkServerGameName(srv_game_name->GetText()); Config::GetInstance()->SetNetworkServerPublic(srv_internet_server->GetValue()); } else if (id == TAB_CLIENT_ID) { // Direct connexion to a server if (cl_net_games_lst->GetSelectedItem() != -1) { // Connect to an internet game! r = ConnectToClient(cl_net_games_lst->GetAddress(), cl_net_games_lst->GetPort(), cl_net_server_pwd->GetPassword()); if (!r) goto out; } else if (!cl_server_address->GetText().empty()) { r = ConnectToClient(cl_server_address->GetText(), cl_port_number->GetText(), cl_server_pwd->GetPassword()); if (!r) goto out; // Remember the parameters Config::GetInstance()->SetNetworkClientHost(cl_server_address->GetText()); Config::GetInstance()->SetNetworkClientPort(cl_port_number->GetText()); } else goto out; } else if (id == TAB_MANUAL_ID) { if (!cl_server_address->GetText().empty()) { r = ConnectToClient(cl_server_address->GetText(), cl_port_number->GetText(), cl_server_pwd->GetPassword()); if (!r) goto out; // Remember the parameters Config::GetInstance()->SetNetworkClientHost(cl_server_address->GetText()); Config::GetInstance()->SetNetworkClientPort(cl_port_number->GetText()); } } if (Network::IsConnected()) { play_ok_sound(); // run the network menu ! :-) NetworkMenu nm; Network::GetInstance()->network_menu = &nm; nm.Run(); Network::GetInstance()->network_menu = NULL; IndexServer::GetInstance()->Disconnect(); Network::Disconnect(); // Don't go back to main menu after playing Menu::RedrawMenu(); ThreadRefreshList(); return false; } out: Network::Disconnect(); return r; }