]> jfr.im git - irc/rqf/shadowircd.git/blame - libratbox/include/ratbox_lib.h
Show reason for failed outgoing SSL handshakes to opers.
[irc/rqf/shadowircd.git] / libratbox / include / ratbox_lib.h
CommitLineData
b57f37fb 1/*
033be687 2 * $Id: ratbox_lib.h 25375 2008-05-16 15:19:51Z androsyn $
b57f37fb
WP
3 */
4
5#ifndef RB_LIB_H
6#define RB_LIB_H 1
7
8#include <librb-config.h>
9#include <stdio.h>
10#include <limits.h>
11#include <stdarg.h>
12#include <assert.h>
13#include <fcntl.h>
14#include <signal.h>
15#include <ctype.h>
16
17#ifdef __GNUC__
18#undef alloca
19#define alloca __builtin_alloca
20#else
21# ifdef _MSC_VER
22# include <malloc.h>
23# define alloca _alloca
24# else
25# if RB_HAVE_ALLOCA_H
26# include <alloca.h>
27# else
28# ifdef _AIX
29#pragma alloca
30# else
31# ifndef alloca /* predefined by HP cc +Olibcalls */
32char *alloca();
33# endif
34# endif
35# endif
36# endif
37#endif /* __GNUC__ */
38
39#ifdef __GNUC__
40
033be687
VY
41#ifdef rb_likely
42#undef rb_likely
b57f37fb 43#endif
033be687
VY
44#ifdef rb_unlikely
45#undef rb_unlikely
b57f37fb
WP
46#endif
47
48#if __GNUC__ == 2 && __GNUC_MINOR__ < 96
49# define __builtin_expect(x, expected_value) (x)
50#endif
51
033be687
VY
52#define rb_likely(x) __builtin_expect(!!(x), 1)
53#define rb_unlikely(x) __builtin_expect(!!(x), 0)
b57f37fb
WP
54
55#else /* !__GNUC__ */
56
57#define UNUSED(x) x
58
033be687
VY
59#ifdef rb_likely
60#undef rb_likely
b57f37fb 61#endif
033be687
VY
62#ifdef rb_unlikely
63#undef rb_unlikely
b57f37fb 64#endif
033be687
VY
65#define rb_likely(x) (x)
66#define rb_unlikely(x) (x)
b57f37fb
WP
67#endif
68
69
70
71#ifdef WIN32
72#include <process.h>
73
74#ifndef MAXPATHLEN
75#define MAXPATHLEN 128
76#endif
77
78
79#ifdef strerror
80#undef strerror
81#endif
82
83#define strerror(x) wsock_strerror(x)
84const char *wsock_strerror(int error);
85
86
87#define ENOBUFS WSAENOBUFS
88#define EINPROGRESS WSAEINPROGRESS
89#define EWOULDBLOCK WSAEWOULDBLOCK
90#define EMSGSIZE WSAEMSGSIZE
91#define EALREADY WSAEALREADY
92#define EISCONN WSAEISCONN
93#define EADDRINUSE WSAEADDRINUSE
94#define EAFNOSUPPORT WSAEAFNOSUPPORT
95
96#define pipe(x) _pipe(x, 1024, O_BINARY)
97#define ioctl(x,y,z) ioctlsocket(x,y, (u_long *)z)
98
99int setenv(const char *, const char *, int);
100int kill(int pid, int sig);
101#define WNOHANG 1
102pid_t waitpid(pid_t pid, int *status, int options);
103pid_t getpid(void);
104unsigned int geteuid(void);
105
106#ifndef SIGKILL
107#define SIGKILL SIGTERM
108#endif
109
110#endif /* WIN32 */
111
112
113
114#ifndef HOSTIPLEN
115#define HOSTIPLEN 53
116#endif
117
118#ifdef SOFT_ASSERT
119#ifdef __GNUC__
120#define lrb_assert(expr) do \
033be687
VY
121 if(rb_unlikely(!(expr))) { \
122 rb_lib_log( \
b57f37fb
WP
123 "file: %s line: %d (%s): Assertion failed: (%s)", \
124 __FILE__, __LINE__, __PRETTY_FUNCTION__, #expr); \
b57f37fb
WP
125 } \
126 while(0)
127#else
128#define lrb_assert(expr) do \
033be687
VY
129 if(rb_unlikely(!(expr))) { \
130 rb_lib_log(L_MAIN, \
b57f37fb
WP
131 "file: %s line: %d: Assertion failed: (%s)", \
132 __FILE__, __LINE__, #expr); \
b57f37fb
WP
133 } \
134 while(0)
135#endif
136#else
137#define lrb_assert(expr) assert(expr)
138#endif
139
b5d9e56c 140#ifdef RB_SOCKADDR_HAS_SA_LEN
b57f37fb
WP
141#define ss_len sa_len
142#endif
143
144#define GET_SS_FAMILY(x) (((struct sockaddr *)(x))->sa_family)
145
b5d9e56c 146#ifdef RB_SOCKADDR_HAS_SA_LEN
b57f37fb
WP
147#define SET_SS_LEN(x, y) do { \
148 struct sockaddr *storage; \
149 storage = ((struct sockaddr *)(x));\
150 storage->sa_len = (y); \
151 } while (0)
152#define GET_SS_LEN(x) (((struct sockaddr *)(x))->sa_len)
b5d9e56c 153#else /* !RB_SOCKADDR_HAS_SA_LEN */
b57f37fb
WP
154#define SET_SS_LEN(x, y) (((struct sockaddr *)(x))->sa_family = ((struct sockaddr *)(x))->sa_family)
155#ifdef RB_IPV6
156#define GET_SS_LEN(x) (((struct sockaddr *)(x))->sa_family == AF_INET ? sizeof(struct sockaddr_in) : sizeof(struct sockaddr_in6))
157#else
158#define GET_SS_LEN(x) (((struct sockaddr *)(x))->sa_family == AF_INET ? sizeof(struct sockaddr_in) : 0)
159#endif
160#endif
161
162#ifndef INADDRSZ
163#define INADDRSZ 4
164#endif
165
166#ifndef IN6ADDRSZ
167#define IN6ADDRSZ 16
168#endif
169
170#ifndef INT16SZ
171#define INT16SZ 2
172#endif
173
174
175typedef void log_cb(const char *buffer);
176typedef void restart_cb(const char *buffer);
177typedef void die_cb(const char *buffer);
178
179char *rb_ctime(const time_t, char *, size_t);
180char *rb_date(const time_t, char *, size_t);
181void rb_lib_log(const char *, ...);
182void rb_lib_restart(const char *, ...);
183void rb_lib_die(const char *, ...);
184void rb_set_time(void);
185const char *rb_lib_version(void);
186
187void rb_lib_init(log_cb * xilog, restart_cb * irestart, die_cb * idie, int closeall, int maxfds,
188 size_t dh_size, size_t fd_heap_size);
189void rb_lib_loop(long delay);
190
191time_t rb_current_time(void);
192const struct timeval *rb_current_time_tv(void);
193pid_t rb_spawn_process(const char *, const char **);
194
195char *rb_strtok_r(char *, const char *, char **);
196
197int rb_gettimeofday(struct timeval *, void *);
198
199void rb_sleep(unsigned int seconds, unsigned int useconds);
200char *rb_crypt(const char *, const char *);
201
202unsigned char *rb_base64_encode(const unsigned char *str, int length);
203unsigned char *rb_base64_decode(const unsigned char *str, int length, int *ret);
204
205
206
207#include <rb_tools.h>
208#include <rb_memory.h>
209#include <rb_commio.h>
210#include <rb_balloc.h>
211#include <rb_linebuf.h>
212#include <rb_snprintf.h>
213#include <rb_event.h>
214#include <rb_helper.h>
215#include <rb_rawbuf.h>
216#include <rb_patricia.h>
217
218#endif