X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcclient%2Fidlist.c;h=1bd0230943fa9ea17cb3ecd7583437ff71e34170;hb=33fde1853daddd7f34565507cb96652f0cec4ee2;hp=e361a5027c39226a6357ddc12873c97abe9790b4;hpb=77599da05bae9b355f600d63f9be8c285ff0ea4d;p=silc.git diff --git a/lib/silcclient/idlist.c b/lib/silcclient/idlist.c index e361a502..1bd02309 100644 --- a/lib/silcclient/idlist.c +++ b/lib/silcclient/idlist.c @@ -308,7 +308,7 @@ SILC_CLIENT_CMD_FUNC(get_clients_list_callback) /* Get Client ID */ SILC_GET16_MSB(idp_len, client_id_list->data + 2); idp_len += 4; - client_id = silc_id_payload_parse_id(client_id_list->data, idp_len); + client_id = silc_id_payload_parse_id(client_id_list->data, idp_len, NULL); if (!client_id) { silc_buffer_pull(client_id_list, idp_len); continue; @@ -381,7 +381,7 @@ void silc_client_get_clients_by_list(SilcClient client, /* Get Client ID */ SILC_GET16_MSB(idp_len, client_id_list->data + 2); idp_len += 4; - client_id = silc_id_payload_parse_id(client_id_list->data, idp_len); + client_id = silc_id_payload_parse_id(client_id_list->data, idp_len, NULL); if (!client_id) { silc_buffer_pull(client_id_list, idp_len); continue; @@ -941,6 +941,39 @@ SilcServerEntry silc_client_get_server_by_id(SilcClient client, return entry; } +/* Add new server entry */ + +SilcServerEntry silc_client_add_server(SilcClient client, + SilcClientConnection conn, + const char *server_name, + const char *server_info, + SilcServerID *server_id) +{ + SilcServerEntry server_entry; + + server_entry = silc_calloc(1, sizeof(*server_entry)); + if (!server_entry || !server_id) + return NULL; + + server_entry->server_id = server_id; + if (server_name) + server_entry->server_name = strdup(server_name); + if (server_info) + server_entry->server_info = strdup(server_info); + + /* Add server to cache */ + if (!silc_idcache_add(conn->server_cache, server_entry->server_name, + server_entry->server_id, server_entry, 0, NULL)) { + silc_free(server_entry->server_id); + silc_free(server_entry->server_name); + silc_free(server_entry->server_info); + silc_free(server_entry); + return NULL; + } + + return server_entry; +} + /* Removes server from the cache by the server entry. */ bool silc_client_del_server(SilcClient client, SilcClientConnection conn,