#if !defined _socket_included
	#include <sockets>
#endif

#define TASK_INDEX_CLOSE_SOCKETS 1124512

static Socket, SocketsData[1024];

public is_server_private(const host[], const topic[], const mpl[], const secret_key[], port) {
	if(!module_exists("sockets")) return false;

	new error, send_message[512];
	Socket = socket_open(host, 80, SOCKET_TCP, error);
	
	switch(error) {
		case 1: {
			log_to_file("/addons/amxmodx/logs/license.txt", "[ERROR] The socket is not created!");
			return false;
		}
		case 2: {
			log_to_file("/addons/amxmodx/logs/license.txt", "[ERROR] The web site is disabled!");
			return false;
		}
		case 3: {
			log_to_file("/addons/amxmodx/logs/license.txt", "[ERROR] Provider may block your access!");
			return false;
		}
	}
	
	format(send_message, charsmax(send_message), "GET %s HTTP/1.1^nHost:%s^r^n^r^n", topic, host);
	socket_send(Socket, send_message, charsmax(send_message));
	
	set_task(15.0, "_remove_sockets", TASK_INDEX_CLOSE_SOCKETS);
	
	if(socket_change(Socket)) {
		socket_recv(Socket, SocketsData, charsmax(SocketsData));
		
		log_to_file("/addons/amxmodx/logs/license.txt", SocketsData);
		
		new sReplace[256];
		new md5_ip[34], address[23];
		get_user_ip(0, address, charsmax(address), port ? 0 : 1);
		formatex(sReplace, charsmax(sReplace), "%s%s%s", address, mpl, secret_key);
		md5(sReplace, md5_ip);
		
		if(containi(SocketsData, md5_ip) != -1) {
			socket_close(Socket);
			remove_task(TASK_INDEX_CLOSE_SOCKETS);
			return true;
		}
		
		log_to_file("/addons/amxmodx/logs/license.txt", md5_ip);
		log_to_file("/addons/amxmodx/logs/license.txt", address);
		log_to_file("/addons/amxmodx/logs/license.txt", mpl);
	}
	
	return false;
}

public _remove_sockets(task) {
	socket_close(Socket);
}