Merged silc_1_0_branch to trunk.
[silc.git] / lib / silccore / silcnotify.h
1 /*
2  
3   silcnotify.h
4  
5   Author: Pekka Riikonen <priikone@silcnet.org>
6  
7   Copyright (C) 1997 - 2005 Pekka Riikonen
8  
9   This program is free software; you can redistribute it and/or modify
10   it under the terms of the GNU General Public License as published by
11   the Free Software Foundation; version 2 of the License.
12  
13   This program is distributed in the hope that it will be useful,
14   but WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16   GNU General Public License for more details.
17
18 */
19
20 /****h* silccore/SILC Notify Interface
21  *
22  * DESCRIPTION
23  *
24  * Implementation of the Notify Payload. Notify Payload is used usually
25  * by servers to send different kind of important notify messages to other
26  * servers and to clients.
27  *
28  ***/
29
30 #ifndef SILCNOTIFY_H
31 #define SILCNOTIFY_H
32
33 /****s* silccore/SilcNotifyAPI/SilcNotifyPayload
34  *
35  * NAME
36  * 
37  *    typedef struct SilcNotifyPayloadStruct *SilcNotifyPayload;
38  *
39  * DESCRIPTION
40  *
41  *    This context is the actual Notify Payload and is allocated
42  *    by silc_notify_payload_parse and given as argument usually to
43  *    all silc_notify_payload_* functions.  It is freed by the
44  *    silc_notify_payload_free function.
45  *
46  ***/
47 typedef struct SilcNotifyPayloadStruct *SilcNotifyPayload;
48
49 /****d* silccore/SilcNotifyAPI/SilcNotifyType
50  *
51  * NAME
52  * 
53  *    typedef SilcUInt16 SilcNotifyType;
54  *
55  * DESCRIPTION
56  *
57  *    The notify type definition and all of the notify types.
58  *
59  * SOURCE
60  */
61 typedef SilcUInt16 SilcNotifyType;
62
63 /* SILC notify types. Server may send these notify types to client to
64    notify of some action. */
65 #define SILC_NOTIFY_TYPE_NONE            0  /* no specific type */
66 #define SILC_NOTIFY_TYPE_INVITE          1  /* invites/invite list change */
67 #define SILC_NOTIFY_TYPE_JOIN            2  /* "has joined channel" */
68 #define SILC_NOTIFY_TYPE_LEAVE           3  /* "has left channel" */
69 #define SILC_NOTIFY_TYPE_SIGNOFF         4  /* "signoff" */
70 #define SILC_NOTIFY_TYPE_TOPIC_SET       5  /* "topic has been changed" */
71 #define SILC_NOTIFY_TYPE_NICK_CHANGE     6  /* "has changed nickname" */
72 #define SILC_NOTIFY_TYPE_CMODE_CHANGE    7  /* "has changed channel mode" */
73 #define SILC_NOTIFY_TYPE_CUMODE_CHANGE   8  /* "has change mode" */
74 #define SILC_NOTIFY_TYPE_MOTD            9  /* message of the day */
75 #define SILC_NOTIFY_TYPE_CHANNEL_CHANGE  10 /* Channel's ID has changed */
76 #define SILC_NOTIFY_TYPE_SERVER_SIGNOFF  11 /* Server quitting SILC */
77 #define SILC_NOTIFY_TYPE_KICKED          12 /* Kicked from channel */
78 #define SILC_NOTIFY_TYPE_KILLED          13 /* Killed from the network */
79 #define SILC_NOTIFY_TYPE_UMODE_CHANGE    14 /* user mode was changed */
80 #define SILC_NOTIFY_TYPE_BAN             15 /* ban list change */
81 #define SILC_NOTIFY_TYPE_ERROR           16 /* error notify */
82 #define SILC_NOTIFY_TYPE_WATCH           17 /* watch notify */
83 /***/
84
85 /* Prototypes */
86
87 /****f* silccore/SilcNotifyAPI/silc_notify_payload_parse
88  *
89  * SYNOPSIS
90  *
91  *    SilcNotifyPayload
92  *    silc_notify_payload_parse(const unsigned char *payload,
93  *                              SilcUInt32 payload_len);
94  *
95  * DESCRIPTION
96  *
97  *    Parse notify payload buffer and return data into payload structure.
98  *    The `buffer' is the raw payload data.
99  *
100  ***/
101 SilcNotifyPayload silc_notify_payload_parse(const unsigned char *payload,
102                                             SilcUInt32 payload_len);
103
104 /****f* silccore/SilcNotifyAPI/silc_notify_payload_encode
105  *
106  * SYNOPSIS
107  *
108  *    SilcBuffer silc_notify_payload_encode(SilcNotifyType type,
109  *                                          SilcUInt32 argc,
110  *                                          va_list ap);
111  *
112  * DESCRIPTION
113  *
114  *    Encode notify payload with variable argument list. If `argc' is > 0
115  *    argument payloads will be associated to the notify payload. Variable
116  *    arguments must be {unsigned char *, SilcUInt32 (len)}.
117  *
118  ***/
119 SilcBuffer silc_notify_payload_encode(SilcNotifyType type, SilcUInt32 argc, 
120                                       va_list ap);
121
122 /****f* silccore/SilcNotifyAPI/silc_notify_payload_encode_args
123  *
124  * SYNOPSIS
125  *
126  *    SilcBuffer silc_notify_payload_encode_args(SilcNotifyType type,
127  *                                               SilcUInt32 argc,
128  *                                               SilcBuffer args);
129  *
130  * DESCRIPTION
131  *
132  *    Same as silc_notify_payload_encode but takes arguments from the `args'
133  *    encoded Argument Payload buffer.
134  *
135  ***/
136 SilcBuffer silc_notify_payload_encode_args(SilcNotifyType type, 
137                                            SilcUInt32 argc,
138                                            SilcBuffer args);
139
140 /****f* silccore/SilcNotifyAPI/silc_notify_payload_free
141  *
142  * SYNOPSIS
143  *
144  *    void silc_notify_payload_free(SilcNotifyPayload payload);
145  *
146  * DESCRIPTION
147  *
148  *    Frees the Notify Payload and all data in it.
149  *
150  ***/
151 void silc_notify_payload_free(SilcNotifyPayload payload);
152
153 /****f* silccore/SilcNotifyAPI/silc_notify_get_type
154  *
155  * SYNOPSIS
156  *
157  *    SilcNotifyType silc_notify_get_type(SilcNotifyPayload payload);
158  *
159  * DESCRIPTION
160  *
161  *    Return the notify type from the payload.
162  *
163  ***/
164 SilcNotifyType silc_notify_get_type(SilcNotifyPayload payload);
165
166 /****f* silccore/SilcNotifyAPI/silc_notify_get_arg_num
167  *
168  * SYNOPSIS
169  *
170  *    SilcUInt32 silc_notify_get_arg_num(SilcNotifyPayload payload);
171  *
172  * DESCRIPTION
173  *
174  *    Return the number of the arguments associated with the Notify Payload.
175  *
176  ***/
177 SilcUInt32 silc_notify_get_arg_num(SilcNotifyPayload payload);
178
179 /****f* silccore/SilcNotifyAPI/silc_notify_get_args
180  *
181  * SYNOPSIS
182  *
183  *    SilcArgumentPayload silc_notify_get_args(SilcNotifyPayload payload);
184  *
185  * DESCRIPTION
186  *
187  *    Return the Argument Payload containing the arguments from the
188  *    Notify Payload. The caller must not free it.
189  *
190  ***/
191 SilcArgumentPayload silc_notify_get_args(SilcNotifyPayload payload);
192
193 #endif