Mon Jun 18 22:21:37 CEST 2007 Jochen Eisinger <coffee@silcnet.org>
[silc.git] / lib / silcclient / client.c
index 7b980de997ff53c01c57ebf58bc5dcbacd525c3d..154de47819ff7dcbca86f7051f663dd3af400718 100644 (file)
@@ -28,12 +28,12 @@ SILC_TASK_CALLBACK(silc_client_connect_to_server_second);
 SILC_TASK_CALLBACK(silc_client_connect_to_server_final);
 SILC_TASK_CALLBACK(silc_client_rekey_final);
 
-static SilcBool silc_client_packet_parse(SilcPacketParserContext *parser_context,
+static bool silc_client_packet_parse(SilcPacketParserContext *parser_context,
                                     void *context);
 static void silc_client_packet_parse_type(SilcClient client,
                                          SilcSocketConnection sock,
                                          SilcPacketContext *packet);
-void silc_client_resolve_auth_method(SilcBool success,
+void silc_client_resolve_auth_method(bool success,
                                     SilcProtocolAuthMeth auth_meth,
                                     const unsigned char *auth_data,
                                     SilcUInt32 auth_data_len, void *context);
@@ -111,7 +111,7 @@ void silc_client_free(SilcClient client)
    the client ready to be run. One must call silc_client_run to run the
    client. Returns FALSE if error occured, TRUE otherwise. */
 
-SilcBool silc_client_init(SilcClient client)
+bool silc_client_init(SilcClient client)
 {
   SILC_LOG_DEBUG(("Initializing client"));
 
@@ -298,7 +298,7 @@ void silc_client_del_connection(SilcClient client, SilcClientConnection conn)
       SilcIDCacheList list;
       SilcIDCacheEntry entry;
       SilcClientCommandPending *r;
-      SilcBool ret;
+      bool ret;
 
       if (silc_idcache_get_all(conn->internal->client_cache, &list)) {
        ret = silc_idcache_list_first(list, &entry);
@@ -748,7 +748,7 @@ SILC_TASK_CALLBACK(silc_client_connect_to_server_second)
    client operation to resolve the authentication method. We will continue
    the executiong of the protocol in this function. */
 
-void silc_client_resolve_auth_method(SilcBool success,
+void silc_client_resolve_auth_method(bool success,
                                     SilcProtocolAuthMeth auth_meth,
                                     const unsigned char *auth_data,
                                     SilcUInt32 auth_data_len, void *context)
@@ -928,7 +928,7 @@ SILC_TASK_CALLBACK(silc_client_connect_to_server_final)
 
 int silc_client_packet_send_real(SilcClient client,
                                 SilcSocketConnection sock,
-                                SilcBool force_send)
+                                bool force_send)
 {
   int ret;
 
@@ -1049,7 +1049,7 @@ SILC_TASK_CALLBACK_GLOBAL(silc_client_packet_process)
 /* Parser callback called by silc_packet_receive_process. Thie merely
    registers timeout that will handle the actual parsing when appropriate. */
 
-static SilcBool silc_client_packet_parse(SilcPacketParserContext *parser_context,
+static bool silc_client_packet_parse(SilcPacketParserContext *parser_context,
                                     void *context)
 {
   SilcClient client = (SilcClient)context;
@@ -1412,12 +1412,13 @@ void silc_client_packet_send(SilcClient client,
                             SilcHmac hmac,
                             unsigned char *data,
                             SilcUInt32 data_len,
-                            SilcBool force_send)
+                            bool force_send)
 {
   SilcPacketContext packetdata;
   const SilcBufferStruct packet;
   int block_len;
   SilcUInt32 sequence = 0;
+  int src_id_allocated = FALSE;
 
   if (!sock)
     return;
@@ -1461,6 +1462,7 @@ void silc_client_packet_send(SilcClient client,
   } else {
     packetdata.src_id = silc_calloc(SILC_ID_CLIENT_LEN, sizeof(unsigned char));
     packetdata.src_id_len = SILC_ID_CLIENT_LEN;
+    src_id_allocated = TRUE;
   }
   packetdata.src_id_type = SILC_ID_CLIENT;
   if (dst_id) {
@@ -1486,7 +1488,7 @@ void silc_client_packet_send(SilcClient client,
   if (!silc_packet_assemble(&packetdata, client->rng, cipher, hmac, sock,
                             data, data_len, (const SilcBuffer)&packet)) {
     SILC_LOG_ERROR(("Error assembling packet"));
-    return;
+    goto out;
   }
 
   /* Encrypt the packet */
@@ -1499,12 +1501,18 @@ void silc_client_packet_send(SilcClient client,
 
   /* Now actually send the packet */
   silc_client_packet_send_real(client, sock, force_send);
+
+ out:
+  if (src_id_allocated && packetdata.src_id)
+    silc_free(packetdata.src_id);
+  if (packetdata.dst_id)
+    silc_free(packetdata.dst_id);
 }
 
 /* Packet sending routine for application.  This is the only routine that
    is provided for application to send SILC packets. */
 
-SilcBool silc_client_send_packet(SilcClient client,
+bool silc_client_send_packet(SilcClient client,
                             SilcClientConnection conn,
                             SilcPacketType type,
                             const unsigned char *data,
@@ -1705,7 +1713,7 @@ SILC_TASK_CALLBACK(silc_client_send_auto_nick)
 
 static void silc_client_resume_session_cb(SilcClient client,
                                          SilcClientConnection conn,
-                                         SilcBool success,
+                                         bool success,
                                          void *context)
 {
   SilcBuffer sidp;