X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=blobdiff_plain;f=apps%2Fsilcd%2Fserver_util.c;h=839599d2cfde0b1f166e504c4c4c5d3014319a6e;hp=dead873a6d250037bff3b3c9a91a585e9a4acc0a;hb=ecb19b3983b3e74bc4aaa82277abd125c53c3623;hpb=382d15d447b7a95390decfa783836ae4fe255b3d diff --git a/apps/silcd/server_util.c b/apps/silcd/server_util.c index dead873a..839599d2 100644 --- a/apps/silcd/server_util.c +++ b/apps/silcd/server_util.c @@ -1754,7 +1754,7 @@ bool silc_server_inviteban_match(SilcServer server, SilcHashTable list, while (silc_hash_table_get(&htl, (void **)&t, (void **)&entry)) { if (type == t) { if (type == 1) { - if (silc_string_match((char *)entry, tmp)) { + if (silc_string_match(entry->data, tmp)) { ret = TRUE; break; } @@ -1772,12 +1772,6 @@ bool silc_server_inviteban_match(SilcServer server, SilcHashTable list, return ret; } -static void silc_server_inviteban_dummy_dest(void *key, void *context, - void *user_context) -{ - /* Nothing */ -} - /* Process invite or ban information */ void silc_server_inviteban_process(SilcServer server, SilcHashTable list, @@ -1800,24 +1794,16 @@ void silc_server_inviteban_process(SilcServer server, SilcHashTable list, if (type == 1) { /* Invite string. Get the old invite string from hash table and append this at the end of the existing one. */ - char *string = NULL; - silc_hash_table_find(list, (void *)1, - NULL, (void **)&string); - silc_hash_table_del_ext(list, (void *)1, NULL, NULL, NULL, NULL, - silc_server_inviteban_dummy_dest, NULL); - if (!string) - string = silc_calloc(len + 2, sizeof(*string)); - else - string = silc_realloc(string, sizeof(*string) * - (strlen(string) + len + 2)); - memset(string + strlen(string), 0, len + 2); + if (!silc_hash_table_find(list, (void *)1, NULL, (void **)&tmp2)) { + tmp2 = silc_calloc(1, sizeof(*tmp2)); + silc_hash_table_add(list, (void *)1, tmp2); + } if (tmp[len - 1] == ',') tmp[len - 1] = '\0'; - strncat(string, tmp, len); - strncat(string, ",", 1); - - /* Add new invite string to invite list */ - silc_hash_table_add(list, (void *)1, string); + if (len) { + silc_buffer_strformat(tmp2, tmp, SILC_STR_END); + silc_buffer_strformat(tmp2, ",", SILC_STR_END); + } } else if (type == 2) { /* Public key. Check first if the public key is already on the @@ -1875,25 +1861,23 @@ void silc_server_inviteban_process(SilcServer server, SilcHashTable list, the requested string. */ char *string = NULL, *start, *end, *n; - if (silc_hash_table_find(list, (void *)1, NULL, (void **)&string)) { - if (!strncmp(string, tmp, strlen(string) - 1)) { + if (silc_hash_table_find(list, (void *)1, NULL, (void **)&tmp2)) { + string = tmp2->head; + if (tmp2->truelen && !strncmp(string, tmp, tmp2->truelen - 1)) { + /* Delete entire string */ silc_hash_table_del(list, (void *)1); - string = NULL; - } else { + } else if (tmp2->truelen) { + /* Delete part of the string */ start = strstr(string, tmp); if (start && strlen(start) >= len) { end = start + len; n = silc_calloc(strlen(string) - len, sizeof(*n)); strncat(n, string, start - string); strncat(n, end + 1, ((string + strlen(string)) - end) - 1); - silc_hash_table_del(list, (void *)1); - string = n; + silc_free(tmp2->head); + silc_buffer_set(tmp2, n, strlen(n)); } } - - /* Add new invite string to invite list */ - if (string) - silc_hash_table_add(list, (void *)1, string); } } else if (type == 2) { @@ -1928,22 +1912,21 @@ void silc_server_inviteban_process(SilcServer server, SilcHashTable list, } } -/* Destructor for invite or ban list entrys */ +/* Destructor for invite and ban list entrys */ void silc_server_inviteban_destruct(void *key, void *context, void *user_context) { - switch ((SilcUInt32)key) { - case 1: - /* Invite string */ - silc_free(context); - break; - case 2: - case 3: - /* Public key/Channel ID SilcBuffer */ - silc_buffer_free(context); - break; - default: - break; - } + silc_buffer_free(context); +} + +/* Creates connections accoring to configuration. */ + +void silc_server_create_connections(SilcServer server) +{ + silc_schedule_task_del_by_callback(server->schedule, + silc_server_connect_to_router); + silc_schedule_task_add(server->schedule, 0, + silc_server_connect_to_router, server, 0, 1, + SILC_TASK_TIMEOUT, SILC_TASK_PRI_NORMAL); }