Ejemplo n.º 1
0
/*
 * 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();
}
Ejemplo n.º 2
0
/*
 * @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();
}