source: code/icb.h@ b7bc432

Last change on this file since b7bc432 was b7bc432, checked in by Stuart Henderson <stu@…>, 11 years ago

permit whitespace in topic, otherwise sanitize to _

  • Property mode set to 100644
File size: 4.0 KB
Line 
1/*
2 * Copyright (c) 2009 Mike Belopuhov
3 *
4 * Permission to use, copy, modify, and distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 */
16
17#include <sys/queue.h>
18#include <sys/tree.h>
19
20#define ICB_MSGSIZE 256
21
22#define ICB_MAXGRPLEN 32
23#define ICB_MAXNICKLEN 32
24#define ICB_MAXPASSLEN 32
25#define ICB_MAXTOPICLEN 160
26#define ICB_MTABLEN 50 /* XXX */
27
28#define ICB_M_LOGIN 'a'
29#define ICB_M_OPEN 'b'
30#define ICB_M_PERSONAL 'c'
31#define ICB_M_STATUS 'd'
32enum {
33 STATUS_ARRIVE,
34 STATUS_BOOT,
35 STATUS_DEPART,
36 STATUS_HELP,
37 STATUS_NAME,
38 STATUS_NOBEEP,
39 STATUS_NOTIFY,
40 STATUS_SIGNON,
41 STATUS_SIGNOFF,
42 STATUS_STATUS,
43 STATUS_TOPIC,
44 STATUS_WARNING
45};
46#define ICB_M_ERROR 'e'
47#define ICB_M_IMPORTANT 'f'
48#define ICB_M_EXIT 'g'
49#define ICB_M_COMMAND 'h'
50#define ICB_M_CMDOUT 'i'
51enum {
52 CMDOUT_CO,
53 CMDOUT_EC,
54 CMDOUT_WG,
55 CMDOUT_WH,
56 CMDOUT_WL,
57};
58#define ICB_M_PROTO 'j'
59#define ICB_M_BEEP 'k'
60#define ICB_M_PING 'l'
61#define ICB_M_PONG 'm'
62#define ICB_M_NOOP 'n'
63
64#define ICB_M_SEP '\001'
65
66struct icb_group;
67
68struct icb_session {
69 uint64_t id;
70 char nick[ICB_MAXNICKLEN];
71 char client[ICB_MAXNICKLEN];
72 char host[MAXHOSTNAMELEN];
73 char buffer[ICB_MSGSIZE+1];
74 struct event ev;
75 struct bufferevent *bev;
76 struct icb_group *group;
77 size_t length;
78 time_t login;
79 time_t last;
80 int port;
81 uint32_t flags;
82#define SETF(t, f) ((t) |= (f))
83#define CLRF(t, f) ((t) &= ~(f))
84#define ISSETF(t, f) ((t) & (f))
85#define ICB_SF_PROTOSENT 0x01
86#define ICB_SF_LOGGEDIN 0x02
87#define ICB_SF_NOGROUP 0x08
88#define ICB_SF_NOBEEP 0x10
89#define ICB_SF_NOBEEP2 0x20
90
91 /* session tree */
92 RB_ENTRY(icb_session) node;
93
94 /* in-group linkage */
95 LIST_ENTRY(icb_session) entry;
96};
97
98struct icb_group {
99 char name[ICB_MAXGRPLEN];
100 char mpass[ICB_MAXPASSLEN];
101 char topic[ICB_MAXTOPICLEN];
102 LIST_ENTRY(icb_group) entry;
103 LIST_HEAD(, icb_session) sess;
104 struct icb_session *mod;
105};
106
107LIST_HEAD(icb_grlist, icb_group) groups;
108
109struct icbd_callbacks {
110 void (*drop)(struct icb_session *, char *);
111 void (*log)(struct icb_session *, int, const char *, ...);
112 void (*send)(struct icb_session *, char *, ssize_t);
113};
114
115#ifndef nitems
116#define nitems(_a) (sizeof((_a)) / sizeof((_a)[0]))
117#endif
118
119/* cmd.c */
120void *icb_cmd_lookup(char *);
121
122/* icb.c */
123struct icb_group *icb_addgroup(struct icb_session *, char *, char *);
124void icb_cmdout(struct icb_session *, int, char *);
125void icb_delgroup(struct icb_group *);
126void icb_error(struct icb_session *, const char *, ...);
127void icb_init(struct icbd_callbacks *);
128void icb_input(struct icb_session *);
129inline int icb_ismod(struct icb_group *, struct icb_session *);
130int icb_modpermit(struct icb_session *);
131int icb_pass(struct icb_group *, struct icb_session *,
132 struct icb_session *);
133void icb_privmsg(struct icb_session *, char *, char *);
134void icb_remove(struct icb_session *, char *);
135void icb_sendfmt(struct icb_session *, const char *, ...);
136void icb_start(struct icb_session *);
137void icb_status(struct icb_session *, int, const char *, ...);
138void icb_status_group(struct icb_group *, struct icb_session *,
139 int, const char *, ...);
140void icb_who(struct icb_session *, struct icb_group *);
141int icb_vis(char *, const char *, size_t, int);
142
143/* callbacks from icbd.c */
144void (*icb_drop)(struct icb_session *, char *);
145void (*icb_log)(struct icb_session *, int, const char *, ...);
146void (*icb_send)(struct icb_session *, char *, ssize_t);
Note: See TracBrowser for help on using the repository browser.