Die Prozedur get_fingerprint_items wird von check_finger_print aufgerufen, um aus dem Fingerabdruckobjekt, das der zentrale Extra Systems Cypher Net-Server von seinem Abonnenten empfängt, die für die weitere Arbeit erforderlichen Informationen zu extrahieren (Anrufer-ID client_id, Angerufene-ID server_id, Art der angeforderten Verbindung client_mode und Prologlänge). prolog_size). Ein Prolog ist eine Nachricht, die in der Prozedur get_common_key von einem Teilnehmer an einen anderen gesendet wird, um einen Sitzungsschlüssel auszuhandeln. Die Größe des Prologs beträgt PACKED_VALUE_LENTH + HASH_SIZE. Da jedoch in verschiedenen Distributionen unterschiedliche Hashing-Algorithmen verwendet werden können, sind diese Informationen im Fingerabdruck enthalten, sodass der Server weiß, welche Größe dieses Dienstpaket an ihn gesendet werden soll (während der Ausführung der connect_server-Prozedur).
#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]; }
Der Inhalt dieser Seite ist auch in Englisch, Französisch, Ukrainisch und Russisch verfügbar.
© Extra Systems, 2024 |