libsrsirc  0.0.14
Lightweight, cross-platform IRC library
util.h
Go to the documentation of this file.
1 /* util.h - Interface to misc. useful functions related to IRC
2  * libsrsirc - a lightweight serious IRC lib - (C) 2012-15, Timo Buhrmester
3  * See README for contact-, COPYING for license information. */
4 
5 #ifndef LIBSRSIRC_IRC_UTIL_H
6 #define LIBSRSIRC_IRC_UTIL_H 1
7 
8 
9 #include <stdbool.h>
10 #include <stddef.h>
11 
12 #include <libsrsirc/defs.h>
13 
14 
15 /* Overview:
16  *
17  * void lsi_ut_ident2nick(char *dest, size_t dest_sz, const char *ident);
18  * void lsi_ut_ident2uname(char *dest, size_t dest_sz, const char *ident);
19  * void lsi_ut_ident2host(char *dest, size_t dest_sz, const char *ident);
20  *
21  * int lsi_ut_istrcmp(const char *n1, const char *n2, int casemap);
22  * int lsi_ut_istrncmp(const char *n1, const char *n2, size_t len, int casemap);
23  * char lsi_ut_tolower(char c, int casemap);
24  * void lsi_ut_strtolower(char *dest, size_t destsz, const char *str, int cmap);
25  *
26  * void lsi_ut_parse_hostspec(char *hoststr, size_t hoststr_sz, uint16_t *port,
27  * bool *ssl, const char *hostspec);
28  * bool lsi_ut_parse_pxspec(int *ptype, char *hoststr, size_t hoststr_sz,
29  * uint16_t *port, const char *pxspec);
30  *
31  * char *lsi_ut_sndumpmsg(char *dest, size_t dest_sz, void *tag, tokarr *msg);
32  * void lsi_ut_dumpmsg(void *tag, tokarr *msg);
33  *
34  * bool lsi_ut_conread(tokarr *msg, void *tag);
35  * void lsi_ut_mut_nick(char *nick, size_t nick_sz);
36  *
37  * char **ut_parse_005_cmodes(const char *const *arr, size_t argcnt,
38  * size_t *num, const char *modepfx005chr, const char *const *chmodes);
39  *
40  * tokarr *lsi_ut_clonearr(tokarr *arr);
41  * void lsi_ut_freearr(tokarr *arr);
42  */
43 
54 void lsi_ut_ident2nick(char *dest, size_t dest_sz, const char *ident);
55 
59 void lsi_ut_ident2uname(char *dest, size_t dest_sz, const char *ident);
60 
64 void lsi_ut_ident2host(char *dest, size_t dest_sz, const char *ident);
65 
72 int lsi_ut_istrcmp(const char *n1, const char *n2, int casemap);
73 
75 int lsi_ut_istrncmp(const char *n1, const char *n2, size_t len, int casemap);
76 
78 char lsi_ut_tolower(char c, int casemap);
79 
85 void lsi_ut_strtolower(char *dest, size_t destsz, const char *str, int casemap);
86 
95 void lsi_ut_parse_hostspec(char *hoststr, size_t hoststr_sz, uint16_t *port,
96  bool *ssl, const char *hostspec);
97 
112 bool lsi_ut_parse_pxspec(int *ptype, char *hoststr, size_t hoststr_sz,
113  uint16_t *port, const char *pxspec);
114 
125 char *lsi_ut_sndumpmsg(char *dest, size_t dest_sz, void *tag, tokarr *msg);
126 
128 void lsi_ut_dumpmsg(void *tag, tokarr *msg);
129 
134 bool lsi_ut_conread(tokarr *msg, void *tag);
135 
139 void lsi_ut_mut_nick(char *nick, size_t nick_sz);
140 
186 char **lsi_ut_parse_MODE(irc *ctx, tokarr *msg, size_t *num, bool is324);
187 
195 int lsi_ut_classify_chanmode(irc *ctx, char c);
196 
201 
204 void lsi_ut_freearr(tokarr *arr);
205 
220 char *lsi_ut_snrcmsg(char *dest, size_t destsz, tokarr *msg, bool coltr);
221 
236 bool lsi_ut_tokenize(char *buf, tokarr *tok);
237 
245 const char *lsi_ut_casemap_nam(int cm);
246 
263 bool lsi_ut_ischan(irc *ctx, const char *str);
264 
267 #endif /* LIBSRSIRC_IRC_UTIL_H */
bool lsi_ut_conread(tokarr *msg, void *tag)
dump-to-stderr conread handler (see irc_regcb_conread())
char lsi_ut_tolower(char c, int casemap)
casemap-aware translate a char to lowercase, if uppercase
void * tag
Opaque user (as in, libsrsirc user) data.
Definition: irc_track.h:51
char * lsi_ut_sndumpmsg(char *dest, size_t dest_sz, void *tag, tokarr *msg)
glue a tokenized message back together into a single line
void lsi_ut_mut_nick(char *nick, size_t nick_sz)
Default alternative nickname generator.
void lsi_ut_ident2uname(char *dest, size_t dest_sz, const char *ident)
does the same as lsi_ut_ident2nick, just for the user part
bool lsi_ut_ischan(irc *ctx, const char *str)
Determine whether a given string is a channel.
const char * lsi_ut_casemap_nam(int cm)
Determine the name of a given case mapping.
tokarr * lsi_ut_clonearr(tokarr *arr)
deep-copy a tokarr (usually containing a tokenized irc msg)
struct irc_s irc
IRC context; pointers to this are our IRC context handle type.
Definition: defs.h:144
void lsi_ut_freearr(tokarr *arr)
free a tokarr (as obtained by lsi_ut_clonearr())
void lsi_ut_ident2nick(char *dest, size_t dest_sz, const char *ident)
Extract the nick from a nick[!user][@host]-style identity.
void lsi_ut_strtolower(char *dest, size_t destsz, const char *str, int casemap)
casemap-aware translate a string to lowercase
char * tokarr[18]
Field array for the parts of incoming IRC protocol messages.
Definition: defs.h:174
void lsi_ut_ident2host(char *dest, size_t dest_sz, const char *ident)
does the same as lsi_ut_ident2nick, just for the host part
int lsi_ut_istrcmp(const char *n1, const char *n2, int casemap)
case-insensitively compare strings, taking case mapping into account.
const char * nick
Nickname of the user.
Definition: irc_track.h:46
int lsi_ut_classify_chanmode(irc *ctx, char c)
Determine class of a channel mode.
bool lsi_ut_parse_pxspec(int *ptype, char *hoststr, size_t hoststr_sz, uint16_t *port, const char *pxspec)
parse a "proxy specifier".
void lsi_ut_parse_hostspec(char *hoststr, size_t hoststr_sz, uint16_t *port, bool *ssl, const char *hostspec)
parse a "host spec" (i.e. something "host:port"-ish)
char ** lsi_ut_parse_MODE(irc *ctx, tokarr *msg, size_t *num, bool is324)
Dissect a MODE message, correlating mode chars with their arguments.
void lsi_ut_dumpmsg(void *tag, tokarr *msg)
Like lsi_ut_sndumpmsg(), but print the result to stderr.
int lsi_ut_istrncmp(const char *n1, const char *n2, size_t len, int casemap)
like lsi_ut_istrcmp, but compare only a maximum of len chars
bool lsi_ut_tokenize(char *buf, tokarr *tok)
In-place field-split an IRC protocol message and populate a tokarr.
char * lsi_ut_snrcmsg(char *dest, size_t destsz, tokarr *msg, bool coltr)
Reconstruct a valid protocol message from a tokarr.