libidn  1.30
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.30"
55 
56 /* Error codes. */
57  typedef enum
58  {
60  /* Stringprep errors. */
66  /* Error in calling application. */
71  /* Internal errors. */
74  } Stringprep_rc;
75 
76 /* Flags used when calling stringprep(). */
77  typedef enum
78  {
83 
84 /* Steps in a stringprep profile. */
85  typedef enum
86  {
96 
97 # define STRINGPREP_MAX_MAP_CHARS 4
98 
100  {
101  uint32_t start;
102  uint32_t end; /* 0 if only one character */
103  uint32_t map[STRINGPREP_MAX_MAP_CHARS]; /* NULL if end is not 0 */
104  };
106 
108  {
112  };
114 
116  {
117  const char *name;
119  };
121 
123 
124 /* Profiles */
142 
143  /* Nameprep */
144 
146 
147 # define stringprep_nameprep(in, maxlen) \
148  stringprep(in, maxlen, 0, stringprep_nameprep)
149 
150 # define stringprep_nameprep_no_unassigned(in, maxlen) \
151  stringprep(in, maxlen, STRINGPREP_NO_UNASSIGNED, stringprep_nameprep)
152 
153  /* SASL */
154 
159 
160 # define stringprep_plain(in, maxlen) \
161  stringprep(in, maxlen, 0, stringprep_plain)
162 
163  /* Kerberos */
164 
166 
167 # define stringprep_kerberos5(in, maxlen) \
168  stringprep(in, maxlen, 0, stringprep_kerberos5)
169 
170  /* XMPP */
171 
175 
176 # define stringprep_xmpp_nodeprep(in, maxlen) \
177  stringprep(in, maxlen, 0, stringprep_xmpp_nodeprep)
178 # define stringprep_xmpp_resourceprep(in, maxlen) \
179  stringprep(in, maxlen, 0, stringprep_xmpp_resourceprep)
180 
181  /* iSCSI */
182 
185 
186 # define stringprep_iscsi(in, maxlen) \
187  stringprep(in, maxlen, 0, stringprep_iscsi)
188 
189  /* API */
190 
191  extern IDNAPI int stringprep_4i (uint32_t * ucs4, size_t * len,
192  size_t maxucs4len,
194  const Stringprep_profile * profile);
195  extern IDNAPI int stringprep_4zi (uint32_t * ucs4, size_t maxucs4len,
197  const Stringprep_profile * profile);
198  extern IDNAPI int stringprep (char *in, size_t maxlen,
200  const Stringprep_profile * profile);
201 
202  extern IDNAPI int stringprep_profile (const char *in,
203  char **out,
204  const char *profile,
206 
207  extern IDNAPI const char *stringprep_strerror (Stringprep_rc rc);
208 
209  extern IDNAPI const char *stringprep_check_version (const char
210  *req_version);
211 
212 /* Utility */
213 
214  extern IDNAPI int stringprep_unichar_to_utf8 (uint32_t c, char *outbuf);
215  extern IDNAPI uint32_t stringprep_utf8_to_unichar (const char *p);
216 
217  extern IDNAPI uint32_t *stringprep_utf8_to_ucs4 (const char *str,
218  ssize_t len,
219  size_t * items_written);
220  extern IDNAPI char *stringprep_ucs4_to_utf8 (const uint32_t * str,
221  ssize_t len,
222  size_t * items_read,
223  size_t * items_written);
224 
225  extern IDNAPI char *stringprep_utf8_nfkc_normalize (const char *str,
226  ssize_t len);
227  extern IDNAPI uint32_t *stringprep_ucs4_nfkc_normalize (const uint32_t * str,
228  ssize_t len);
229 
230  extern IDNAPI const char *stringprep_locale_charset (void);
231  extern IDNAPI char *stringprep_convert (const char *str,
232  const char *to_codeset,
233  const char *from_codeset);
234  extern IDNAPI char *stringprep_locale_to_utf8 (const char *str);
235  extern IDNAPI char *stringprep_utf8_to_locale (const char *str);
236 
237 # ifdef __cplusplus
238 }
239 # endif
240 
241 #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:1021
Stringprep_profile_steps
Definition: stringprep.h:85
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:445
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:111
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:77
#define stringprep_xmpp_resourceprep(in, maxlen)
Definition: stringprep.h:178
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:1074
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:167
IDNAPI const char * stringprep_check_version(const char *req_version)
Definition: version.c:53
const Stringprep_profile * tables
Definition: stringprep.h:118
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:186
#define stringprep_plain(in, maxlen)
Definition: stringprep.h:160
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:97
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:176
#define stringprep_nameprep(in, maxlen)
Definition: stringprep.h:147
Stringprep_profile_flags flags
Definition: stringprep.h:110
IDNAPI const Stringprep_table_element stringprep_rfc3454_A_1[]
Definition: rfc3454.c:13
const char * name
Definition: stringprep.h:117
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:1044
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:103
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:109
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:1091