Beispiel #1
0
END_TEST

START_TEST(check_Ms_BlacklistServer) {
	file_t *f = Fs_OpenAppend("servers-blacklist");
	ck_assert_msg(f != NULL, "Failed to open servers-blacklist");

	const char *test = "192.168.0.*\n";
	int64_t len = Fs_Write(f, (void *) test, 1, strlen(test));

	ck_assert_msg((size_t) len == strlen(test), "Failed to write servers-blacklist");
	ck_assert_msg(Fs_Close(f), "Failed to close servers-blacklist");

	struct sockaddr_in addr;
	memset(&addr, 0, sizeof(addr));

	*(in_addr_t *) &addr.sin_addr = inet_addr("192.168.0.1");
	addr.sin_family = AF_INET;
	addr.sin_port = htons(PORT_SERVER);

	ck_assert_msg(Ms_BlacklistServer(&addr), "Missed %s", inet_ntoa(addr.sin_addr));

	*(in_addr_t *) &addr.sin_addr = inet_addr("127.0.0.1");

	ck_assert_msg(!Ms_BlacklistServer(&addr), "False positive for %s", inet_ntoa(addr.sin_addr));

}
Beispiel #2
0
/*
 * @brief Adds the specified server to the master.
 */
static void Ms_AddServer(struct sockaddr_in *from) {
	struct sockaddr_in addr;

	if (Ms_GetServer(from)) {
		Com_Print("Duplicate ping from %s\n", inet_ntoa(from->sin_addr));
		return;
	}

	if (Ms_BlacklistServer(from)) {
		Com_Print("Server %s has been blacklisted\n", inet_ntoa(from->sin_addr));
		return;
	}

	ms_server_t *server = Z_Malloc(sizeof(*server));

	server->ip = *from;
	server->last_heartbeat = time(0);
	server->port = from->sin_port;

	ms_servers = g_list_prepend(ms_servers, server);
	Com_Print("Server %s registered\n", inet_ntoa(from->sin_addr));

	// send an acknowledgment
	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));
	sendto(ms_sock, "\xFF\xFF\xFF\xFF" "ack", 7, 0, (struct sockaddr*) &addr, sizeof(addr));
}
Beispiel #3
0
/**
 * @brief Adds the specified server to the master.
 */
static void Ms_AddServer(struct sockaddr_in *from) {

	if (Ms_GetServer(from)) {
		Com_Warn("Duplicate ping from %s\n", atos(from));
		return;
	}

	if (Ms_BlacklistServer(from)) {
		Com_Warn("Server %s has been blacklisted\n", atos(from));
		return;
	}

	ms_server_t *server = Mem_Malloc(sizeof(ms_server_t));

	server->addr = *from;
	server->last_heartbeat = time(NULL);

	ms_servers = g_list_prepend(ms_servers, server);
	Com_Print("Server %s registered\n", stos(server));

	// send an acknowledgment
	sendto(ms_sock, "\xFF\xFF\xFF\xFF" "ack", 7, 0, (struct sockaddr *) from, sizeof(*from));
}