updates.
[silc.git] / lib / silcclient / silcapi.h
index ccc360e562a011ed33a18d81eee3d5d9133698eb..61587e3d118f50fc17250c2539d0328d64ff8ad2 100644 (file)
@@ -533,6 +533,25 @@ int silc_client_init(SilcClient client);
  ***/
 void silc_client_run(SilcClient client);
 
+/****f* silcclient/SilcClientAPI/silc_client_run_one
+ *
+ * SYNOPSIS
+ *
+ *    void silc_client_run_one(SilcClient client);
+ *
+ * DESCRIPTION
+ *
+ *    Runs the client and returns immeadiately. This function is used when
+ *    the SILC Client object indicated by the `client' is run under some
+ *    other scheduler, or event loop or main loop.  On GUI applications,
+ *    for example this may be desired to used to run the client under the
+ *    GUI application's main loop.  Typically the GUI application would
+ *    register an idle task that calls this function multiple times in
+ *    a second to quickly process the SILC specific data.
+ *
+ ***/
+void silc_client_run_one(SilcClient client);
+
 /****f* silcclient/SilcClientAPI/silc_client_stop
  *
  * SYNOPSIS
@@ -1586,7 +1605,8 @@ void silc_client_free_channel_private_keys(SilcChannelPrivateKey *keys,
 void silc_client_send_key_agreement(SilcClient client,
                                    SilcClientConnection conn,
                                    SilcClientEntry client_entry,
-                                   char *hostname,
+                                   const char *hostname,
+                                   const char *bindhost,
                                    int port,
                                    uint32 timeout_secs,
                                    SilcKeyAgreementCallback completion,
@@ -1825,12 +1845,14 @@ typedef void (*SilcClientFileMonitor)(SilcClient client,
  *
  * SYNOPSIS
  *
- *    void silc_client_file_send(SilcClient client,
- *                               SilcClientConnection conn,
- *                               SilcClientFileMonitor monitor,
- *                               void *monitor_context,
- *                               SilcClientEntry client_entry,
- *                               const char *filepath);
+ *    uint32 silc_client_file_send(SilcClient client,
+ *                                 SilcClientConnection conn,
+ *                                 SilcClientFileMonitor monitor,
+ *                                 void *monitor_context,
+ *                                 const char *local_ip,
+ *                                 uint32 local_port,
+ *                                 SilcClientEntry client_entry,
+ *                                 const char *filepath);
  *
  * DESCRIPTION
  *
@@ -1847,6 +1869,14 @@ typedef void (*SilcClientFileMonitor)(SilcClient client,
  *    file indicated by the `filepath' is being transmitted to the remote
  *    client indicated by the `client_entry', already.
  *
+ *    If the `local_ip' is provided then this will try to bind the 
+ *    listener for key exchange protocol to that IP.  If `local_port' is
+ *    non-zero that port is used.  If `local_ip' is NULL then this will
+ *    automatically attempt to bind it to local IP address of the machine.
+ *    If that fails then this does not bind to any address and port, and
+ *    assume that the remote client will provide the listener for the
+ *    key exchange protocol.
+ *
  *    If error will occur during the file transfer process the error
  *    status will be returned in the monitor callback.  In this case
  *    the application must call silc_client_file_close to close the
@@ -1857,6 +1887,8 @@ uint32 silc_client_file_send(SilcClient client,
                             SilcClientConnection conn,
                             SilcClientFileMonitor monitor,
                             void *monitor_context,
+                            const char *local_ip,
+                            uint32 local_port,
                             SilcClientEntry client_entry,
                             const char *filepath);