query_status_t send_ottd_request_packet(struct qserver *server) { qserver_send_initial(server, server->type->status_packet, server->type->status_len); if(get_server_rules || get_player_info) { server->next_rule = ""; // trigger calling send_a2s_rule_request_packet } return INPROGRESS; }
query_status_t send_fl_request_packet(struct qserver *server) { struct fl_status* status = (struct fl_status*)server->master_query_tag; if( SOCKET_ERROR == qserver_send_initial(server, FL_INFO, sizeof(FL_INFO) - 1) ) { return SOCKET_ERROR; } status->sent_info = 1; status->type = 0; return INPROGRESS; }
query_status_t send_ottdmaster_request_packet(struct qserver *server) { return qserver_send_initial(server, server->type->master_packet, server->type->master_len); }
query_status_t send_fl_rule_request_packet(struct qserver *server) { struct fl_status* status = (struct fl_status*)server->master_query_tag; if ( 1 >= status->type ) { // Not supported return PKT_ERROR; } if(!get_server_rules && !get_player_info) { return DONE_FORCE; } do { if(!status->have_challenge) { debug(3, "sending challenge"); if( SOCKET_ERROR == qserver_send_initial(server, FL_GETCHALLENGE, sizeof(FL_GETCHALLENGE)-1) ) { return SOCKET_ERROR; } status->sent_challenge = 1; break; } else if(get_server_rules && !status->have_rules) { char buf[sizeof(FL_RULES)-1+4] = FL_RULES; memcpy(buf+sizeof(FL_RULES)-1, &status->challenge, 4); debug(3, "sending rule query"); if( SOCKET_ERROR == qserver_send_initial(server, buf, sizeof(buf)) ) { return SOCKET_ERROR; } status->sent_rules = 1; break; } else if(get_player_info && !status->have_player) { char buf[sizeof(FL_PLAYER)-1+4] = FL_PLAYER; memcpy(buf+sizeof(FL_PLAYER)-1, &status->challenge, 4); debug(3, "sending player query"); if( SOCKET_ERROR == qserver_send_initial(server, buf, sizeof(buf)) ) { return SOCKET_ERROR; } status->sent_player = 1; break; } else { debug(3, "timeout"); // we are probably called due to timeout, restart. status->have_challenge = 0; status->have_rules = 0; } } while(1); return INPROGRESS; }