libidn  1.32
stringprep.h
Go to the documentation of this file.
1 /* stringprep.h --- Header file for stringprep functions.
2  Copyright (C) 2002-2015 Simon Josefsson
3 
4  This file is part of GNU Libidn.
5 
6  GNU Libidn is free software: you can redistribute it and/or
7  modify it under the terms of either:
8 
9  * the GNU Lesser General Public License as published by the Free
10  Software Foundation; either version 3 of the License, or (at
11  your option) any later version.
12 
13  or
14 
15  * the GNU General Public License as published by the Free
16  Software Foundation; either version 2 of the License, or (at
17  your option) any later version.
18 
19  or both in parallel, as here.
20 
21  GNU Libidn is distributed in the hope that it will be useful,
22  but WITHOUT ANY WARRANTY; without even the implied warranty of
23  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24  General Public License for more details.
25 
26  You should have received copies of the GNU General Public License and
27  the GNU Lesser General Public License along with this program. If
28  not, see <http://www.gnu.org/licenses/>. */
29 
30 #ifndef STRINGPREP_H
31 # define STRINGPREP_H
32 
33 # ifndef IDNAPI
34 # if defined LIBIDN_BUILDING && defined HAVE_VISIBILITY && HAVE_VISIBILITY
35 # define IDNAPI __attribute__((__visibility__("default")))
36 # elif defined LIBIDN_BUILDING && defined _MSC_VER && ! defined LIBIDN_STATIC
37 # define IDNAPI __declspec(dllexport)
38 # elif defined _MSC_VER && ! defined LIBIDN_STATIC
39 # define IDNAPI __declspec(dllimport)
40 # else
41 # define IDNAPI
42 # endif
43 # endif
44 
45 # include <stddef.h> /* size_t */
46 # include <sys/types.h> /* ssize_t */
47 # include <idn-int.h> /* uint32_t */
48 
49 # ifdef __cplusplus
50 extern "C"
51 {
52 # endif
53 
54 # define STRINGPREP_VERSION "1.32"
55 
56 /* Error codes. */
57  typedef enum
58  {
60  /* Stringprep errors. */
66  /* Error in calling application. */
72  /* Internal errors. */
75  } Stringprep_rc;
76 
77 /* Flags used when calling stringprep(). */
78  typedef enum
79  {
84 
85 /* Steps in a stringprep profile. */
86  typedef enum
87  {
97 
98 # define STRINGPREP_MAX_MAP_CHARS 4
99 
101  {
102  uint32_t start;
103  uint32_t end; /* 0 if only one character */
104  uint32_t map[STRINGPREP_MAX_MAP_CHARS]; /* NULL if end is not 0 */
105  };
107 
109  {
113  };
115 
117  {
118  const char *name;
120  };
122 
124 
125 /* Profiles */
143 
144  /* Nameprep */
145 
147 
148 # define stringprep_nameprep(in, maxlen) \
149  stringprep(in, maxlen, 0, stringprep_nameprep)
150 
151 # define stringprep_nameprep_no_unassigned(in, maxlen) \
152  stringprep(in, maxlen, STRINGPREP_NO_UNASSIGNED, stringprep_nameprep)
153 
154  /* SASL */
155 
160 
161 # define stringprep_plain(in, maxlen) \
162  stringprep(in, maxlen, 0, stringprep_plain)
163 
164  /* Kerberos */
165 
167 
168 # define stringprep_kerberos5(in, maxlen) \
169  stringprep(in, maxlen, 0, stringprep_kerberos5)
170 
171  /* XMPP */
172 
176 
177 # define stringprep_xmpp_nodeprep(in, maxlen) \
178  stringprep(in, maxlen, 0, stringprep_xmpp_nodeprep)
179 # define stringprep_xmpp_resourceprep(in, maxlen) \
180  stringprep(in, maxlen, 0, stringprep_xmpp_resourceprep)
181 
182  /* iSCSI */
183 
186 
187 # define stringprep_iscsi(in, maxlen) \
188  stringprep(in, maxlen, 0, stringprep_iscsi)
189 
190  /* API */
191 
192  extern IDNAPI int stringprep_4i (uint32_t * ucs4, size_t * len,
193  size_t maxucs4len,
195  const Stringprep_profile * profile);
196  extern IDNAPI int stringprep_4zi (uint32_t * ucs4, size_t maxucs4len,
198  const Stringprep_profile * profile);
199  extern IDNAPI int stringprep (char *in, size_t maxlen,
201  const Stringprep_profile * profile);
202 
203  extern IDNAPI int stringprep_profile (const char *in,
204  char **out,
205  const char *profile,
207 
208  extern IDNAPI const char *stringprep_strerror (Stringprep_rc rc);
209 
210  extern IDNAPI const char *stringprep_check_version (const char
211  *req_version);
212 
213 /* Utility */
214 
215  extern IDNAPI int stringprep_unichar_to_utf8 (uint32_t c, char *outbuf);
216  extern IDNAPI uint32_t stringprep_utf8_to_unichar (const char *p);
217 
218  extern IDNAPI uint32_t *stringprep_utf8_to_ucs4 (const char *str,
219  ssize_t len,
220  size_t * items_written);
221  extern IDNAPI char *stringprep_ucs4_to_utf8 (const uint32_t * str,
222  ssize_t len,
223  size_t * items_read,
224  size_t * items_written);
225 
226  extern IDNAPI char *stringprep_utf8_nfkc_normalize (const char *str,
227  ssize_t len);
228  extern IDNAPI uint32_t *stringprep_ucs4_nfkc_normalize (const uint32_t * str,
229  ssize_t len);
230 
231  extern IDNAPI const char *stringprep_locale_charset (void);
232  extern IDNAPI char *stringprep_convert (const char *str,
233  const char *to_codeset,
234  const char *from_codeset);
235  extern IDNAPI char *stringprep_locale_to_utf8 (const char *str);
236  extern IDNAPI char *stringprep_utf8_to_locale (const char *str);
237 
238 # ifdef __cplusplus
239 }
240 # endif
241 
242 #endif /* STRINGPREP_H */
IDNAPI const Stringprep_table_element stringprep_rfc3454_C_5[]
Definition: rfc3454.c:3752
IDNAPI int stringprep_4zi(uint32_t *ucs4, size_t maxucs4len, Stringprep_profile_flags flags, const Stringprep_profile *profile)
Definition: stringprep.c:327
IDNAPI uint32_t * stringprep_utf8_to_ucs4(const char *str, ssize_t len, size_t *items_written)
Definition: nfkc.c:1024
Stringprep_profile_steps
Definition: stringprep.h:86
IDNAPI const Stringprep_table_element stringprep_rfc3454_C_3[]
Definition: rfc3454.c:3709
IDNAPI int stringprep_profile(const char *in, char **out, const char *profile, Stringprep_profile_flags flags)
Definition: stringprep.c:447
IDNAPI const Stringprep_table_element stringprep_rfc3454_C_7[]
Definition: rfc3454.c:3778
IDNAPI const Stringprep_table_element stringprep_rfc3454_C_4[]
Definition: rfc3454.c:3723
IDNAPI int stringprep_4i(uint32_t *ucs4, size_t *len, size_t maxucs4len, Stringprep_profile_flags flags, const Stringprep_profile *profile)
Definition: stringprep.c:146
const Stringprep_table_element * table
Definition: stringprep.h:112
IDNAPI char * stringprep_convert(const char *str, const char *to_codeset, const char *from_codeset)
Definition: toutf8.c:116
Stringprep_profile_flags
Definition: stringprep.h:78
#define stringprep_xmpp_resourceprep(in, maxlen)
Definition: stringprep.h:179
IDNAPI const Stringprep_table_element stringprep_rfc3454_B_2[]
Definition: rfc3454.c:456
IDNAPI const Stringprep_table_element stringprep_rfc3454_D_1[]
Definition: rfc3454.c:3846
IDNAPI int stringprep(char *in, size_t maxlen, Stringprep_profile_flags flags, const Stringprep_profile *profile)
Definition: stringprep.c:367
IDNAPI const Stringprep_profiles stringprep_profiles[]
Definition: profiles.c:33
IDNAPI const Stringprep_profile stringprep_trace[]
Definition: profiles.c:169
IDNAPI const Stringprep_table_element stringprep_rfc3454_C_1_2[]
Definition: rfc3454.c:3524
IDNAPI char * stringprep_utf8_nfkc_normalize(const char *str, ssize_t len)
Definition: nfkc.c:1087
IDNAPI const Stringprep_table_element stringprep_saslprep_space_map[]
Definition: profiles.c:280
IDNAPI char * stringprep_locale_to_utf8(const char *str)
Definition: toutf8.c:143
IDNAPI const Stringprep_table_element stringprep_rfc3454_C_8[]
Definition: rfc3454.c:3791
#define stringprep_kerberos5(in, maxlen)
Definition: stringprep.h:168
IDNAPI const char * stringprep_check_version(const char *req_version)
Definition: version.c:53
const Stringprep_profile * tables
Definition: stringprep.h:119
IDNAPI char * stringprep_utf8_to_locale(const char *str)
Definition: toutf8.c:159
IDNAPI uint32_t stringprep_utf8_to_unichar(const char *p)
Definition: nfkc.c:983
#define stringprep_iscsi(in, maxlen)
Definition: stringprep.h:187
#define stringprep_plain(in, maxlen)
Definition: stringprep.h:161
IDNAPI const Stringprep_table_element stringprep_rfc3454_C_6[]
Definition: rfc3454.c:3763
IDNAPI const Stringprep_table_element stringprep_rfc3454_C_2_2[]
Definition: rfc3454.c:3682
IDNAPI const Stringprep_table_element stringprep_rfc3454_B_1[]
Definition: rfc3454.c:419
IDNAPI const char * stringprep_strerror(Stringprep_rc rc)
IDNAPI const Stringprep_table_element stringprep_rfc3454_D_2[]
Definition: rfc3454.c:3890
#define STRINGPREP_MAX_MAP_CHARS
Definition: stringprep.h:98
Stringprep_rc
Definition: stringprep.h:57
IDNAPI const char * stringprep_locale_charset(void)
Definition: toutf8.c:85
#define stringprep_xmpp_nodeprep(in, maxlen)
Definition: stringprep.h:177
#define stringprep_nameprep(in, maxlen)
Definition: stringprep.h:148
Stringprep_profile_flags flags
Definition: stringprep.h:111
IDNAPI const Stringprep_table_element stringprep_rfc3454_A_1[]
Definition: rfc3454.c:13
const char * name
Definition: stringprep.h:118
IDNAPI const Stringprep_table_element stringprep_rfc3454_C_9[]
Definition: rfc3454.c:3834
IDNAPI char * stringprep_ucs4_to_utf8(const uint32_t *str, ssize_t len, size_t *items_read, size_t *items_written)
Definition: nfkc.c:1057
IDNAPI const Stringprep_table_element stringprep_iscsi_prohibit[]
Definition: profiles.c:185
IDNAPI const Stringprep_table_element stringprep_rfc3454_C_1_1[]
Definition: rfc3454.c:3473
uint32_t map[STRINGPREP_MAX_MAP_CHARS]
Definition: stringprep.h:104
IDNAPI const Stringprep_table_element stringprep_xmpp_nodeprep_prohibit[]
Definition: profiles.c:94
#define IDNAPI
Definition: stringprep.h:41
IDNAPI int stringprep_unichar_to_utf8(uint32_t c, char *outbuf)
Definition: nfkc.c:1000
IDNAPI const Stringprep_profile stringprep_saslprep[]
Definition: profiles.c:301
IDNAPI const Stringprep_table_element stringprep_rfc3454_C_2_1[]
Definition: rfc3454.c:3609
Stringprep_profile_steps operation
Definition: stringprep.h:110
IDNAPI const Stringprep_table_element stringprep_rfc3454_B_3[]
Definition: rfc3454.c:2484
IDNAPI uint32_t * stringprep_ucs4_nfkc_normalize(const uint32_t *str, ssize_t len)
Definition: nfkc.c:1104