Extra Systems

CYPHERNET

procesamiento de solicitudes por un servidor central


Después de identificar a los suscriptores N y M mediante huella digital, el servidor central Cypher Net de Extra Systems simplemente envía información entre ellos sin ninguna intervención en este proceso. El servidor no tiene claves privadas ni públicas de suscriptores. La negociación de las claves de sesión se produce, por tanto, exclusivamente entre los propios suscriptores, sin intervención ni participación de nuestro servidor central.

Las solicitudes de los clientes son procesadas por el servidor central en modo multiproceso utilizando el siguiente algoritmo:

typedef struct thread_data
{
	int thread_id;
	int thread_socket;
	PEERID client_id;
	PEERID server_id;
	int server_thread;
	char *buffer_to_send;
	int buf_size;
	int prolog_size;
	unsigned char client_mode;
} THREADDATA;

THREADDATA thread_pool[THREAD_POOL_SIZE];

void dispatch_call(THREADDATA *thread_item)
{
	char str_buf[STR_BUF_SIZE];
	int buf_size, my_socket;
	my_socket = thread_item->thread_socket;
	if (check_finger_print(thread_item)) {
		if (connect_server(thread_item)) {
			if (thread_item->client_mode == CLIENT_MODE_OUTPUT) {
				while (buf_size = socket_read_buffer(my_socket, str_buf, STR_BUF_SIZE)) {
					while (thread_pool[thread_item->server_thread].buffer_to_send) es_sleep(100);
					thread_pool[thread_item->server_thread].buf_size = buf_size;
					thread_pool[thread_item->server_thread].buffer_to_send = str_buf;
				}
			}
			if (thread_item->client_mode == CLIENT_MODE_INPUT) {
				while (1) {
					while (!thread_item->buffer_to_send) es_sleep(100);
					buf_size = thread_item->buf_size;
					if (socket_send_buffer(my_socket, thread_item->buffer_to_send, buf_size) != buf_size) break;
					thread_item->buffer_to_send = NULL;
				}
			}
		}
	}
	close_socket(my_socket);
	thread_item->thread_id = 0;
}

El contenido de esta página también está disponible en inglés, francés, alemán, portugués, ucraniano y ruso.


© Extra Systems, 2024 Extra Web Top