[go: up one dir, main page]

File: utility.h

package info (click to toggle)
sbnc 1.3.9-3
  • links: PTS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 8,156 kB
  • ctags: 4,719
  • sloc: ansic: 20,379; cpp: 14,175; sh: 12,783; tcl: 6,025; php: 448; makefile: 430; perl: 46; awk: 25
file content (178 lines) | stat: -rw-r--r-- 6,262 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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
/*******************************************************************************
 * shroudBNC - an object-oriented framework for IRC                            *
 * Copyright (C) 2005-2014 Gunnar Beutner                                      *
 *                                                                             *
 * This program is free software; you can redistribute it and/or               *
 * modify it under the terms of the GNU General Public License                 *
 * as published by the Free Software Foundation; either version 2              *
 * of the License, or (at your option) any later version.                      *
 *                                                                             *
 * This program is distributed in the hope that it will be useful,             *
 * but WITHOUT ANY WARRANTY; without even the implied warranty of              *
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               *
 * GNU General Public License for more details.                                *
 *                                                                             *
 * You should have received a copy of the GNU General Public License           *
 * along with this program; if not, write to the Free Software                 *
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. *
 *******************************************************************************/

#ifndef UTILITY_H
#define UTILITY_H

/**
 * command_t
 *
 * A command.
 */
typedef struct command_s {
	char *Category; /**< the command's category */
	char *Description; /**< a short description of the command */
	char *HelpText; /**< the command's help text */
} command_t;

/** A list of commands. */
typedef class CHashtable<command_t *, false> *commandlist_t;

SBNCAPI const char * ArgParseServerLine(const char *Data);
SBNCAPI const char *ArgTokenize(const char *Data);
SBNCAPI const char **ArgToArray(const char *Args);
SBNCAPI void ArgRejoinArray(const char **ArgV, int Index);
SBNCAPI const char **ArgDupArray(const char **ArgV);
SBNCAPI void ArgFree(const char *Args);
SBNCAPI void ArgFreeArray(const char **Array);
SBNCAPI const char *ArgGet(const char *Args, int Arg);
SBNCAPI int ArgCount(const char *Args);

/**
 * tokendata_t
 *
 * Used for storing tokenized strings.
 */
typedef struct tokendata_s {
	unsigned int Count; /**< number of tokens */
	size_t Pointers[32]; /**< relative pointers to individual tokens */
	char String[512]; /**< the tokenized string */
} tokendata_t;

/* Version 2 of some tokenization functions
 * these functions have some limitations:
 * -only up to 32 tokens per string are supported
 * -strings cannot be longer than 512 chars
 */
tokendata_t ArgTokenize2(const char *String);
const char **ArgToArray2(const tokendata_t& Tokens);
const char *ArgGet2(const tokendata_t& Tokens, unsigned int Arg);
unsigned int ArgCount2(const tokendata_t& Tokens);

SOCKET SocketAndConnect(const char *Host, unsigned int Port, const char *BindIp = NULL);
SOCKET SocketAndConnectResolved(const sockaddr *Host, const sockaddr *BindIp, int *error);

SOCKET CreateListener(unsigned int Port, const char *BindIp = NULL, int Family = AF_INET);

char *NickFromHostmask(const char *Hostmask);

const char *UtilMd5(const char *String, const char *Salt, bool BrokenAlgo = false);
const char *GenerateSalt(void);
const char *SaltFromHash(const char *Hash);

void DestroyString(char *String);

SBNCAPI void FlushCommands(commandlist_t *Commands);
SBNCAPI void AddCommand(commandlist_t *Commands, const char *Name, const char *Category, const char *Description, const char *HelpText);
SBNCAPI void DeleteCommand(commandlist_t *Commands, const char *Name);
SBNCAPI int CmpCommandT(const void *pA, const void *pB);

#define BNCVERSION SBNC_VERSION
#define INTERFACEVERSION 25

extern const char *g_ErrorFile;
extern unsigned int g_ErrorLine;

void StrTrim(char *String, char Character);

char *strmcpy(char *Destination, const char *Source, size_t Size);
char *strmcat(char *Destination, const char *Source, size_t Size);

#ifdef HAVE_IPV6
#	define SOCKADDR_LEN(Family) ((Family == AF_INET) ? sizeof(sockaddr_in) : sizeof(sockaddr_in6))
#	define INADDR_LEN(Family) ((Family == AF_INET) ? sizeof(in_addr) : sizeof(in6_addr))
#else /* HAVE_IPV6 */
#	define SOCKADDR_LEN(Family) (sizeof(sockaddr_in))
#	define INADDR_LEN(Family) (sizeof(in_addr))
#endif /* HAVE_IPV6 */

SBNCAPI const char *IpToString(sockaddr *Address);
SBNCAPI bool StringToIp(const char *IP, int Family, sockaddr *SockAddr, socklen_t Length);
SBNCAPI int CompareAddress(const sockaddr *pA, const sockaddr *pB);
SBNCAPI const sockaddr *HostEntToSockAddr(hostent *HostEnt);

int SetPermissions(const char *Filename, int Modes);

void FreeString(char *String);

void SSL_CTX_set_passwd_cb(SSL_CTX *Context);

#if defined(_DEBUG) && defined(_WIN32)
LONG WINAPI GuardPageHandler(EXCEPTION_POINTERS *Exception);
#endif /* defined(_DEBUG) && defined(_WIN32) */

#ifdef HAVE_POLL
#	include <sys/poll.h>
#else /* HAVE_POLL */
struct pollfd {
	int fd;
	short events;
	short revents;
};

#define POLLIN 001
#define POLLPRI 002
#define POLLOUT 004
#define POLLNORM POLLIN
#define POLLERR 010
#define POLLHUP 020
#define POLLNVAL 040

int poll(struct pollfd *fds, unsigned long nfds, int timo);
#endif /* HAVE_POLL */

int sn_getline(char *buf, size_t size);
int sn_getline_passwd(char *buf, size_t size);

SBNCAPI bool RcFailedInternal(int ReturnCode, const char *File, int Line);
SBNCAPI bool AllocFailedInternal(const void *Ptr, const char *File, int Line);

/**
 * RcFailed
 *
 * Checks whether the specified return code signifies
 * a failed function call (rc < 0).
 *
 * @param RC the return code
 */
#define RcFailed(RC) RcFailedInternal(RC, __FILE__, __LINE__)

/**
 * AllocFailed
 *
 * Checks whether the result of an allocation function
 * is NULL.
 *
 * @param Variable the variable holding the result
 */
#define AllocFailed(Variable) AllocFailedInternal(Variable, __FILE__, __LINE__)

#ifndef _WIN32
lt_dlhandle sbncLoadLibrary(const char *Filename);
#endif

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
    SBNCAPI void gfree(void *ptr);
#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* UTILITY_H */