SILC Core Library
    SILC Auth API
    SILC Channel API
    SILC Command API
    SILC ID API
    SILC ID Cache API
    SILC Modes
    SILC Notify API
    SILC Packet API
    SILC Payload API
    SILC Private API
SILC Math Library
    SILC Math API
    SILC MP API
SILC SFTP Library
    SILC SFTP API
    SILC SFTP Filesystems
SILC Utility Library
    SILC Buffer API
    SILC Buffer Format API
    SILC Buffer Utility API
    SILC Hash Table API
    SILC Log and Debug API
    SILC Memory API
    SILC Mutex API
    SILC Thread API
    SILC Net API
    SILC Schedule API
    SILC Socket Connection API
    SILC Protocol API
    SILC Util API
    SILC Zip API
    SILC List API
    SILC Dynamic List API
SILC Key Exchange Library
    SILC SKE API
    SILC SKE Status
SILC Client Library
    SILC Client API
SILC Crypto Library
    SILC Cipher API
    SILC Hash API
    SILC HMAC API
    SILC PKCS API
    SILC RNG API
Function silc_client_send_key_agreement

SYNOPSIS

    void silc_client_send_key_agreement(SilcClient client,
                                        SilcClientConnection conn,
                                        SilcClientEntry client_entry,
                                        char *hostname,
                                        int port,
                                        uint32 timeout_secs,
                                        SilcKeyAgreementCallback completion,
                                        void *context);

DESCRIPTION

    Sends key agreement request to the remote client indicated by the
    `client_entry'. If the caller provides the `hostname' and the `port'
    arguments then the library will bind the client to that hostname and
    that port for the key agreement protocol. It also sends the `hostname'
    and the `port' in the key agreement packet to the remote client. This
    would indicate that the remote client may initiate the key agreement
    protocol to the `hostname' on the `port'.  If port is zero then the
    bound port is undefined (the operating system defines it).

    If the `hostname' and `port' is not provided then empty key agreement
    packet is sent to the remote client. The remote client may reply with
    the same packet including its hostname and port. If the library receives
    the reply from the remote client the `key_agreement' client operation
    callback will be called to verify whether the user wants to perform the
    key agreement or not. 

NOTES

    NOTE: If the application provided the `hostname' and the `port' and the 
    remote side initiates the key agreement protocol it is not verified
    from the user anymore whether the protocol should be executed or not.
    By setting the `hostname' and `port' the user gives permission to
    perform the protocol (we are responder in this case).

    NOTE: If the remote side decides not to initiate the key agreement
    or decides not to reply with the key agreement packet then we cannot
    perform the key agreement at all. If the key agreement protocol is
    performed the `completion' callback with the `context' will be called.
    If remote side decides to ignore the request the `completion' will be
    called after the specified timeout, `timeout_secs'. 

    NOTE: If the `hostname' and the `port' was not provided the `completion'
    will not be called at all since this does nothing more than sending
    a packet to the remote host.

    NOTE: There can be only one active key agreement for one client entry.
    Before setting new one, the old one must be finished (it is finished
    after calling the completion callback) or the function 
    silc_client_abort_key_agreement must be called. 

>> SilcClientAPI
>> SilcKeyAgreementStatus
>> SilcKeyAgreementCallback
>> SilcPrivateMessageKeys
>> SilcAskPassphrase
>> SilcVerifyPublicKey
>> SilcGetAuthMeth
>> SilcClientMessageType
>> SilcClientOperations
>> SilcNicknameFormatParse
>> SilcClientParams
>> silc_client_alloc
>> silc_client_free
>> silc_client_init
>> silc_client_run
>> silc_client_run_one
>> silc_client_stop
>> silc_client_connect_to_server
>> silc_client_add_connection
>> silc_client_del_connection
>> silc_client_add_socket
>> silc_client_del_socket
>> silc_client_start_key_exchange
>> silc_client_close_connection
>> silc_client_send_channel_message
>> silc_client_send_private_message
>> SilcGetClientCallback
>> silc_client_get_clients
>> silc_client_get_clients_local
>> silc_client_get_clients_by_list
>> silc_client_get_client_by_id
>> silc_client_get_client_by_id_resolve
>> silc_client_del_client
>> SilcGetChannelCallback
>> silc_client_get_channel
>> silc_client_get_channel_id_resolve
>> silc_client_get_channel_by_id_resolve
>> silc_client_del_channel
>> silc_client_get_server
>> silc_client_get_server_by_id
>> silc_client_del_server
>> silc_client_command_alloc
>> silc_client_command_free
>> silc_client_command_dup
>> silc_client_command_find
>> silc_client_send_command
>> SilcClientPendingDestructor
>> silc_client_command_pending
>> silc_client_add_private_message_key
>> silc_client_add_private_message_key_ske
>> silc_client_send_private_message_key
>> silc_client_del_private_message_key
>> silc_client_list_private_message_keys
>> silc_client_free_private_message_keys
>> silc_client_add_channel_private_key
>> silc_client_del_channel_private_keys
>> silc_client_del_channel_private_key
>> silc_client_list_channel_private_keys
>> silc_client_free_channel_private_keys
>> silc_client_send_key_agreement
>> silc_client_perform_key_agreement
>> silc_client_perform_key_agreement_fd
>> silc_client_abort_key_agreement
>> silc_client_set_away_message
>> SilcConnectionAuthRequest
>> silc_client_request_authentication_method
>> silc_client_file_receive(1)
>> silc_client_file_send
>> silc_client_file_receive
>> silc_client_file_close