Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'extern/verse/dist/v_connect.c')
-rw-r--r--extern/verse/dist/v_connect.c490
1 files changed, 0 insertions, 490 deletions
diff --git a/extern/verse/dist/v_connect.c b/extern/verse/dist/v_connect.c
deleted file mode 100644
index 31be90e2d47..00000000000
--- a/extern/verse/dist/v_connect.c
+++ /dev/null
@@ -1,490 +0,0 @@
-/*
-**
-*/
-
-#include <ctype.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "v_cmd_gen.h"
-
-#if !defined V_GENERATE_FUNC_MODE
-
-#include "verse.h"
-#include "v_cmd_buf.h"
-#include "v_network_out_que.h"
-#include "v_network.h"
-#include "v_connection.h"
-#include "v_encryption.h"
-#include "v_util.h"
-
-extern void verse_send_packet_ack(uint32 packet_id);
-
-static void v_send_hidden_connect_contact(void) /* Stage 0: Clinets inital call to connect to host */
-{
- uint8 buf[V_ENCRYPTION_LOGIN_KEY_HALF_SIZE + 4 + 1 + 1], *key;
- unsigned int i, buffer_pos = 0;
- buffer_pos += vnp_raw_pack_uint32(&buf[buffer_pos], 0);/* Packing the packet id */
- buffer_pos += vnp_raw_pack_uint8(&buf[buffer_pos], 0);/* Packing the command */
- buffer_pos += vnp_raw_pack_uint8(&buf[buffer_pos], 0);/* Stage 0 */
-
- key = v_con_get_my_key();
- for(i = 0; i < V_ENCRYPTION_LOGIN_KEY_SIZE; i++)
- buffer_pos += vnp_raw_pack_uint8(&buf[buffer_pos], key[V_ENCRYPTION_LOGIN_PUBLIC_START + i]);/* Packing the command */
- for(i = 0; i < V_ENCRYPTION_LOGIN_KEY_SIZE; i++)
- buffer_pos += vnp_raw_pack_uint8(&buf[buffer_pos], key[V_ENCRYPTION_LOGIN_N_START + i]);/* Packing the command */
-
- v_n_send_data(v_con_get_network_address(), buf, buffer_pos);
-}
-
-static void v_send_hidden_connect_send_key(void) /* Stage 1: Hosts reply to any atempt to connect */
-{
- uint8 buf[V_ENCRYPTION_LOGIN_KEY_SIZE * 3 + 4 + 1 + 1 + 1 + 4 + 4], *host_id;
- unsigned int i, buffer_pos = 0, s, f;
- buffer_pos += vnp_raw_pack_uint32(&buf[buffer_pos], 0);/* Packing the packet id */
- buffer_pos += vnp_raw_pack_uint8(&buf[buffer_pos], 0);/* Packing the command */
- buffer_pos += vnp_raw_pack_uint8(&buf[buffer_pos], 1);/* Stage 1 */
- buffer_pos += vnp_raw_pack_uint8(&buf[buffer_pos], V_RELEASE_NUMBER);/* version */
- v_n_get_current_time(&s, &f);
- buffer_pos += vnp_raw_pack_uint32(&buf[buffer_pos], s);/* time, seconds */
- buffer_pos += vnp_raw_pack_uint32(&buf[buffer_pos], f);/* time, fraction */
- host_id = v_con_get_host_id();
- for(i = 0; i < V_ENCRYPTION_LOGIN_KEY_SIZE; i++)
- buffer_pos += vnp_raw_pack_uint8(&buf[buffer_pos], host_id[V_ENCRYPTION_LOGIN_PUBLIC_START + i]);
- for(i = 0; i < V_ENCRYPTION_LOGIN_KEY_SIZE; i++)
- buffer_pos += vnp_raw_pack_uint8(&buf[buffer_pos], host_id[V_ENCRYPTION_LOGIN_N_START + i]);
-
- v_n_send_data(v_con_get_network_address(), buf, buffer_pos);
-}
-
-static void v_send_hidden_connect_login(void) /* Stage 2: clients sends encrypted name and password */
-{
- uint8 buf[1500], *key, name_pass[V_ENCRYPTION_LOGIN_KEY_SIZE], encrypted_key[V_ENCRYPTION_LOGIN_KEY_SIZE];
- const char *name, *pass;
- unsigned int buffer_pos = 0, i;
-
- buffer_pos += vnp_raw_pack_uint32(&buf[buffer_pos], 1);/* Packing the packet id */
- buffer_pos += vnp_raw_pack_uint8(&buf[buffer_pos], 0);/* Packing the command */
- buffer_pos += vnp_raw_pack_uint8(&buf[buffer_pos], 2);/* Stage 2 */
- name = v_con_get_name();
- /* Pad data area with randomness. */
- for(i = 0; i < sizeof name_pass; i++)
- name_pass[i] = rand() >> 13;
- v_strlcpy(name_pass, name, V_ENCRYPTION_LOGIN_KEY_SIZE / 2);
- pass = v_con_get_pass();
- v_strlcpy(name_pass + V_ENCRYPTION_LOGIN_KEY_SIZE / 2, pass, V_ENCRYPTION_LOGIN_KEY_SIZE / 2);
- /* Make sure last (MSB) byte is clear, to guarantee that data < key for RSA math. */
- name_pass[sizeof name_pass - 1] = 0;
- key = v_con_get_other_key();
- v_e_connect_encrypt(encrypted_key, name_pass, &key[V_ENCRYPTION_LOGIN_PUBLIC_START], &key[V_ENCRYPTION_LOGIN_N_START]);
-
- for(i = 0; i < V_ENCRYPTION_LOGIN_KEY_SIZE; i++)
- buffer_pos += vnp_raw_pack_uint8(&buf[buffer_pos], encrypted_key[i]);
- v_n_send_data(v_con_get_network_address(), buf, buffer_pos);
-}
-
-static void v_send_hidden_connect_accept(void) /* Host accepts Clients connectionatempt and sends over data encryption key */
-{
- uint8 buf[1500], *client_key, encrypted[V_ENCRYPTION_DATA_KEY_SIZE];
- unsigned int i, buffer_pos = 0;
-
- buffer_pos += vnp_raw_pack_uint32(&buf[buffer_pos], 1);/* Packing the packet id */
- buffer_pos += vnp_raw_pack_uint8(&buf[buffer_pos], 1);/* Packing the command */
- buffer_pos += vnp_raw_pack_uint32(&buf[buffer_pos], verse_session_get_avatar());
- client_key = v_con_get_other_key();
- v_e_connect_encrypt(encrypted, v_con_get_data_key(), &client_key[V_ENCRYPTION_LOGIN_PUBLIC_START], &client_key[V_ENCRYPTION_LOGIN_N_START]);
- for(i = 0; i < V_ENCRYPTION_DATA_KEY_SIZE; i++)
- buffer_pos += vnp_raw_pack_uint8(&buf[buffer_pos], encrypted[i]);
- v_n_send_data(v_con_get_network_address(), buf, buffer_pos);
-}
-
-static void v_send_hidden_connect_terminate(VNetworkAddress *address, unsigned int packet_id, const char *bye) /* Host accepts Clients connectionatempt and sends over data encryption key */
-{
- uint8 buf[1500];
- unsigned int buffer_pos = 0;
- buffer_pos += vnp_raw_pack_uint32(&buf[buffer_pos], packet_id);/* Packing the packet id */
- buffer_pos += vnp_raw_pack_uint8(&buf[buffer_pos], 2);/* Packing the command */
- buffer_pos += vnp_raw_pack_string(&buf[buffer_pos], bye, 512); /* pack message */
- v_e_data_encrypt_command(buf, sizeof (uint32), buf + sizeof (uint32), buffer_pos, v_con_get_data_key());
- v_n_send_data(address, buf, buffer_pos);
-}
-
-VSession verse_send_connect(const char *name, const char *pass, const char *address, const uint8 *expected_key)
-{
- uint8 *my_key, *key = NULL;
- unsigned int i;
- VNetworkAddress a;
- VSession *session;
- if(v_n_set_network_address(&a, address))
- {
-#if defined(V_PRINT_SEND_COMMANDS)
- char ip_string[32];
-#endif
- session = v_con_connect(a.ip, a.port, V_CS_CONTACT);
-#if defined(V_PRINT_SEND_COMMANDS)
- v_n_get_address_string(&a, ip_string);
- printf("send: %p = verse_send_connect(name = %s, pass = %s, address = %s (%s), expected_key = %p)\n", session, name, pass, address, ip_string, expected_key);
-#endif
- v_con_set_name_pass(name, pass);
- if(expected_key != NULL)
- {
- key = malloc((sizeof *key) * V_ENCRYPTION_LOGIN_KEY_HALF_SIZE);
- for(i = 0; i < V_ENCRYPTION_LOGIN_KEY_HALF_SIZE; i++)
- key[i] = expected_key[i];
- *v_con_get_expected_key() = key;
- }
- my_key = v_con_get_my_key();
- v_e_connect_create_key(&my_key[V_ENCRYPTION_LOGIN_PRIVATE_START], &my_key[V_ENCRYPTION_LOGIN_PUBLIC_START], &my_key[V_ENCRYPTION_LOGIN_N_START]);
- v_send_hidden_connect_contact();
- v_con_inqueue_timer_update(); /* Reset timer in connection's in queue, above takes a while. */
- return session;
- }
- else
- {
-#if defined(V_PRINT_SEND_COMMANDS)
- printf("send: NULL = verse_send_connect(name = %s, pass = %s, address = %s (Unressolved DNS), key = %p);\n", name, pass, address, key);
-#endif
- return NULL;
- }
-}
-
-void v_update_connection_pending(boolean resend)
-{
- VSession (* func_connect)(void *user_data, const char *name, const char *pass, const char *address, const uint8 *key) = NULL;
- VSession (* func_connect_accept)(void *user_data, VNodeID avatar, char *address, uint8 *host_id);
- void (* func_connect_terminate)(void *user_data, char *address, const char *bye);
- char address_string[32];
-
- switch(v_con_get_connect_stage())
- {
- case V_CS_CONTACT : /* client tries to contact host */
- if(resend)
- v_send_hidden_connect_contact();
- break;
- case V_CS_CONTACTED : /* Host replies with challange */
- if(resend)
- v_send_hidden_connect_send_key();
- break;
- case V_CS_PENDING_ACCEPT : /* Client sends login */
- if(resend)
- v_send_hidden_connect_login();
- break;
- case V_CS_PENDING_HOST_CALLBACK : /* Host got login waits for accept connect callback */
- v_con_set_connect_stage(V_CS_PENDING_DECISION);
- func_connect = v_fs_get_user_func(0);
- v_n_get_address_string(v_con_get_network_address(), address_string);
-#if defined(V_PRINT_RECEIVE_COMMANDS)
- printf("receive: verse_send_connect(address = %s, name = %s, pass = %s, key = NULL); callback = %p\n", address_string, v_con_get_name(), v_con_get_pass(), func_connect);
-#endif
- if(func_connect != 0)
- func_connect(v_fs_get_user_data(0), v_con_get_name(), v_con_get_pass(), address_string, NULL);
- break;
- case V_CS_PENDING_CLIENT_CALLBACK_ACCEPT : /* Host got login waits for accept connect callback */
- v_con_set_connect_stage(V_CS_CONNECTED);
- func_connect_accept = v_fs_get_user_func(1);
- v_n_get_address_string(v_con_get_network_address(), address_string);
-#if defined(V_PRINT_RECEIVE_COMMANDS)
- printf("receive: func_connect_accept(avatar = %u, address = %s, name = %s, pass = %s, key = NULL); callback = %p\n",
- verse_session_get_avatar(), address_string, v_con_get_name(), v_con_get_pass(), func_connect);
-#endif
- if(func_connect_accept != 0)
- func_connect_accept(v_fs_get_user_data(1), verse_session_get_avatar(), address_string, NULL);
- break;
- case V_CS_PENDING_CLIENT_CALLBACK_TERMINATE : /* Host got login waits for accept connect callback */
- v_con_set_connect_stage(V_CS_CONNECTED);
- func_connect_terminate = v_fs_get_user_func(2);
- v_n_get_address_string(v_con_get_network_address(), address_string);
-#if defined(V_PRINT_RECEIVE_COMMANDS)
- printf("receive: func_connect_terminate(address = %s, bye = %s); callback = %p\n", address_string, "no message", func_connect);
-#endif
- if(func_connect_terminate != 0)
- func_connect_terminate(v_fs_get_user_data(2), address_string, "no message");
- break;
- default:
- ;
- }
-}
-
-void v_unpack_connection(const char *buf, unsigned int buffer_length) /* un packing all stages of connect command */
-{
- unsigned int buffer_pos, i, pack_id;
- uint32 seconds, fractions, pre;
- uint8 /*key[V_ENCRYPTION_LOGIN_KEY_SIZE], */stage, cmd_id, version;
-
- if(buffer_length < 5)
- return;
-
- buffer_pos = vnp_raw_unpack_uint32(buf, &pack_id);
- buffer_pos += vnp_raw_unpack_uint8(&buf[buffer_pos], &cmd_id);
- pre = v_con_get_connect_stage();
- if(cmd_id == 0)
- {
- buffer_pos += vnp_raw_unpack_uint8(&buf[buffer_pos], &stage);
- printf(" Handling connection, stage %u\n", stage);
- if(stage == V_CS_IDLE && V_CS_IDLE == v_con_get_connect_stage()) /* reseved by host */
- {
- uint8 *other_key, *my_key;
-
- verse_send_packet_ack(pack_id);
- my_key = v_con_get_my_key();
- v_con_set_data_key(v_e_data_create_key());
- other_key = v_con_get_other_key();
- for(i = 0; i < V_ENCRYPTION_LOGIN_KEY_SIZE; i++)
- buffer_pos += vnp_raw_unpack_uint8(&buf[buffer_pos], &other_key[V_ENCRYPTION_LOGIN_PUBLIC_START + i]);/* Packing the command */
- for(i = 0; i < V_ENCRYPTION_LOGIN_KEY_SIZE; i++)
- buffer_pos += vnp_raw_unpack_uint8(&buf[buffer_pos], &other_key[V_ENCRYPTION_LOGIN_N_START + i]);/* Packing the command */
- v_con_set_connect_stage(V_CS_CONTACTED);
- v_send_hidden_connect_send_key();
- return;
- }
- if(stage == V_CS_CONTACT && V_CS_CONTACT == v_con_get_connect_stage())
- {
- uint8 *other_key; /* *host_id, *my_key, a[V_ENCRYPTION_LOGIN_KEY_SIZE], b[V_ENCRYPTION_LOGIN_KEY_SIZE];*/
- verse_send_packet_ack(pack_id);
- buffer_pos += vnp_raw_unpack_uint8(&buf[buffer_pos], &version);
- if(version != V_RELEASE_NUMBER)
- {
- /* char error_message[128];
- func_connect_deny = v_fs_get_user_func(2);
- #if defined(V_PRINT_RECEIVE_COMMANDS)
- printf("receive: verse_send_connect_deny(Host is running version %u you are running version %u); callback = %p\n", (uint32)version, (uint32)V_RELEASE_NUMBER func_connect_deny);
- #endif
- if(func_connect_deny != NULL)
- {
- sprintf(error_message, "Host is running version %u you are running version %u", (uint32)version, (uint32)V_RELEASE_NUMBER);
- func_connect_deny(v_fs_get_user_data(2), error_message);
- }*/
- return;
- }
-
- buffer_pos += vnp_raw_unpack_uint32(&buf[buffer_pos], &seconds);
- buffer_pos += vnp_raw_unpack_uint32(&buf[buffer_pos], &fractions);
- v_con_set_time(seconds, fractions);
-
- other_key = v_con_get_other_key();
- for(i = 0; i < V_ENCRYPTION_LOGIN_KEY_SIZE; i++)
- buffer_pos += vnp_raw_unpack_uint8(&buf[buffer_pos], &other_key[V_ENCRYPTION_LOGIN_PUBLIC_START + i]);
- for(i = 0; i < V_ENCRYPTION_DATA_KEY_SIZE; i++)
- buffer_pos += vnp_raw_unpack_uint8(&buf[buffer_pos], &other_key[V_ENCRYPTION_LOGIN_N_START + i]);
-
- v_con_set_connect_stage(V_CS_PENDING_ACCEPT);
- v_send_hidden_connect_login();
- return;
- }
-#if 0
- for(i = 0; i < V_ENCRYPTION_LOGIN_KEY_HALF_SIZE && encrypted_key[i] == 0; i++);
- if(i < 0)
- {
- other_key = v_con_get_my_key();
- v_e_connect_encrypt(decrypted_key, encrypted_key, &other_key[V_ENCRYPTION_LOGIN_PUBLIC_START + i], &other_key[V_ENCRYPTION_LOGIN_N_START + i]);
- for(i = 0; i < V_ENCRYPTION_LOGIN_KEY_HALF_SIZE && my_key[V_ENCRYPTION_LOGIN_PUBLIC_START + i] == decrypted_key[i]; i++);
- if(i < 0) /* Host is not who it appers top be */
- {
- func_connect_deny = v_fs_get_user_func(2);
-#if defined(V_PRINT_RECEIVE_COMMANDS)
- printf("receive: verse_send_connect_deny(Host failed identity check); callback = %p\n", func_connect_deny);
-#endif
- if(func_connect_deny != NULL)
- func_connect_deny(v_fs_get_user_data(2), "Host failed identity check");
- return;
- }
- }
-#endif
- if(stage == V_CS_CONTACTED && V_CS_CONTACTED == v_con_get_connect_stage()) /* reseved by host */
- {
- char *host_id, unpack[V_ENCRYPTION_LOGIN_KEY_SIZE], data[V_ENCRYPTION_LOGIN_KEY_SIZE];
- VNetworkAddress *address;
- verse_send_packet_ack(pack_id);
- address = v_con_get_network_address();
- for(i = 0; i < V_ENCRYPTION_LOGIN_KEY_SIZE; i++)
- buffer_pos += vnp_raw_unpack_uint8(&buf[buffer_pos], &data[i]);
- host_id = v_con_get_host_id();
- v_e_connect_encrypt(unpack, data, &host_id[V_ENCRYPTION_LOGIN_PRIVATE_START], &host_id[V_ENCRYPTION_LOGIN_N_START]);
- v_con_set_name_pass(unpack, &unpack[V_ENCRYPTION_LOGIN_KEY_SIZE / 2]);
- v_con_set_connect_stage(V_CS_PENDING_HOST_CALLBACK);
- return;
- }
- }
- if(cmd_id == 1 && V_CS_PENDING_ACCEPT == v_con_get_connect_stage()) /* reseved by client */
- {
- uint8 *my_key, key[V_ENCRYPTION_DATA_KEY_SIZE], decrypted[V_ENCRYPTION_DATA_KEY_SIZE];
- uint32 avatar;
- verse_send_packet_ack(pack_id);
- buffer_pos += vnp_raw_unpack_uint32(&buf[buffer_pos], &avatar);
- v_con_set_avatar(avatar);
- for(i = 0; i < V_ENCRYPTION_DATA_KEY_SIZE; i++)
- buffer_pos += vnp_raw_unpack_uint8(&buf[buffer_pos], &key[i]);
- my_key = v_con_get_my_key();
- v_e_connect_encrypt(decrypted, key, &my_key[V_ENCRYPTION_LOGIN_PRIVATE_START], &my_key[V_ENCRYPTION_LOGIN_N_START]);
- v_con_set_data_key(decrypted);
- v_con_set_connect_stage(V_CS_PENDING_CLIENT_CALLBACK_ACCEPT);
- v_send_hidden_connect_send_key();
- return;
- }
- if(cmd_id == 2 && V_CS_PENDING_ACCEPT == v_con_get_connect_stage()) /* reseved by client */
- {
- verse_send_packet_ack(pack_id);
- /* buffer_pos += vnp_raw_unpack_string(&buf[buffer_pos], name, 512, buffer_length - buffer_pos);
- */ v_con_set_connect_stage(V_CS_PENDING_CLIENT_CALLBACK_TERMINATE);
- return;
- }
-}
-
-VSession verse_send_connect_accept(VNodeID avatar, const char *address, uint8 *host_id)
-{
- VNetworkAddress a;
-#if defined(V_PRINT_SEND_COMMANDS)
- printf("send: verse_send_connect_accept(avatar = %u, address = %s, host_id = NULL);\n", avatar, address);
-#endif
-
- if(!v_n_set_network_address(&a, address))
- return NULL;
- if(v_co_switch_connection(a.ip, a.port))
- {
- if(v_con_get_connect_stage() != V_CS_PENDING_DECISION)
- return NULL;
- v_con_set_avatar(avatar);
- v_con_set_connect_stage(V_CS_CONNECTED);
- v_send_hidden_connect_accept();
- return v_con_get_network_queue();
- }
- return NULL;
-}
-
-void v_callback_connect_terminate(const char *bye)
-{
- void (* func_connect_terminate)(void *user_data, char *address, const char *bye);
- char address_string[32];
-
- printf("terminate (%s)\n", bye);
- func_connect_terminate = v_fs_get_user_func(2);
- v_n_get_address_string(v_con_get_network_address(), address_string);
-#if defined(V_PRINT_RECEIVE_COMMANDS)
- printf("receive: verse_send_connect_terminate(address = %s, bye = %s); callback = %p\n", address_string, bye, func_connect_terminate);
-#endif
- if(func_connect_terminate != 0)
- func_connect_terminate(v_fs_get_user_data(2), address_string, bye);
-}
-
-void verse_send_connect_terminate(const char *address, const char *bye)
-{
- VNetworkAddress a;
-#if defined(V_PRINT_RECEIVE_COMMANDS)
- printf("send: verse_send_connect_terminate(address = %s, bye = %s);\n", address, bye);
-#endif
-
- if(address == NULL)
- v_send_hidden_connect_terminate(v_con_get_network_address(), v_noq_get_next_out_packet_id(v_con_get_network_queue()), bye);
- else if(!v_n_set_network_address(&a, address))
- return;
- else if(v_co_switch_connection(a.ip, a.port))
- v_send_hidden_connect_terminate(v_con_get_network_address(), v_noq_get_next_out_packet_id(v_con_get_network_queue()), bye);
-
- if(v_con_get_connect_stage() != V_CS_PENDING_DECISION)
- verse_session_destroy(v_con_get_network_queue());
-}
-
-void verse_send_ping(const char *address, const char *message)
-{
- VNetworkAddress a;
- if(v_n_set_network_address(&a, address))
- {
- unsigned int buffer_pos = 0;
- uint8 buf[1500];
- buffer_pos += vnp_raw_pack_uint32(&buf[buffer_pos], 0);/* Packing the Packet id */
- buffer_pos += vnp_raw_pack_uint8(&buf[buffer_pos], 5);/* Packing the command */
-#if defined V_PRINT_SEND_COMMANDS
- printf("send: verse_send_ping(address = %s text = %s);\n", address, message);
-#endif
- buffer_pos += vnp_raw_pack_string(&buf[buffer_pos], message, 1400);
- v_n_send_data(&a, buf, buffer_pos);
- }
-#if defined V_PRINT_SEND_COMMANDS
- else
- printf("send: verse_send_ping(address = %s (FAULTY) message = %s);\n", address, message);
-#endif
-}
-
-unsigned int v_unpack_ping(const char *buf, size_t buffer_length)
-{
- unsigned int buffer_pos = 0;
- void (* func_ping)(void *user_data, const char *address, const char *text);
- char address[64];
- char message[1400];
-
- func_ping = v_fs_get_user_func(5);
- v_n_get_address_string(v_con_get_network_address(), address);
- buffer_pos += vnp_raw_unpack_string(&buf[buffer_pos], message, 1400, buffer_length - buffer_pos);
-#if defined V_PRINT_RECEIVE_COMMANDS
- printf("receive: verse_send_ping(address = %s message = %s ); callback = %p\n", address, message, v_fs_get_user_func(5));
-#endif
- if(func_ping != NULL)
- func_ping(v_fs_get_user_data(5), address, message);
- return buffer_pos;
-}
-
-typedef struct {
- uint32 ip;
- uint16 port;
- char message[1400];
- void *next;
-} VPingCommand;
-
-static VPingCommand *v_ping_commands = NULL;
-
-boolean v_connect_unpack_ping(const char *buf, size_t buffer_length, uint32 ip, uint16 port)
-{
- if(buffer_length > 5)
- {
- unsigned int buffer_pos = 0;
- uint8 cmd_id;
- uint32 pack_id;
-
- buffer_pos = vnp_raw_unpack_uint32(&buf[buffer_pos], &pack_id);
- buffer_pos += vnp_raw_unpack_uint8(&buf[buffer_pos], &cmd_id);
- if(cmd_id == 5)
- {
- if(NULL != v_fs_get_user_func(5))
- {
- VPingCommand *pc;
-
- pc = malloc(sizeof *pc);
- pc->ip = ip;
- pc->port = port;
- vnp_raw_unpack_string(&buf[buffer_pos], pc->message,
- sizeof pc->message, buffer_length - buffer_pos);
- pc->next = v_ping_commands;
- v_ping_commands = pc;
- }
- return TRUE;
- }
- }
- return FALSE;
-}
-
-void v_ping_update(void)
-{
- VPingCommand *cp;
- void (* func_ping)(void *user_data, const char *address, const char *text);
- VNetworkAddress a;
- char address[64];
- func_ping = v_fs_get_user_func(5);
-
- while(v_ping_commands != NULL)
- {
- cp = v_ping_commands->next;
- a.ip = v_ping_commands->ip;
- a.port = v_ping_commands->port;
- v_n_get_address_string(&a, address);
-#if defined V_PRINT_RECEIVE_COMMANDS
- printf("receive: verse_send_ping(address = %s message = %s ); callback = %p\n", address, v_ping_commands->message, v_fs_get_user_func(5));
-#endif
- if(func_ping != NULL)
- func_ping(v_fs_get_user_data(5), address, v_ping_commands->message);
- free(v_ping_commands);
- v_ping_commands = cp;
- }
-}
-
-#endif