source: code/icb.h@ bf02a60

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

add 'beep' and 'nobeep' support

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