Exemplo n.º 1
0
/**
 * @brief
 */
static void Ms_Frame(void) {
	const time_t now = time(NULL);

	GList *s = ms_servers;
	while (s) {
		ms_server_t *server = (ms_server_t *) s->data;
		if (now - server->last_heartbeat > 30) {

			if (server->queued_pings > 6) {
				Com_Print("Server %s timed out\n", stos(server));
				Ms_DropServer(server);
			} else {
				if (now - server->last_ping >= 10) {
					server->queued_pings++;
					server->last_ping = now;

					Com_Verbose("Pinging %s\n", stos(server));

					const char *ping = "\xFF\xFF\xFF\xFF" "ping";
					sendto(ms_sock, ping, strlen(ping), 0, (struct sockaddr *) &server->addr,
					       sizeof(server->addr));
				}
			}
		}

		s = s->next;
	}
}
Exemplo n.º 2
0
/**
 * @brief Removes the specified server.
 */
static void Ms_RemoveServer(struct sockaddr_in *from) {
	ms_server_t *server = Ms_GetServer(from);

	if (!server) {
		Com_Warn("Shutdown from unregistered server %s\n", atos(from));
		return;
	}

	Com_Print("Shutdown from %s\n", stos(server));
	Ms_DropServer(server);
}
Exemplo n.º 3
0
/*
 * @brief Removes the specified server.
 */
static void Ms_RemoveServer(struct sockaddr_in *from, ms_server_t *server) {

	if (!server) // resolve from address
		server = Ms_GetServer(from);

	if (!server) {
		Com_Print("Shutdown from unregistered server %s\n", inet_ntoa(from->sin_addr));
		return;
	}

	Com_Print("Shutdown from %s\n", inet_ntoa(from->sin_addr));
	Ms_DropServer(server);
}
Exemplo n.º 4
0
/*
 * @brief
 */
static void Ms_RunFrame(void) {
	time_t curtime = time(0);

	GList *s = ms_servers;
	while (s) {
		ms_server_t *server = (ms_server_t *) s->data;
		if (curtime - server->last_heartbeat > 30) {

			if (server->queued_pings > 6) {
				Com_Print("Server %s timed out.\n", inet_ntoa(server->ip.sin_addr));

				s = s->next;
				Ms_DropServer(server);
				continue;
			}

			if (curtime - server->last_ping >= 10) {
				struct sockaddr_in addr;
				memset(&addr, 0, sizeof(addr));

				addr.sin_addr = server->ip.sin_addr;
				addr.sin_family = AF_INET;
				addr.sin_port = server->port;

				server->queued_pings++;
				server->last_ping = curtime;

				Com_Print("Pinging %s\n", inet_ntoa(server->ip.sin_addr));

				const char *msg = "\xFF\xFF\xFF\xFF" "ping";
				sendto(ms_sock, msg, strlen(msg), 0, (struct sockaddr *) &addr, sizeof(addr));
			}
		}

		s = s->next;
	}
}