X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=blobdiff_plain;f=lib%2Fsilcclient%2Fclient_keyagr.c;h=87f13e1630cb5bb914622804524e4fc2eb0382a8;hp=d584baeffc9d48be41932839682b9a2084441046;hb=a818c5b5411bbc4436d1c5f011236985c96bb787;hpb=2dc218143c7859f7529396dc121ae08e2fd78da0 diff --git a/lib/silcclient/client_keyagr.c b/lib/silcclient/client_keyagr.c index d584baef..87f13e16 100644 --- a/lib/silcclient/client_keyagr.c +++ b/lib/silcclient/client_keyagr.c @@ -24,7 +24,8 @@ and in protocol.c. This file implements the client-to-client key agreement as defined by the SILC protocol. */ -#include "clientlibincludes.h" +#include "silcincludes.h" +#include "silcclient.h" #include "client_internal.h" SILC_TASK_CALLBACK(silc_client_key_agreement_final); @@ -152,9 +153,9 @@ SILC_TASK_CALLBACK(silc_client_process_key_agreement) sock = silc_net_accept_connection(ke->fd); if (sock < 0) { - client->ops->say(client, conn, SILC_CLIENT_MESSAGE_AUDIT, - "Could not accept key agreement connection: ", - strerror(errno)); + client->internal->ops->say(client, conn, SILC_CLIENT_MESSAGE_AUDIT, + "Could not accept key agreement connection: ", + strerror(errno)); ke->client_entry->ke = NULL; ke->completion(ke->client, ke->conn, ke->client_entry, SILC_KEY_AGREEMENT_ERROR, NULL, ke->context); @@ -180,8 +181,8 @@ SILC_TASK_CALLBACK(silc_client_process_key_agreement) /* Perform name and address lookups for the remote host. */ silc_net_check_host_by_sock(sock, &newsocket->hostname, &newsocket->ip); if (!newsocket->hostname && !newsocket->ip) { - client->ops->say(client, conn, SILC_CLIENT_MESSAGE_AUDIT, - "Could not resolve the remote IP or hostname"); + client->internal->ops->say(client, conn, SILC_CLIENT_MESSAGE_AUDIT, + "Could not resolve the remote IP or hostname"); ke->client_entry->ke = NULL; ke->completion(ke->client, ke->conn, ke->client_entry, SILC_KEY_AGREEMENT_ERROR, NULL, ke->context); @@ -298,7 +299,7 @@ void silc_client_send_key_agreement(SilcClient client, const char *hostname, const char *bindhost, int port, - uint32 timeout_secs, + SilcUInt32 timeout_secs, SilcKeyAgreementCallback completion, void *context) { @@ -306,9 +307,7 @@ void silc_client_send_key_agreement(SilcClient client, SilcClientKeyAgreement ke = NULL; SilcBuffer buffer; - assert(client_entry); - - if (client_entry->ke) + if (!client_entry || client_entry->ke) return; /* Create the listener if hostname and port was provided. @@ -318,17 +317,16 @@ void silc_client_send_key_agreement(SilcClient client, if (hostname) { ke = silc_calloc(1, sizeof(*ke)); - if (bindhost) { + if (bindhost) ke->fd = silc_net_create_server(port, bindhost); - } - else { - ke->fd = silc_net_create_server(port, hostname); - } + else + ke->fd = silc_net_create_server(port, hostname); if (ke->fd < 0) { - client->ops->say(client, conn, SILC_CLIENT_MESSAGE_ERROR, - "Cannot create listener on %s on port %d: %s", - (bindhost) ? bindhost:hostname, port, strerror(errno)); + client->internal->ops->say( + client, conn, SILC_CLIENT_MESSAGE_ERROR, + "Cannot create listener on %s on port %d: %s", + (bindhost) ? bindhost:hostname, port, strerror(errno)); completion(client, conn, client_entry, SILC_KEY_AGREEMENT_FAILURE, NULL, context); silc_free(ke); @@ -439,12 +437,12 @@ SILC_TASK_CALLBACK(silc_client_perform_key_agreement_start) if (opt != 0) { if (ctx->tries < 2) { /* Connection failed but lets try again */ - client->ops->say(client, conn, SILC_CLIENT_MESSAGE_ERROR, - "Could not connect to client %s: %s", - ctx->host, strerror(opt)); - client->ops->say(client, conn, SILC_CLIENT_MESSAGE_AUDIT, - "Connecting to port %d of client %s resumed", - ctx->port, ctx->host); + client->internal->ops->say(client, conn, SILC_CLIENT_MESSAGE_ERROR, + "Could not connect to client %s: %s", + ctx->host, strerror(opt)); + client->internal->ops->say(client, conn, SILC_CLIENT_MESSAGE_AUDIT, + "Connecting to port %d of client %s resumed", + ctx->port, ctx->host); /* Unregister old connection try */ silc_schedule_unset_listen_fd(client->schedule, fd); @@ -456,9 +454,9 @@ SILC_TASK_CALLBACK(silc_client_perform_key_agreement_start) ctx->tries++; } else { /* Connection failed and we won't try anymore */ - client->ops->say(client, conn, SILC_CLIENT_MESSAGE_ERROR, - "Could not connect to client %s: %s", - ctx->host, strerror(opt)); + client->internal->ops->say(client, conn, SILC_CLIENT_MESSAGE_ERROR, + "Could not connect to client %s: %s", + ctx->host, strerror(opt)); silc_schedule_unset_listen_fd(client->schedule, fd); silc_net_close_connection(fd); silc_schedule_task_del(client->schedule, ctx->task); @@ -519,7 +517,8 @@ void silc_client_perform_key_agreement(SilcClient client, SILC_LOG_DEBUG(("Start")); - assert(client_entry && hostname && port); + if (!client_entry || !hostname || !port) + return; ke = silc_calloc(1, sizeof(*ke)); ke->client = client; @@ -557,7 +556,8 @@ void silc_client_perform_key_agreement_fd(SilcClient client, SILC_LOG_DEBUG(("Start")); - assert(client_entry); + if (!client_entry) + return; ke = silc_calloc(1, sizeof(*ke)); ke->client = client; @@ -615,19 +615,25 @@ void silc_client_abort_key_agreement(SilcClient client, SilcClientConnection conn, SilcClientEntry client_entry) { - assert(client_entry); + if (!client_entry) + return; if (client_entry->ke) { + SilcClientKeyAgreement ke; + if (client_entry->ke->sock) { silc_client_del_socket(client_entry->ke->client, client_entry->ke->sock); silc_socket_free(client_entry->ke->sock); } - client_entry->ke = NULL; silc_schedule_task_del_by_fd(client->schedule, client_entry->ke->fd); if (client_entry->ke->timeout) silc_schedule_task_del(client->schedule, - client_entry->ke->timeout); - silc_free(client_entry->ke); + client_entry->ke->timeout); + ke = client_entry->ke; + client_entry->ke = NULL; + ke->completion(client, conn, client_entry, + SILC_KEY_AGREEMENT_ABORTED, NULL, ke->context); + silc_free(ke); } } @@ -639,7 +645,7 @@ static void silc_client_key_agreement_resolve_cb(SilcClient client, SilcClientConnection conn, SilcClientEntry *clients, - uint32 clients_count, + SilcUInt32 clients_count, void *context) { SilcPacketContext *packet = (SilcPacketContext *)context; @@ -652,12 +658,14 @@ silc_client_key_agreement_resolve_cb(SilcClient client, goto out; /* Parse the key agreement payload */ - payload = silc_key_agreement_payload_parse(packet->buffer); + payload = silc_key_agreement_payload_parse(packet->buffer->data, + packet->buffer->len); if (!payload) goto out; /* Call the key_agreement client operation */ - ret = client->ops->key_agreement(client, conn, clients[0], + ret = client->internal->ops->key_agreement( + client, conn, clients[0], silc_key_agreement_get_hostname(payload), silc_key_agreement_get_port(payload), &completion, &completion_context);