Initial revision
[silc.git] / lib / silccore / silcchannel.h
1 /*
2
3   silcchannel.h
4
5   Author: Pekka Riikonen <priikone@poseidon.pspt.fi>
6
7   Copyright (C) 1997 - 2000 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; either version 2 of the License, or
12   (at your option) any later version.
13   
14   This program is distributed in the hope that it will be useful,
15   but WITHOUT ANY WARRANTY; without even the implied warranty of
16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17   GNU General Public License for more details.
18
19 */
20
21 #ifndef SILCCHANNEL_H
22 #define SILCCHANNEL_H
23
24 /* Forward declaration for Channel Payload parsed from packet. The
25    actual structure is defined in source file and is private data. */
26 typedef struct SilcChannelPayloadStruct *SilcChannelPayload;
27
28 /* Forward declaration for Channel Key Payload parsed from packet. The
29    actual structure is defined in source file and is private data. */
30 typedef struct SilcChannelKeyPayloadStruct *SilcChannelKeyPayload;
31
32 /* Channel modes */
33 #define SILC_CHANNEL_MODE_NONE       0x0000
34 #define SILC_CHANNEL_MODE_PRIVATE    0x0001 /* private channel */
35 #define SILC_CHANNEL_MODE_SECRET     0x0002 /* secret channel */
36 #define SILC_CHANNEL_MODE_PRIVKEY    0x0004 /* channel has private key */
37 #define SILC_CHANNEL_MODE_INVITE     0x0008 /* invite only channel */
38
39 /* User modes on channel */
40 #define SILC_CHANNEL_UMODE_NONE      0x0000
41 #define SILC_CHANNEL_UMODE_CHANFO    0x0001 /* channel founder */
42 #define SILC_CHANNEL_UMODE_CHANOP    0x0002 /* channel operator */
43
44 /* Prototypes */
45 SilcChannelPayload silc_channel_parse_payload(SilcBuffer buffer);
46 SilcBuffer silc_channel_encode_payload(unsigned short nick_len,
47                                        unsigned char *nick,
48                                        unsigned short data_len,
49                                        unsigned char *data,
50                                        unsigned short iv_len,
51                                        unsigned char *iv,
52                                        SilcRng rng);
53 void silc_channel_free_payload(SilcChannelPayload payload);
54 unsigned char *silc_channel_get_nickname(SilcChannelPayload payload,
55                                          unsigned int *nick_len);
56 unsigned char *silc_channel_get_data(SilcChannelPayload payload,
57                                      unsigned int *data_len);
58 unsigned char *silc_channel_get_iv(SilcChannelPayload payload,
59                                    unsigned int *iv_len);
60 SilcChannelKeyPayload silc_channel_key_parse_payload(SilcBuffer buffer);
61 SilcBuffer silc_channel_key_encode_payload(unsigned short id_len,
62                                            unsigned char *id,
63                                            unsigned short cipher_len,
64                                            unsigned char *cipher,
65                                            unsigned short key_len,
66                                            unsigned char *key);
67 void silc_channel_key_free_payload(SilcChannelKeyPayload payload);
68 unsigned char *silc_channel_key_get_id(SilcChannelKeyPayload payload, 
69                                        unsigned int *id_len);
70 unsigned char *silc_channel_key_get_cipher(SilcChannelKeyPayload payload,
71                                            unsigned int *cipher_len);
72 unsigned char *silc_channel_key_get_key(SilcChannelKeyPayload payload,
73                                         unsigned int *key_len);
74
75 #endif