/* * Cl_ParseStatusMessage */ void Cl_ParseStatusMessage(void) { extern void Ui_NewServer(void); cl_server_info_t *server; char info[MAX_MSG_SIZE]; server = Cl_ServerForNetaddr(&net_from); if (!server) { // unknown server, assumed response to broadcast server = Cl_AddServer(&net_from); server->source = SERVER_SOURCE_BCAST; server->ping_time = cls.broadcast_time; } // try to parse the info string strncpy(info, Msg_ReadString(&net_message), sizeof(info) - 1); info[sizeof(info) - 1] = '\0'; if (sscanf(info, "%63c\\%31c\\%31c\\%hu\\%hu", server->hostname, server->name, server->gameplay, &server->clients, &server->max_clients) != 5) { strcpy(server->hostname, Net_NetaddrToString(server->addr)); server->name[0] = '\0'; server->gameplay[0] = '\0'; server->clients = 0; server->max_clients = 0; } server->hostname[63] = '\0'; server->name[31] = '\0'; server->gameplay[31] = '\0'; server->ping = cls.real_time - server->ping_time; if (server->ping > 1000) // clamp the ping server->ping = 999; Ui_NewServer(); }
/* * @brief */ void Cl_ParseServerInfo(void) { extern void Ui_NewServer(void); char info[MAX_MSG_SIZE]; cl_server_info_t *server = Cl_ServerForNetaddr(&net_from); if (!server) { // unknown server, assumed response to broadcast server = Cl_AddServer(&net_from); server->source = SERVER_SOURCE_BCAST; server->ping_time = cls.broadcast_time; } // try to parse the info string g_strlcpy(info, Net_ReadString(&net_message), sizeof(info)); if (sscanf(info, "%63c\\%31c\\%31c\\%hu\\%hu", server->hostname, server->name, server->gameplay, &server->clients, &server->max_clients) != 5) { Com_Debug("Failed to parse info \"%s\" for %s\n", info, Net_NetaddrToString(&server->addr)); server->hostname[0] = '\0'; server->name[0] = '\0'; server->gameplay[0] = '\0'; server->clients = 0; server->max_clients = 0; return; } server->hostname[sizeof(server->hostname) - 1] = '\0'; server->name[sizeof(server->name) - 1] = '\0'; server->gameplay[sizeof(server->name) - 1] = '\0'; server->ping = Clamp(cls.real_time - server->ping_time, 1, 999); Ui_NewServer(); }