updates.
[silc.git] / lib / silcclient / client_keyagr.c
index d584baeffc9d48be41932839682b9a2084441046..37f980034999bb43e7600f318da11237260bc0f1 100644 (file)
@@ -318,12 +318,10 @@ 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, 
@@ -618,16 +616,21 @@ void silc_client_abort_key_agreement(SilcClient client,
   assert(client_entry);
 
   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);
   }
 }
 
@@ -652,7 +655,8 @@ 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;