Copyright © 2001 - 2005 SILC Project SILC Project Website | SILC Toolkit Reference Manual Index

SILC Toolkit Reference Manual
SILC Core Library
SILC Authentication Interface
SILC Message Interface
SILC Channel Interface
SILC Command Interface
SILC Notify Interface
SILC Status Types
SILC Modes
SILC ID Interface
SILC ID Cache Interface
SILC Argument Interface
SILC Attributes Interface
Packet Protocol Interface
SILC Utility Library
Basic SILC Types
SILC Buffer Interface
SILC Buffer Format Interface
SILC Hash Table Interface
SILC Logging Interface
SILC Memory Interface
SILC Mutex Interface
SILC Thread Interface
SILC Network Interface
SILC Schedule Interface
SILC Socket Interface
SILC Protocol Interface
SILC Config Interface
SILC File Util Interface
SILC String Util Interface
SILC UTF-8 Interface
SILC Stringprep Interface
SILC Util Interface
SILC List Interface
SILC Dynamic List Interface
SILC VCard Interface
SILC Application Utilities
SILC MIME Interface
SILC Crypto Library
Introduction to SILC RNG
SILC RNG Interface
SILC Cipher API
SILC PKCS API
SILC PKCS#1 API
SILC Hash Interface
SILC HMAC Interface
SILC SFTP Library
SILC SFTP Interface
SFTP Filesystems Interface
SILC Client Library
Using SILC Client Library Tutorial
Arguments for command_reply Client Operation
SilcStatus Error Arguments in command_reply Client Operation
Arguments for notify Client Operation
Unicode and UTF-8 Strings in Client Library
Client Library Interface Reference
SILC Key Exchange Library
SILC SKE Interface
SKE Status Types
SKE Diffie Hellman Groups
SKE Payloads
SILC Math Library
SILC MP Interface
SILC Math Interface
Resource Links
SILC Project Website
SILC Protocol Documentation
SILC White Paper
SILC FAQs

Command Reply Arguments
The SILC Client Library 'command_reply client operation (which is part of the SilcClientOperation callback functions) returns command replies from the SILC Server for commands that the client has earlier sent to the server. The 'command_reply' client operation implementation has a variable argument list to deliver SilcCommand specific arguments to the application. This document describes these arguments for all command replies to help SILC client software developers to process them.
NOTE: The following list of command reply arguments are sent when the command was executed successfully. If an error occurred, the `command_reply' client operation's 'success' argument is FALSE, and the 'status' argument includes the error status. In this case the arguments returned are dependent of the 'status' argument. See all SilcStatus error arguments for these arguments.
command_reply Client Library operation
The 'command_reply' client operation callback function prototype is as follows:
`void (*command_reply)(SilcClient client, SilcClientConnection conn,
SilcCommandPayload cmd_payload, bool success, SilcCommand command,
SilcStatus status, ...);`
The first argument 'client' is the SILC Client Library context, the 'conn' is the context for the connection to the remote server, the 'cmd_payload' is the raw SilcCommandPayload and application usually ignores it, the 'success' boolean value indicates whether the earlier command was a success or not, the 'command' is the command reply enumeration, and the 'status' indicates the status of the command reply. If 'success' is FALSE then 'status' includes error status (see SilcStatus error arguments).
Rest of the arguments are 'command' specific and implementation should handle them by the SilcCommand for example in a `switch` statement. The commands are defined in lib/silccore/silccomand.h header file. A short example:
`switch(type)
{
case SILC_COMMAND_WHOIS:
...
break;
case SILC_COMMAND_WHOWAS:
...
break;
case SILC_COMMAND_NICK:
...
break;
...
}`
Arguments
The following table describes all commands and arguments that the client library sends in the 'command_reply' client operation to the application. By default all arguments that the library sends to application are valid pointers. However, it is possible that some pointers may be NULL. If this is the case it is separately mentioned that the argument may be NULL. In this case application must ignore that argument.
The 'command_reply' arguments for successful SilcCommand replies are as follows:

Name | Description | Variable Arguments

SILC_COMMAND_WHOIS

Returns information about user. The following pointers may be NULL: 'channels', 'fingerprint', 'channel_usermodes' and 'attrs'. If 'fingerprint' is valid its length is 20 bytes. If 'channels' is valid it can be parsed with silc_channel_payload_parse_list function. It is the list of channels user has joined. If the 'channel_usermodes' is valid it can be parsed with silc_get_mode_list function. It is the list of the user's modes on the joined channels. The 'attr' is the Requested Attributes that may have been returned by the client and it can be parsed by traversing the SilcDList and using silc_attribute_get_attribute function.

SilcClientEntry client_entry, char *nickname, char *username, char *realname, SilcBuffer channels, SilcUInt32 usermode, SilcUInt32 idletime, unsigned char *fingerprint, SilcBuffer channel_usermodes, SilcDList attrs

SILC_COMMAND_WHOWAS | Returns history information about user. The 'client_entry' and 'realname' may be NULL. | SilcClientEntry client_entry, char *nickname, char *username, char *realname
SILC_COMMAND_IDENTIFY | Returns information about user, channel or server. This is similar to WHOIS command but does not return so much information and can be used to get information about channels and servers too. Application should ignore this command reply. The 'name' and 'info' may be NULL. | void *entry, char *name, char *info
SILC_COMMAND_NICK | Returns the new Client ID and new nickname inside the SilcClientEntry. The `old_client_id' is the odl Client ID used by the client before the nickname was changed. | SilcClientEntry local_entry, char *nickname, const SilcClientID *old_client_id

SILC_COMMAND_LIST

Returns the list of channel in the SILC network. Each call of command reply returns one channel. This means that the command reply is called multiple times to return list of channels. The 'channel', 'channel_name' and 'channel_topic' may be NULL. However, the 'channel' and 'channel_name' are NULL only if there are no channels in the network. In this case this reply is called once with all arguments set to NULL. Application must be able to handle this situation correctly.

SilcChannelEntry channel, char *channel_name, char *channel_topic, SilcUInt32 user_count

SILC_COMMAND_TOPIC | Returns the topic of the channel. | SilcChannelEntry channel, char *topic

SILC_COMMAND_INVITE

Returns the invite list of the channel. Called also even if invite list was not modified but SILC_COMMAND_INVITE command was used to invite a user into a channel. In this case the invite list is not returned by the server and 'invite_list' is NULL. The 'invite_list' is list of SilcArgumentPayloads. The first 2 bytes are the number of arguments in the list and can be parsed with SILC_GET16_MSB macro. The list can be parsed with silc_argument_payload_parse function.

SilcChannelEntry channel, SilcBuffer invite_list

SILC_COMMAND_KILL | Called after killing a client. Returns the client that was killed. The `client_entry' may be NULL. | SilcClientEntry client_entry
SILC_COMMAND_INFO | Returns information about the server user is connected to. | SilcServerEntry server, char *server_name, char *server_info

SILC_COMMAND_STATS

Returns network statistics from the server. The 'stats_buffer' of length of 'buffer_length' bytes includes 32-bit integers one after the other each representing some statistics. The integers can be parsed for example with SILC_GET32_MSB macro. The integers in the buffer are: starttime, uptime, local_clients, local_channels, local_serverops, local_routerops, cell_clients, cell_channels, cell_servers, all_clients, all_channel, all_servers, all_routers, all_serverops, all_routerops. All integers are always present.

unsigned char *stats_buffer, SilcUInt32 buffer_length

SILC_COMMAND_PING | Returns reply to earlier ping. There is no arguments to this reply. | none
SILC_COMMAND_OPER | Returns reply to earlier SILC_COMMAND_OPER command. There is no arguments to this reply. | none

SILC_COMMAND_JOIN

Reply received when user joined a channel. The 'ignored' argument can be ignored by the application. The 'topic' and 'hmac_name' may be NULL. The 'key_payload' is usually ignored by the application. The 'list_count' is the number of entries in both 'client_id_list' and 'client_mode_list'. The 'client_id_list' is a list of clients on the channel and 'client_mode_list' includes those clients' modes on the channel. If application likes to resolve information about the clients on the channel it may call silc_client_get_clients_by_list function and pass the 'client_id_list' as argument to it. The 'client_mode_list' includes 32-bit integers one after the other and they are in same order as clients in 'client_mode_list'. If application resolves the information with silc_client_get_clients_by_list parsing the 'client_mode_list' is not necessary. The 'founder_key' is the channel founder's key and may be NULL. The 'channel_pubkeys' is Argument List Payload containing Public Key Payloads of all added channel public keys, it may be NULL.

char *channel_name, SilcChannelEntry channel, SilcUInt32 channel_mode, int ignored, SilcBuffer key_payload, NULL, NULL, char *topic, char *hmac_name, SilcUInt32 list_count, SilcBuffer client_id_list, SilcBuffer client_mode_list, SilcPublicKey founder_key, SilcBuffer channel_pubkeys, SilcUint32 user_limit

SILC_COMMAND_MOTD | Returns the Message of the Day from the server. The 'motd' may be NULL. | char *motd
SILC_COMMAND_UMODE | Returns the user mode after changing it. | SilcUInt32 user_mode

SILC_COMMAND_CMODE

Returns channel's mode after changing it. Optionally may also return founder's public key when it was set. It may also return the channel public key list when the list was altered. The 'founder_key' and 'channel_pubkeys' arguments may be NULL. The 'channel_pubkeys' is an Argument List Payload where each argument includes one Public Key Payload.

SilcChannelEntry channel, SilcUInt32 mode, SilcPublicKey founder_key, SilcBuffer channel_pubkeys, SilcUint32 user_limit

SILC_COMMAND_CUMODE | Returns user's mode on channel after changing it. | SilcUInt32 mode, SilcChannelEntry channel, SilcClientEntry target_client
SILC_COMMAND_KICK | Called after kicking a client. Returns the client that was kicked from the 'channel'. The `client_entry' and 'channel' may be NULL. | SilcChannelEntry channel, SilcClientEntry client_entry
SILC_COMMAND_BAN | Returns channel's ban list. The 'ban_list' may be NULL. The construction of that list is equivalent to invite list. See description of SILC_COMMAND_INVITE command reply. | SilcChannelEntry channel, SilcBuffer ban_list
SILC_COMMAND_DETACH | Called after being detached from the SILC network. There is no arguments to this reply. | none
SILC_COMMAND_WATCH | Called after modifying the watch list in the server. There is no arguments to this reply. | none
SILC_COMMAND_SILCOPER | Returns reply to earlier SILC_COMMAND_SILCOPER command. There is no arguments to this reply. | none
SILC_COMMAND_LEAVE | Called after leaving the channel. Note that the `channel' will become invalid after command_reply client operation returns. | SilcChannelEntry channel
SILC_COMMAND_USERS | Returns list of users in channel. If application wishes not to parse the raw lists the channel->user_list hash table is updated before calling this command reply and application may traverse that table instead of parssing the raw lists. | SilcChannelEntry channel, SilcUInt32 list_count, SilcBuffer client_id_list, SilcBuffer client_mode_list
SILC_COMMAND_GETKEY | Returns public key of client or server. The 'public_key' may be NULL. The 'entry_type' is used to check what type of pointer the entry' is. For SILC_ID_CLIENT SilcClientEntry and for SILC_ID_SERVER SilcServerEntry. | SilcIdType entry_type, void *entry, SilcPublicKey public_key

SILC_COMMAND_SERVICE

Returns the service list in the server, or information on the accepted and authenticated service. The 'service_list' maybe NULL if server does not support any services. It is NULL also when 'name' is not NULL. The 'service_list' is a comma separated list of services the server supports. The 'name' MAY be NULL also. The 'name' is the requested service, and it is non-NULL only if server accepted and authenticated client's request.

const char *server_list, const char *service_name

SILC protocol defines some additional commands but command replies to those commands are not delivered to the application. Only the command replies listed above are delivered to application.

Copyright © 2001 - 2005 SILC Project SILC Project Website | SILC Toolkit Reference Manual Index