+
+
+Function silc_client_key_exchange
+
+
+SYNOPSIS
+
+
+ SilcAsyncOperation
+ silc_client_key_exchange(SilcClient client,
+ SilcClientConnectionParams *params,
+ SilcPublicKey public_key,
+ SilcPrivateKey private_key,
+ SilcStream stream,
+ SilcConnectionType conn_type,
+ SilcClientConnectCallback callback,
+ void *context);
+
+
+DESCRIPTION
+
+
+ Starts key exchange protocol and authentication protocol in the
+ connection indicated by `stream'. This function can be be used to
+ start SILC session with remote host (usually server) when the caller
+ has itself created the connection, instead of calling the function
+ silc_client_connect_to_server or silc_client_connect_to_client. If
+ one of those functions was used this function must not be called as
+ in that case the key exchange is performed automatically.
+
+ Use this function only if you have created the connection by yourself.
+ After creating the connection the socket must be wrapped into a
+ socket stream. See silcsocketstream.h for more information. Note that
+ the `stream' must have valid remote IP address (and optionally also
+ hostname) and port set.
+
+ The `params' may be provided to provide various connection parameters.
+ The `public_key' and the `private_key' is your identity used in this
+ session. The `callback' with `context' will be called after the session
+ has been set up. It will also be called later when remote host
+ disconnects. The `conn_type' is the type of session this is going to
+ be. If the remote is SILC server it is SILC_CONN_SERVER or if it is
+ SILC client it is SILC_CONN_CLIENT.
+
+ Returns SilcAsyncOperation which can be used to cancel the connecting,
+ or NULL on error. Note that the returned pointer becomes invalid
+ after the `callback' is called.
+
+
+EXAMPLE
+
+
+ int sock;
+
+ // Create remote connection stream. Resolve hostname and IP also.
+ sock = create_connection(remote_host, port);
+ silc_socket_tcp_stream_create(sock, TRUE, FALSE, schedule,
+ stream_create_cb, app);
+
+ // Stream callback delivers our new SilcStream context
+ void stream_create_cb(SilcSocketStreamStatus status, SilcStream stream,
+ void *context)
+ {
+ ...
+ if (status != SILC_SOCKET_OK)
+ error(status);
+
+ // Start key exchange
+ silc_client_key_exchange(client, NULL, public_key, private_key,
+ stream, SILC_CONN_SERVER, connection_cb, app);
+ ...
+ }
+
+
+
+ |
+