*
* SOURCE
*/
-typedef struct {
+typedef struct SilcClientStatsStruct {
SilcUInt32 starttime; /* SILC server start time */
SilcUInt32 uptime; /* SILC server uptime*/
SilcUInt32 my_clients; /* Number of clients in the server */
*
* SOURCE
*/
-typedef struct {
+typedef struct SilcPrivateMessageKeysStruct {
SilcClientEntry client_entry; /* The remote client entry */
char *cipher; /* The cipher name */
unsigned char *key; /* The original key, If the appliation
*
* SYNOPSIS
*
- * typedef void (*SilcAskPassphrase)(unsigned char *passphrase,
+ * typedef void (*SilcAskPassphrase)(const unsigned char *passphrase,
* SilcUInt32 passphrase_len,
* void *context);
*
* encoded, and if it is not then library will attempt to encode it.
*
***/
-typedef void (*SilcAskPassphrase)(unsigned char *passphrase,
+typedef void (*SilcAskPassphrase)(const unsigned char *passphrase,
SilcUInt32 passphrase_len,
void *context);
*
* SYNOPSIS
*
- * typedef void (*SilcGetAuthMeth)(SilcBool success,
- * SilcAuthMethod auth_meth,
- * void *auth, SilcUInt32 auth_len,
+ * typedef void (*SilcGetAuthMeth)(SilcAuthMethod auth_meth,
+ * const void *auth, SilcUInt32 auth_len,
* void *context);
*
* DESCRIPTION
*
***/
typedef void (*SilcGetAuthMeth)(SilcAuthMethod auth_meth,
- void *auth, SilcUInt32 auth_len,
+ const void *auth, SilcUInt32 auth_len,
void *context);
/****d* silcclient/SilcClientAPI/SilcClientMessageType
*
* SOURCE
*/
-typedef struct {
+typedef struct SilcClientOperationsStruct {
/* Message sent to the application by library. `conn' associates the
message to a specific connection. `conn', however, may be NULL.
The `type' indicates the type of the message sent by the library.
*
* SOURCE
*/
-typedef struct {
+typedef struct SilcClientParamsStruct {
/* If this boolean is set to TRUE then the client library will use
threads. Any of the callback functions in the SilcClientOperations
and other callbacks may be called at any time in a thread. The
%H full hostname - the full hostname of the client
Example format strings: "%n#%a" (fe. nick#2, nick#3)
- "%n@%h%a" (fe. nick@host, nick@host2)
- "%a!%n@%h" (fe. nick@host, 2!nick@host)
+ "%n#%h%a" (fe. nick#host, nick#host2)
+ "%a!%n#%h" (fe. nick#host, 2!nick#host)
Note that there must always be some separator characters around '%n'
format. It is not possible to put format characters before or after
'%n' without separators (such ash '#'). Also note that the separator
character should be a character that cannot be part of normal nickname.
+ Note that, using '@' as a separator is not recommended as the nickname
+ string may contain it to separate a server name from the nickname (eg.
+ nickname@silcnet.org).
*/
char nickname_format[32];
value. */
SilcBool nickname_force_format;
- /* If this is set to TRUE, the silcclient library will not register and
- deregister the cipher, pkcs, hash and hmac algorithms. The application
- itself will need to handle that. */
+ /* If this is set to TRUE then all nickname strings returned by the library
+ and stored by the library are in the format of 'nickname@server', eg.
+ nickname@silcnet.org. If this is FALSE then the server name of the
+ nickname is available only from the SilcClientEntry structure. When this
+ is TRUE the server name is still parsed to SilcClientEntry. */
+ SilcBool full_nicknames;
+
+ /* If this is set to TRUE then all channel name strings returned by the
+ library and stored by the library are in the format of 'channel@server',
+ eg. silc@silcnet.org. If this is FALSE then the server name of the
+ channel is available only from the SilcChannelEntry structure. When this
+ is TRUE the server name is still parsed to SilcChannelEntry. Note that,
+ not all SILC server versions return such channel name strings. */
+ SilcBool full_channel_names;
+
+ /* If this is set to TRUE, the silcclient library will not initialize
+ or uninitialize the SILC Crypto Toolkit. The application will have
+ to do that itself by calling silc_crypto_init and silc_crypto_uninit. */
SilcBool dont_register_crypto_library;
} SilcClientParams;
* The `running' callback with `context' is called after the client is
* running after silc_client_run or silc_client_run_one has been called.
* Application may start using the Client library API after that. Setting
- * the callback is optional, but recommended.
+ * the callback is optional, but highly recommended.
*
***/
SilcBool silc_client_init(SilcClient client, const char *username,
*
* SOURCE
*/
-typedef struct {
+typedef struct SilcClientConnectionParamsStruct {
/* If this is provided the user's nickname in the network will be the
string given here. If it is given, it must be UTF-8 encoded. If this
string is not given, the user's username by default is used as nickname.
* stream_create_cb, app);
*
* // Stream callback delivers our new SilcStream context
- * void stream_create_cb(SilcSocketStreamStatus status, SilcStream stream,
+ * void stream_create_cb(SilcResult status, SilcStream stream,
* void *context)
* {
* ...
- * if (status != SILC_SOCKET_OK)
+ * if (status != SILC_OK)
* error(status);
*
* // Start key exchange
*
* SilcBool
* silc_client_private_message_wait_init(SilcClient client,
- * SilcClientConnection conn);
+ * SilcClientConnection conn,
+ * SilcClientEntry client_entry);
*
* DESCRIPTION
*
- * Initializes private message waiting functionality for the connection
- * indicated by `conn'. Once this is called private message from remote
- * connection indicated by `conn' for any client entry beloning to that
- * connection may be waited for, for example in a thread. The function
+ * Initializes private message waiting functionality for the client
+ * indicated by `client_entry'. Once this is called private message
+ * from remote connection indicated by `conn' for `client_entry' may
+ * be waiter for, for example in a thread. The function
* silc_client_private_message_wait is used to block the current thread
* until a private message is received from a specified client entry.
* Return FALSE in case an internal error occurred.
*
***/
SilcBool silc_client_private_message_wait_init(SilcClient client,
- SilcClientConnection conn);
+ SilcClientConnection conn,
+ SilcClientEntry client_entry);
/****f* silcclient/SilcClientAPI/silc_client_private_message_wait_uninit
*
*
* void
* silc_client_private_message_wait_uninit(SilcClient client,
- * SilcClientConnection conn);
+ * SilcClientConnection conn,
+ * SilcClientEntry client_entry);
*
* DESCRIPTION
*
- * Unintializes private message waiting for connection indicated by
- * `conn'. After this call private message cannot be waited anymore.
- * This call may be called from any thread. This call will signal all
- * private message waiting threads to stop waiting.
+ * Unintializes private message waiting for client indicated by
+ * `client_entry'. After this call private message cannot be waited
+ * anymore and silc_client_private_message_wait will return with FALSE
+ * value.
*
***/
void silc_client_private_message_wait_uninit(SilcClient client,
- SilcClientConnection conn);
+ SilcClientConnection conn,
+ SilcClientEntry client_entry);
/****f* silcclient/SilcClientAPI/silc_client_private_message_wait
*
* be the command name. The variable argument list must be terminated
* with NULL.
*
- * Returns FALSE if the command is not known and TRUE after command.
- * execution. The `command' client operation callback will be called when
- * the command is executed to indicate whether or not the command executed
+ * Returns command identifier for this sent command. It can be used
+ * to additionally attach to the command reply using the function
+ * silc_client_command_pending, if needed. Returns 0 on error.
+ *
+ * The `command' client operation callback will be called when the
+ * command is executed to indicate whether or not the command executed
* successfully.
*
* The `command_reply' client operation callbak will be called when reply
*
* If FALSE is returned in this function this callback will not be called
* again for `command' even if there are more comand replies. By returning
- * FALSE the caller my stop the command reply handling when needed.
+ * FALSE the caller may stop the command reply handling when needed.
*
***/
typedef SilcBool (*SilcClientCommandReply)(SilcClient client,
void silc_client_free_private_message_keys(SilcPrivateMessageKeys keys,
SilcUInt32 key_count);
+/****f* silcclient/SilcClientAPI/silc_client_private_message_key_is_set
+ *
+ * SYNOPSIS
+ *
+ * SilcBool
+ * silc_client_private_message_key_is_set(SilcClient client,
+ * SilcClientConnection conn,
+ * SilcClientEntry client_entry);
+ *
+ * DESCRIPTION
+ *
+ * Returns TRUE if the private message key has been set for the client
+ * entry indicated by `client_entry'.
+ *
+ ***/
+SilcBool
+silc_client_private_message_key_is_set(SilcClient client,
+ SilcClientConnection conn,
+ SilcClientEntry client_entry);
+
/* Channel private key management */