File: io.h

package info (click to toggle)
ratbox-services 1.2.4%2Brepack-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 11,760 kB
  • ctags: 6,989
  • sloc: ansic: 76,435; sh: 17,527; cpp: 3,029; perl: 1,048; makefile: 740; pascal: 607; yacc: 256; lex: 232
file content (125 lines) | stat: -rw-r--r-- 3,932 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/* $Id: io.h 26911 2010-02-22 19:36:09Z leeh $ */
#ifndef INCLUDED_io_h
#define INCLUDED_io_h

struct client;
struct conf_oper;

struct send_queue
{
	const char *buf;
	int len;
	int pos;
};

struct lconn
{
	struct client *client_p;
	char *name;
	char *sid;
        char *pass;

	int fd;
	int flags;
	unsigned int privs;		/* privs as an oper */
	unsigned int sprivs;		/* privs on services */
	int watchflags;
	time_t first_time;
	time_t last_time;

        struct conf_oper *oper;

	void (*io_read)(struct lconn *);
	int (*io_write)(struct lconn *);
	void (*io_close)(struct lconn *);

	char recvbuf[BUFSIZE+1];
	size_t recvbuf_offset;

	dlink_list sendq;
};

extern struct lconn *server_p;
extern dlink_list connection_list;

#define CONN_CONNECTING		0x0001
#define CONN_DCCIN		0x0002
#define CONN_DCCOUT		0x0004
#define CONN_HANDSHAKE          0x0008
#define CONN_DEAD		0x0010
#define CONN_SENTPING           0x0020
#define CONN_TS			0x0040
#define CONN_CAP_SERVICE	0x0080
#define CONN_CAP_RSFNC		0x0100
#define CONN_CAP_TB		0x0200
#define CONN_TS6		0x0400
/* CONTINUES ... */

#define ConnConnecting(x)	((x)->flags & CONN_CONNECTING)
#define ConnDccIn(x)		((x)->flags & CONN_DCCIN)
#define ConnDccOut(x)		((x)->flags & CONN_DCCOUT)
#define ConnHandshake(x)	((x)->flags & CONN_HANDSHAKE)
#define ConnDead(x)		((x)->flags & CONN_DEAD)
#define ConnSentPing(x)		((x)->flags & CONN_SENTPING)
#define ConnTS(x)		((x)->flags & CONN_TS)
#define ConnTS6(x)		((x)->flags & CONN_TS6)
#define ConnCapService(x)	((x)->flags & CONN_CAP_SERVICE)
#define ConnCapRSFNC(x)		((x)->flags & CONN_CAP_RSFNC)
#define ConnCapTB(x)		((x)->flags & CONN_CAP_TB)

#define SetConnConnecting(x)	((x)->flags |= CONN_CONNECTING)
#define SetConnDccIn(x)		((x)->flags |= CONN_DCCIN)
#define SetConnDccOut(x)	((x)->flags |= CONN_DCCOUT)
#define SetConnHandshake(x)	((x)->flags |= CONN_HANDSHAKE)
#define SetConnDead(x)		((x)->flags |= CONN_DEAD)
#define SetConnSentPing(x)	((x)->flags |= CONN_SENTPING)
#define SetConnTS(x)		((x)->flags |= CONN_TS)
#define SetConnTS6(x)		((x)->flags |= CONN_TS6)

#define ClearConnConnecting(x)	((x)->flags &= ~CONN_CONNECTING)
#define ClearConnHandshake(x)	((x)->flags &= ~CONN_HANDSHAKE)
#define ClearConnSentPing(x)	((x)->flags &= ~CONN_SENTPING)

/* server flags */
#define CONN_FLAGS_UNTERMINATED	0x01000
#define CONN_FLAGS_EOB		0x02000
#define CONN_FLAGS_SENTBURST	0x04000
/* CONTINUES ... */

#define SetConnSentBurst(x)	((x)->flags |= CONN_FLAGS_SENTBURST)
#define SetConnEOB(x)		((x)->flags |= CONN_FLAGS_EOB)

#define finished_bursting	((server_p) && (server_p->flags & CONN_FLAGS_EOB))
#define sent_burst		((server_p) && (server_p->flags & CONN_FLAGS_SENTBURST))

/* user flags */
#define CONN_FLAGS_AUTH		0x10000
#define CONN_FLAGS_CHAT		0x20000

#define UserAuth(x)		((x)->flags & CONN_FLAGS_AUTH)
#define SetUserAuth(x)		((x)->flags |= CONN_FLAGS_AUTH)
#define UserChat(x)		((x)->flags & CONN_FLAGS_CHAT)
#define SetUserChat(x)		((x)->flags |= CONN_FLAGS_CHAT)
#define ClearUserChat(x)	((x)->flags &= ~CONN_FLAGS_CHAT)

extern void read_io(void);

extern void connect_to_server(void *unused);
extern void connect_to_client(struct client *client_p, struct conf_oper *oper_p,
				const char *host, int port);
extern void connect_from_client(struct client *client_p, struct conf_oper *oper_p,
				const char *servicenick);

extern void PRINTFLIKE(1, 2) sendto_server(const char *format, ...);
extern void PRINTFLIKE(2, 3) sendto_one(struct lconn *, const char *format, ...);
extern void PRINTFLIKE(1, 2) sendto_all(const char *format, ...);
extern void PRINTFLIKE(2, 3) sendto_all_chat(struct lconn *, const char *format, ...);

extern int sock_create(int);
extern int sock_open(const char *host, int port, const char *vhost, int type);
extern void sock_close(struct lconn *conn_p);
extern int sock_write(struct lconn *conn_p, const char *buf, size_t len);

extern unsigned long get_sendq(struct lconn *conn_p);

#endif