Author: Pekka Riikonen <priikone@silcnet.org>
- Copyright (C) 1997 - 2002 Pekka Riikonen
+ Copyright (C) 1997 - 2007 Pekka Riikonen
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
}
(*new_id)->ip.data_len = silc_net_is_ip4(ip) ? 4 : 16;
- (*new_id)->port = htons(port);
- (*new_id)->rnd = silc_rng_get_rn16(rng);
+ (*new_id)->port = SILC_SWAB_16(port);
+ (*new_id)->rnd = 0xff;
SILC_LOG_DEBUG(("New ID (%s)", silc_id_render(*new_id, SILC_ID_SERVER)));
}
caller must recall the function with different nickname. If this returns
TRUE the new ID was created successfully. */
-bool silc_id_create_client_id(SilcServer server,
- SilcServerID *server_id, SilcRng rng,
- SilcHash md5hash, char *nickname,
- SilcClientID **new_id)
+SilcBool silc_id_create_client_id(SilcServer server,
+ SilcServerID *server_id, SilcRng rng,
+ SilcHash md5hash,
+ unsigned char *nickname, SilcUInt32 nick_len,
+ SilcClientID **new_id)
{
unsigned char hash[16];
- bool finding = FALSE;
+ SilcBool finding = FALSE;
SILC_LOG_DEBUG(("Creating new Client ID"));
*new_id = silc_calloc(1, sizeof(**new_id));
- /* Create hash of the nickanem */
- silc_hash_make(md5hash, nickname, strlen(nickname), hash);
+ /* Create hash of the nickname (it's already checked as valid identifier
+ string). */
+ silc_hash_make(md5hash, nickname, nick_len, hash);
/* Create the ID */
memcpy((*new_id)->ip.data, server_id->ip.data, server_id->ip.data_len);
/* Assure that the ID does not exist already */
while (1) {
- if (!silc_idlist_find_client_by_id(server->local_list,
+ if (!silc_idlist_find_client_by_id(server->local_list,
*new_id, FALSE, NULL))
- if (!silc_idlist_find_client_by_id(server->global_list,
+ if (!silc_idlist_find_client_by_id(server->global_list,
*new_id, FALSE, NULL))
break;
/* Creates Channel ID */
-bool silc_id_create_channel_id(SilcServer server,
- SilcServerID *router_id, SilcRng rng,
- SilcChannelID **new_id)
+SilcBool silc_id_create_channel_id(SilcServer server,
+ SilcServerID *router_id, SilcRng rng,
+ SilcChannelID **new_id)
{
- bool finding = TRUE;
+ SilcBool finding = TRUE;
SILC_LOG_DEBUG(("Creating new Channel ID"));
/* Assure that the ID does not exist already */
while (1) {
- if (!silc_idlist_find_channel_by_id(server->local_list,
+ if (!silc_idlist_find_channel_by_id(server->local_list,
*new_id, NULL))
break;
(*new_id)->rnd++;
-
+
if (finding && (*new_id)->rnd == 0)
return FALSE;
-
+
if (!finding) {
(*new_id)->rnd = 0;
finding = TRUE;
/* Checks whether the `server_id' is valid. It must be based to the
IP address provided in the `remote' socket connection. */
-bool silc_id_is_valid_server_id(SilcServer server,
- SilcServerID *server_id,
- SilcSocketConnection remote)
+SilcBool silc_id_is_valid_server_id(SilcServer server,
+ SilcServerID *server_id,
+ SilcPacketStream remote)
{
unsigned char ip[16];
+ const char *remote_ip;
+ SilcStream stream = silc_packet_stream_get_stream(remote);
- if (!silc_net_addr2bin(remote->ip, ip, sizeof(ip)))
+ silc_socket_stream_get_info(stream, NULL, NULL, &remote_ip, NULL);
+ if (!silc_net_addr2bin(remote_ip, ip, sizeof(ip)))
return FALSE;
- if (silc_net_is_ip4(remote->ip)) {
+ if (silc_net_is_ip4(remote_ip)) {
if (!memcmp(server_id->ip.data, ip, 4))
return TRUE;
} else {