O procedimento get_fingerprint_items é chamado a partir de check_finger_print para extrair do objeto de impressão digital recebido pelo servidor central Extra Systems Cypher Net do seu subscritor a informação necessária para o trabalho posterior (caller ID client_id, callee ID server_id, tipo de ligação solicitada client_mode e comprimento do prólogo tamanho_prolog). Um prólogo é uma mensagem enviada de um subscritor para outro no procedimento get_common_key para negociar uma chave de sessão. O tamanho do prólogo é PACKED_VALUE_LENTH + HASH_SIZE, mas como podem ser utilizados diferentes algoritmos de hash em diferentes distribuições, esta informação é incluída na impressão digital para que o servidor saiba qual o tamanho deste pacote de serviço que lhe deve ser enviado ( durante a execução do procedimento connect_server).
#define FINGERPRINT_CLIENT_MODE_BYTE 2 typedef struct finger_print { unsigned char mixed_item[ITEM_SIZE * 2 * 3]; unsigned char mixed_hash[HARD_HASH_SIZE]; } FINGERPRINT; void get_fingerprint_items(PEERID *client_id, PEERID *server_id, char *client_mode, int *prolog_size, FINGERPRINT * fingerprint) { int i,j; unsigned char *client; unsigned char *server; unsigned char *prolog; client = (unsigned char *) client_id; server = (unsigned char *) server_id; prolog = (unsigned char *) prolog_size; *client_mode = fingerprint->mixed_item[FINGERPRINT_CLIENT_MODE_BYTE]; for (i = 0; i < ITEM_SIZE; i++) client[i] = fingerprint->mixed_item[i * 2 + 1]; for (j = 0; j < ITEM_SIZE; i++, j++) server[j] = fingerprint->mixed_item[i * 2 + 1]; for (j = 0; j < ITEM_SIZE; i++, j++) prolog[j] = fingerprint->mixed_item[i * 2 + 1]; }
O conteúdo desta página está também disponível em inglês, francês, alemão, espanhol, ucraniano e russo.
© Extra Systems, 2024 |