source: code/icb.h@ ee0e95f

Last change on this file since ee0e95f was 7882a6f, checked in by Mike Belopuhov <mike@…>, 11 years ago

Get rid of the icbd callbacks interface

I believe the idea was initially to have both icb and irc in one
daemon but that's not going to happen.

  • Property mode set to 100644
File size: 3.8 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
19/*
20 * ICB packet has the following format: <length><type><data>
21 * <lenght> is one byte length of the packet excluding the <lenght> byte;
22 * <type> is one byte type of the packet;
23 * <data> might not be null-terminated.
24 */
25#define ICB_MSGSIZE 256
26
27#define ICB_MAXGRPLEN 32
28#define ICB_MAXNICKLEN 32
29#define ICB_MAXPASSLEN 32
30#define ICB_MAXTOPICLEN 160
31#define ICB_MAXHOSTLEN 40
32#define ICB_MTABLEN 50 /* XXX */
33
34#define ICB_M_LOGIN 'a'
35#define ICB_M_OPEN 'b'
36#define ICB_M_PERSONAL 'c'
37#define ICB_M_STATUS 'd'
38enum {
39 STATUS_ARRIVE,
40 STATUS_BOOT,
41 STATUS_DEPART,
42 STATUS_HELP,
43 STATUS_NAME,
44 STATUS_NOBEEP,
45 STATUS_NOTIFY,
46 STATUS_SIGNON,
47 STATUS_SIGNOFF,
48 STATUS_STATUS,
49 STATUS_TOPIC,
50 STATUS_WARNING
51};
52#define ICB_M_ERROR 'e'
53#define ICB_M_IMPORTANT 'f'
54#define ICB_M_EXIT 'g'
55#define ICB_M_COMMAND 'h'
56#define ICB_M_CMDOUT 'i'
57enum {
58 CMDOUT_CO,
59 CMDOUT_EC,
60 CMDOUT_WG,
61 CMDOUT_WH,
62 CMDOUT_WL,
63};
64#define ICB_M_PROTO 'j'
65#define ICB_M_BEEP 'k'
66#define ICB_M_PING 'l'
67#define ICB_M_PONG 'm'
68#define ICB_M_NOOP 'n'
69
70#define ICB_M_SEP '\001'
71
72struct icb_group;
73
74struct icb_session {
75 char nick[ICB_MAXNICKLEN];
76 char client[ICB_MAXNICKLEN];
77 char host[ICB_MAXHOSTLEN];
78 char hostname[MAXHOSTNAMELEN];
79 char buffer[ICB_MSGSIZE];
80 struct event ev;
81 struct bufferevent *bev;
82 struct icb_group *group;
83 size_t length;
84 size_t rlen;
85 time_t login;
86 time_t last;
87 int port;
88 uint32_t flags;
89#define SETF(t, f) ((t) |= (f))
90#define CLRF(t, f) ((t) &= ~(f))
91#define ISSETF(t, f) ((t) & (f))
92#define ICB_SF_PROTOSENT 0x01
93#define ICB_SF_LOGGEDIN 0x02
94#define ICB_SF_NOGROUP 0x08
95#define ICB_SF_NOBEEP 0x10
96#define ICB_SF_NOBEEP2 0x20
97
98 /* in-group linkage */
99 LIST_ENTRY(icb_session) entry;
100};
101
102struct icb_group {
103 char name[ICB_MAXGRPLEN];
104 char mpass[ICB_MAXPASSLEN];
105 char topic[ICB_MAXTOPICLEN];
106 LIST_ENTRY(icb_group) entry;
107 LIST_HEAD(, icb_session) sess;
108 struct icb_session *mod;
109};
110
111LIST_HEAD(icb_grlist, icb_group) groups;
112
113#ifndef nitems
114#define nitems(_a) (sizeof((_a)) / sizeof((_a)[0]))
115#endif
116
117/* cmd.c */
118void * icb_cmd_lookup(char *);
119
120/* icb.c */
121struct icb_group *
122 icb_addgroup(struct icb_session *, char *, char *);
123void icb_cmdout(struct icb_session *, int, char *);
124void icb_delgroup(struct icb_group *);
125void icb_error(struct icb_session *, const char *, ...);
126void icb_init(void);
127void icb_input(struct icb_session *);
128inline int icb_ismod(struct icb_group *, struct icb_session *);
129int icb_modpermit(struct icb_session *, int);
130int icb_pass(struct icb_group *, struct icb_session *,
131 struct icb_session *);
132void icb_privmsg(struct icb_session *, char *, char *);
133void icb_remove(struct icb_session *, char *);
134void icb_sendfmt(struct icb_session *, const char *, ...);
135void icb_start(struct icb_session *);
136void icb_status(struct icb_session *, int, const char *, ...);
137void icb_status_group(struct icb_group *, struct icb_session *,
138 int, const char *, ...);
139void icb_who(struct icb_session *, struct icb_group *);
140int icb_vis(char *, const char *, size_t, int);
Note: See TracBrowser for help on using the repository browser.