source: code/icb.h@ ab3bb32

Last change on this file since ab3bb32 was 1c7657c, checked in by Stuart Henderson <stu@…>, 8 years ago

don't inline icb_ismod

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