Example #1
0
/**
 * @brief
 */
static void Ms_ParseMessage(struct sockaddr_in *from, char *data) {
	char *cmd = data;
	char *line = data;

	while (*line && *line != '\n') {
		line++;
	}

	*(line++) = '\0';
	cmd += 4;

	if (!g_ascii_strncasecmp(cmd, "ping", 4)) {
		Ms_AddServer(from);
	} else if (!g_ascii_strncasecmp(cmd, "heartbeat", 9) || !g_ascii_strncasecmp(cmd, "print", 5)) {
		Ms_Heartbeat(from);
	} else if (!g_ascii_strncasecmp(cmd, "ack", 3)) {
		Ms_Ack(from);
	} else if (!g_ascii_strncasecmp(cmd, "shutdown", 8)) {
		Ms_RemoveServer(from);
	} else if (!g_ascii_strncasecmp(cmd, "getservers", 10) || !g_ascii_strncasecmp(cmd, "y", 1)) {
		Ms_GetServers(from);
	} else {
		Com_Warn("Unknown command from %s: '%s'", atos(from), cmd);
	}
}
Example #2
0
/**
 * @brief Accept a "heartbeat" from the specified server address.
 */
static void Ms_Heartbeat(struct sockaddr_in *from) {
	ms_server_t *server = Ms_GetServer(from);

	if (server) {
		server->last_heartbeat = time(NULL);

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

		const void *ack = "\xFF\xFF\xFF\xFF" "ack";
		sendto(ms_sock, ack, 7, 0, (struct sockaddr *) &server->addr, sizeof(server->addr));
	} else {
		Ms_AddServer(from);
	}
}
Example #3
0
/*
 * @brief
 */
static void Ms_Heartbeat(struct sockaddr_in *from) {
	ms_server_t *server;
	struct sockaddr_in addr;

	if ((server = Ms_GetServer(from))) { // update their timestamp
		addr.sin_addr = server->ip.sin_addr;
		addr.sin_family = AF_INET;
		addr.sin_port = server->port;
		memset(&addr.sin_zero, 0, sizeof(addr.sin_zero));

		server->validated = true;
		server->last_heartbeat = time(0);

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

		sendto(ms_sock, "\xFF\xFF\xFF\xFF" "ack", 7, 0, (struct sockaddr*) &addr, sizeof(addr));
		return;
	}

	Ms_AddServer(from);
}
Example #4
0
/*
 * @brief
 */
static void Ms_ParseMessage(struct sockaddr_in *from, char *data) {
	char *cmd = data;
	char *line = data;

	while (*line && *line != '\n')
		line++;

	*(line++) = '\0';
	cmd += 4;

	if (!strncasecmp(cmd, "ping", 4)) {
		Ms_AddServer(from);
	} else if (!strncasecmp(cmd, "heartbeat", 9) || !strncasecmp(cmd, "print", 5)) {
		Ms_Heartbeat(from);
	} else if (!strncasecmp(cmd, "ack", 3)) {
		Ms_Ack(from);
	} else if (!strncasecmp(cmd, "shutdown", 8)) {
		Ms_RemoveServer(from, NULL);
	} else if (!strncasecmp(cmd, "getservers", 10) || !strncasecmp(cmd, "y", 1)) {
		Ms_SendServersList(from);
	} else {
		Com_Print("Unknown command from %s: '%s'", inet_ntoa(from->sin_addr), cmd);
	}
}