Copyright © 2001 - 2007 SILC Project
SILC Project Website
SILC Toolkit Reference Manual
Index

SILC Toolkit Reference Manual
SILC Crypto Library
    Introduction to SILC RNG
    SILC RNG Interface
    SILC Cipher API
    SILC PKCS API
    SILC Public Key API
    SILC PKCS #1 API
    SILC Hash Interface
    SILC HMAC Interface
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 Argument Interface
    SILC Attributes Interface
    Packet Engine Interface
    SILC Public Key Payload Interface
SILC Key Exchange Library
    SILC SKE Interface
    SILC Connection Authentication Interface
SILC VCard Library
    SILC VCard Interface
SILC Math Library
    SILC MP Interface
    SILC Math 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
    Client Entry Interface Reference
SILC ASN.1 Library
    SILC ASN.1 Interface
    SILC BER interface
SILC HTTP Library
    SILC HTTP Server Interface
    SILC HTTP PHP Translator
SILC Utility Library
    Basic Types and Definitions
    Data Buffer Interface
    Data Buffer Format Interface
    Hash Table Interface
    Memory Allocation Interface
    Data Stack (memory pool) Interface
    Finite State Machine Interface
    Thread Interface
    Mutual Exclusion Lock Interface
    Condition Variable Interface
    Atomic Operations Interface
    Network (TCP and UDP) Interface
    Scheduler Interface
    Asynchronous Operation Interface
    Abstract Stream Interface
    Socket Stream Interface
    File Descriptor Stream Interface
    File Utility Functions
    String Utility Interface
    Snprintf Interface
    UTF-8 String Interface
    Stringprep Interface
    Utility Functions
    List Interface
    Dynamic List Interface
    MIME Interface
    Time Utility Functions
    Logging Interface
    Config File Interface
SILC Key Repository Library
    SILC SKR Interface
SILC Application Utility Library
    SILC Application Utilities
    SILC ID Cache Interface
SILC SFTP Library
    SILC SFTP Interface
    SFTP Filesystems Interface

Resource Links
SILC Project Website
SILC Protocol Documentation
SILC White Paper
SILC FAQs





SilcNotifyType Arguments
 
The SILC Client Library 'notify' client operation (which is part of the SilcClientOperation callback functions) returns different kind of notifications from the SILC server to the SILC client. The 'notify' client operation implementation has a variable argument list to deliver SilcNotifyType type specific arguments to the application. This document describes these arguments for all notify types to help SILC client software developers to handle the incoming notifications.
 
 
notify Client Library operation
 
The 'notify' client operation callback function prototype is as follows:
 
  void (*notify)(SilcClient client, SilcClientConnection conn, SilcNotifyType type, ...);
 
The first argument 'client' is the SILC Client Library context, the `conn' is the context for the connection to the remote server, and the `type' is the notify type enumeration sent by the server. Rest of the arguments are `type' specific and implementation should handle them by the SilcNotifyType for example in a switch statement. The notify types are defined in lib/silccore/silcnotify.h header file. A short example:
 
  switch(type)
    {
    case SILC_NOTIFY_TYPE_NONE:
    ...
    break;
    case SILC_NOTIFY_TYPE_INVITE:
    ...
    break;
    case SILC_NOTIFY_TYPE_JOIN:
    ...
    break;
    ...
    }

 
 
Arguments
 
The following table describes all notify types and arguments that the client library sends in the 'notify' 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 SilcNotifyType arguments per notify type is as follows:
 
Name Description Variable Arguments
SILC_NOTIFY_TYPE_NONE A message from server that usually does not include any critical information. Application may ignore this or display it for the user. The 'message' argument may be NULL. char *message
SILC_NOTIFY_TYPE_INVITE Sent to the client if the user is invited on a channel. The 'channel argument may be NULL but the `channel_name' is always provided. SilcChannelEntry channel, char *channel_name, SilcClientEntry inviter
SILC_NOTIFY_TYPE_JOIN Sent when someone joins to a channel. This is also sent whenever you join a channel, in addition of receiving SILC_COMMAND_JOIN command reply. SilcClientEntry joining_client, SilcChannelEntry channel
SILC_NOTIFY_TYPE_LEAVE Sent when someone leaves (parts) the channel. SilcClientEntry leaving_client, SilcChannelEntry channel
SILC_NOTIFY_TYPE_SIGNOFF Sent when someone signoff the SILC network. The 'signoff_message' may be NULL. The `signoff_client' is the client signing off. The `channel' is the channel where the client was joined. The `channel' may be NULL. SilcClientEntry signoff_client, char *signoff_message, SilcChannelEntry channel
SILC_NOTIFY_TYPE_TOPIC_SET Sent when the topic of a channel is set/changed. The 'setter_id_type' is used to check what type of pointer the 'setter_entry' is. For SILC_ID_CLIENT SilcClientEntry, for SILC_ID_SERVER SilcServerEntry and for SILC_ID_CHANNEL SilcChannelEntry. SilcIdType setter_id_type, void *setter_entry, char *topic, SilcChannelEntry channel
SILC_NOTIFY_TYPE_NICK_CHANGE Sent when someone changes their nickname. The 'client_entry' is the client whose nickname is changed. The `old_nickname' is the old nickname and the `new_nickname' is the new nickname. It has been already updated into the `client_entry'. SilcClientEntry client_entry, const char *old_nickname, const char *new_nickname
SILC_NOTIFY_TYPE_CMODE_CHANGE Sent when channel's mode has changed. The 'changer_id_type' is used to check what type of pointer the 'changer_entry' is. For SILC_ID_CLIENT SilcClientEntry, for SILC_ID_SERVER SilcServerEntry and for SILC_ID_CHANNEL SilcChannelEntry. The 'mode' is the mode mask after the change. The `cipher_name' is the cipher set for the channel. The `hmac_name' is the HMAC set for the channel. The `passphrase' is the passphrase that was set for the channel. The `founder_key' is the founder's public key when it was set for the channel. The `channel_pubkeys' is a list of SilcArgumentDecodedList contexts each containing one channel public key. The library will free the list automatically. The arguments 'cipher_name', 'hmac_name', 'passphrase', 'founder_key' and 'channel_pubkeys' may be NULL. SilcIdType changer_id_type, void *changer_entry, SilcUInt32 mode, char *cipher_name, char *hmac_name, char *passphrase, SilcPublicKey founder_key, SilcDList channel_pubkeys, SilcChannelEntry channel
SILC_NOTIFY_TYPE_CUMODE_CHANGE Sent when a users mode on a channel has changed. The 'changer_id_type' is used to check what type of pointer the 'changer_entry' is. For SILC_ID_CLIENT SilcClientEntry, for SILC_ID_SERVER SilcServerEntry and for SILC_ID_CHANNEL SilcChannelEntry. The 'mode' is the mode mask after the change. The 'target_client' is the client whose mode was changed. SilcIdType changer_id_type, void *changer_entry, SilcUInt32 mode, SilcClientEntry target_client, SilcChannelEntry channel
SILC_NOTIFY_TYPE_MOTD Message of the Day from the server. char *motd
SILC_NOTIFY_TYPE_CHANNEL_CHANGE Sent when a channel's Channel ID changes. It is possible that channel's ID changes and this notify is sent by the server when this happens. Usually application does not need to handle this notify type and may safely ignore it when received. SilcChannelEntry channel
SILC_NOTIFY_TYPE_SERVER_SIGNOFF Sent when a server quits the network. The 'clients' is a list of SilcClientEntry pointers. Each client in the entry is one client signing off from the SILC network. The library will free the list. The `server' is the quitting server, and it is NULL if the server isn't cached in the client library. SilcServerEntry server, SilcDList clients
SILC_NOTIFY_TYPE_KICKED Sent when a client (possibly our client) is kicked from a channel. The 'kick_message' may be NULL. If our client was kicked then 'kicked' is our local SilcClientEntry pointer. SilcClientEntry kicked, char *kick_message, SilcClientEntry kicker, SilcChannelEntry channel
SILC_NOTIFY_TYPE_KILLED Sent when a client (possibly our client) is killed from the network. The 'kill_message' may be NULL. If our client was killed then 'killed' is our local SilcClientEntry pointer. The 'killer_type' is used to check what type of pointer the 'killer' is. For SILC_ID_CLIENT SilcClientEntry, for SILC_ID_SERVER SilcServerEntry and for SILC_ID_CHANNEL SilcChannelEntry. SilcClientEntry killed, char *kill_message, SilcIdType killer_type, void *killer, SilcChannelEntry channel
SILC_NOTIFY_TYPE_ERROR Sent when an error occurs while handling some operation (except command) from the client. Application usually cannot handle this notify type and may safely ignore it. SilcStatus error
SILC_NOTIFY_TYPE_WATCH Sent to notify some status change of a client we are wathing. The SILC_COMMAND_WATCH is used to manage clients we are wathing and this notify type is used to deliver information about that client. If the client just changed nickname the 'new_nickname' includes the new nickname. Otherwise this pointer is NULL. The 'user_mode' is the client's mode in the SILC network. The 'notification' contains the notify type that happened for the 'watched_client' (for example SILC_NOTIFY_TYPE_NICK_CHANGE if the client changed their nickname). If the `new_nickname' is NULL and `notification' is SILC_NOTIFY_TYPE_NONE the `watched_client' has just joined the network. SilcClientEntry watched_client, char *new_nickname, SilcUInt32 user_mode, SilcNotifyType notification, SilcPublicKey public_key

 
SILC protocol defines some additional notify types but those notify types are not delivered to the application. Some of those notify types are only delivered between servers and routers and clients never receive them. Only the notify types listed above are delivered to application.








Copyright © 2001 - 2007 SILC Project
SILC Project Website
SILC Toolkit Reference Manual
Index