libidn: stringprep.h Source File

libidn 1.29

- Main Page
- Data Structures
- Files

- File List
- Globals

stringprep.h
Go to the documentation of this file.
1 /* stringprep.h --- Header file for stringprep functions.
2 Copyright (C) 2002-2014 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.29"
55
56 /* Error codes. */
57 typedef enum
58 {
59 STRINGPREP_OK = 0,
60 /* Stringprep errors. */
61 STRINGPREP_CONTAINS_UNASSIGNED = 1,
62 STRINGPREP_CONTAINS_PROHIBITED = 2,
63 STRINGPREP_BIDI_BOTH_L_AND_RAL = 3,
64 STRINGPREP_BIDI_LEADTRAIL_NOT_RAL = 4,
65 STRINGPREP_BIDI_CONTAINS_PROHIBITED = 5,
66 /* Error in calling application. */
67 STRINGPREP_TOO_SMALL_BUFFER = 100,
68 STRINGPREP_PROFILE_ERROR = 101,
69 STRINGPREP_FLAG_ERROR = 102,
70 STRINGPREP_UNKNOWN_PROFILE = 103,
71 /* Internal errors. */
72 STRINGPREP_NFKC_FAILED = 200,
73 STRINGPREP_MALLOC_ERROR = 201
74 } Stringprep_rc;
75
76 /* Flags used when calling stringprep(). */
77 typedef enum
78 {
79 STRINGPREP_NO_NFKC = 1,
80 STRINGPREP_NO_BIDI = 2,
81 STRINGPREP_NO_UNASSIGNED = 4
82 } Stringprep_profile_flags;
83
84 /* Steps in a stringprep profile. */
85 typedef enum
86 {
87 STRINGPREP_NFKC = 1,
88 STRINGPREP_BIDI = 2,
89 STRINGPREP_MAP_TABLE = 3,
90 STRINGPREP_UNASSIGNED_TABLE = 4,
91 STRINGPREP_PROHIBIT_TABLE = 5,
92 STRINGPREP_BIDI_PROHIBIT_TABLE = 6,
93 STRINGPREP_BIDI_RAL_TABLE = 7,
94 STRINGPREP_BIDI_L_TABLE = 8
95 } Stringprep_profile_steps;
96
97 # define STRINGPREP_MAX_MAP_CHARS 4
98
99 struct Stringprep_table_element
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 };
105 typedef struct Stringprep_table_element Stringprep_table_element;
106
107 struct Stringprep_table
108 {
109 Stringprep_profile_steps operation;
110 Stringprep_profile_flags flags;
111 const Stringprep_table_element *table;
112 };
113 typedef struct Stringprep_table Stringprep_profile;
114
115 struct Stringprep_profiles
116 {
117 const char *name;
118 const Stringprep_profile *tables;
119 };
120 typedef struct Stringprep_profiles Stringprep_profiles;
121
122 extern IDNAPI const Stringprep_profiles stringprep_profiles[];
123
124 /* Profiles */
125 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_A_1[];
126 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_B_1[];
127 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_B_2[];
128 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_B_3[];
129 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_C_1_1[];
130 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_C_1_2[];
131 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_C_2_1[];
132 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_C_2_2[];
133 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_C_3[];
134 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_C_4[];
135 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_C_5[];
136 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_C_6[];
137 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_C_7[];
138 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_C_8[];
139 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_C_9[];
140 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_D_1[];
141 extern IDNAPI const Stringprep_table_element stringprep_rfc3454_D_2[];
142
143 /* Nameprep */
144
145 extern IDNAPI const Stringprep_profile stringprep_nameprep[];
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
155 extern IDNAPI const Stringprep_profile stringprep_saslprep[];
156 extern IDNAPI const Stringprep_table_element stringprep_saslprep_space_map[];
157 extern IDNAPI const Stringprep_profile stringprep_plain[];
158 extern IDNAPI const Stringprep_profile stringprep_trace[];
159
160 # define stringprep_plain(in, maxlen) \
161 stringprep(in, maxlen, 0, stringprep_plain)
162
163 /* Kerberos */
164
165 extern IDNAPI const Stringprep_profile stringprep_kerberos5[];
166
167 # define stringprep_kerberos5(in, maxlen) \
168 stringprep(in, maxlen, 0, stringprep_kerberos5)
169
170 /* XMPP */
171
172 extern IDNAPI const Stringprep_profile stringprep_xmpp_nodeprep[];
173 extern IDNAPI const Stringprep_profile stringprep_xmpp_resourceprep[];
174 extern IDNAPI const Stringprep_table_element stringprep_xmpp_nodeprep_prohibit[];
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
183 extern IDNAPI const Stringprep_profile stringprep_iscsi[];
184 extern IDNAPI const Stringprep_table_element stringprep_iscsi_prohibit[];
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,
193 Stringprep_profile_flags flags,
194 const Stringprep_profile * profile);
195 extern IDNAPI int stringprep_4zi (uint32_t * ucs4, size_t maxucs4len,
196 Stringprep_profile_flags flags,
197 const Stringprep_profile * profile);
198 extern IDNAPI int stringprep (char *in, size_t maxlen,
199 Stringprep_profile_flags flags,
200 const Stringprep_profile * profile);
201
202 extern IDNAPI int stringprep_profile (const char *in,
203 char **out,
204 const char *profile,
205 Stringprep_profile_flags flags);
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 */
stringprep_rfc3454_C_5
IDNAPI const Stringprep_table_element stringprep_rfc3454_C_5[]
Definition: rfc3454.c:3752
stringprep_4zi
IDNAPI int stringprep_4zi(uint32_t *ucs4, size_t maxucs4len, Stringprep_profile_flags flags, const Stringprep_profile *profile)
Definition: stringprep.c:327
stringprep_utf8_to_ucs4
IDNAPI uint32_t * stringprep_utf8_to_ucs4(const char *str, ssize_t len, size_t *items_written)
Definition: nfkc.c:1021
Stringprep_profile_steps
Stringprep_profile_steps
Definition: stringprep.h:85
stringprep_rfc3454_C_3
IDNAPI const Stringprep_table_element stringprep_rfc3454_C_3[]
Definition: rfc3454.c:3709
STRINGPREP_FLAG_ERROR
Definition: stringprep.h:69
stringprep_profile
IDNAPI int stringprep_profile(const char *in, char **out, const char *profile, Stringprep_profile_flags flags)
Definition: stringprep.c:445
STRINGPREP_BIDI_BOTH_L_AND_RAL
Definition: stringprep.h:63
STRINGPREP_BIDI_L_TABLE
Definition: stringprep.h:94
STRINGPREP_PROHIBIT_TABLE
Definition: stringprep.h:91
STRINGPREP_NFKC
Definition: stringprep.h:87
stringprep_rfc3454_C_7
IDNAPI const Stringprep_table_element stringprep_rfc3454_C_7[]
Definition: rfc3454.c:3778
stringprep_rfc3454_C_4
IDNAPI const Stringprep_table_element stringprep_rfc3454_C_4[]
Definition: rfc3454.c:3723
stringprep_4i
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
Stringprep_table::table
const Stringprep_table_element * table
Definition: stringprep.h:111
stringprep_convert
IDNAPI char * stringprep_convert(const char *str, const char *to_codeset, const char *from_codeset)
Definition: toutf8.c:116
STRINGPREP_CONTAINS_PROHIBITED
Definition: stringprep.h:62
Stringprep_profile_flags
Stringprep_profile_flags
Definition: stringprep.h:77
STRINGPREP_NO_BIDI
Definition: stringprep.h:80
STRINGPREP_UNASSIGNED_TABLE
Definition: stringprep.h:90
STRINGPREP_PROFILE_ERROR
Definition: stringprep.h:68
stringprep_xmpp_resourceprep
#define stringprep_xmpp_resourceprep(in, maxlen)
Definition: stringprep.h:178
STRINGPREP_BIDI_RAL_TABLE
Definition: stringprep.h:93
stringprep_rfc3454_B_2
IDNAPI const Stringprep_table_element stringprep_rfc3454_B_2[]
Definition: rfc3454.c:456
stringprep_rfc3454_D_1
IDNAPI const Stringprep_table_element stringprep_rfc3454_D_1[]
Definition: rfc3454.c:3846
STRINGPREP_TOO_SMALL_BUFFER
Definition: stringprep.h:67
stringprep
IDNAPI int stringprep(char *in, size_t maxlen, Stringprep_profile_flags flags, const Stringprep_profile *profile)
Definition: stringprep.c:367
STRINGPREP_BIDI_PROHIBIT_TABLE
Definition: stringprep.h:92
stringprep_profiles
IDNAPI const Stringprep_profiles stringprep_profiles[]
Definition: profiles.c:33
stringprep_trace
IDNAPI const Stringprep_profile stringprep_trace[]
Definition: profiles.c:169
stringprep_rfc3454_C_1_2
IDNAPI const Stringprep_table_element stringprep_rfc3454_C_1_2[]
Definition: rfc3454.c:3524
stringprep_utf8_nfkc_normalize
IDNAPI char * stringprep_utf8_nfkc_normalize(const char *str, ssize_t len)
Definition: nfkc.c:1074
stringprep_saslprep_space_map
IDNAPI const Stringprep_table_element stringprep_saslprep_space_map[]
Definition: profiles.c:280
Stringprep_table_element::start
uint32_t start
Definition: stringprep.h:101
stringprep_locale_to_utf8
IDNAPI char * stringprep_locale_to_utf8(const char *str)
Definition: toutf8.c:143
stringprep_rfc3454_C_8
IDNAPI const Stringprep_table_element stringprep_rfc3454_C_8[]
Definition: rfc3454.c:3791
STRINGPREP_MALLOC_ERROR
Definition: stringprep.h:73
STRINGPREP_CONTAINS_UNASSIGNED
Definition: stringprep.h:61
STRINGPREP_BIDI_CONTAINS_PROHIBITED
Definition: stringprep.h:65
stringprep_kerberos5
#define stringprep_kerberos5(in, maxlen)
Definition: stringprep.h:167
stringprep_check_version
IDNAPI const char * stringprep_check_version(const char *req_version)
Definition: version.c:53
Stringprep_profiles::tables
const Stringprep_profile * tables
Definition: stringprep.h:118
STRINGPREP_NFKC_FAILED
Definition: stringprep.h:72
stringprep_utf8_to_locale
IDNAPI char * stringprep_utf8_to_locale(const char *str)
Definition: toutf8.c:159
stringprep_utf8_to_unichar
IDNAPI uint32_t stringprep_utf8_to_unichar(const char *p)
Definition: nfkc.c:983
stringprep_iscsi
#define stringprep_iscsi(in, maxlen)
Definition: stringprep.h:186
stringprep_plain
#define stringprep_plain(in, maxlen)
Definition: stringprep.h:160
Stringprep_table_element::end
uint32_t end
Definition: stringprep.h:102
stringprep_rfc3454_C_6
IDNAPI const Stringprep_table_element stringprep_rfc3454_C_6[]
Definition: rfc3454.c:3763
stringprep_rfc3454_C_2_2
IDNAPI const Stringprep_table_element stringprep_rfc3454_C_2_2[]
Definition: rfc3454.c:3682
stringprep_rfc3454_B_1
IDNAPI const Stringprep_table_element stringprep_rfc3454_B_1[]
Definition: rfc3454.c:419
stringprep_strerror
IDNAPI const char * stringprep_strerror(Stringprep_rc rc)
Definition: strerror-stringprep.c:77
stringprep_rfc3454_D_2
IDNAPI const Stringprep_table_element stringprep_rfc3454_D_2[]
Definition: rfc3454.c:3890
STRINGPREP_BIDI
Definition: stringprep.h:88
Stringprep_table_element
Definition: stringprep.h:99
STRINGPREP_MAX_MAP_CHARS
#define STRINGPREP_MAX_MAP_CHARS
Definition: stringprep.h:97
Stringprep_rc
Stringprep_rc
Definition: stringprep.h:57
stringprep_locale_charset
IDNAPI const char * stringprep_locale_charset(void)
Definition: toutf8.c:85
STRINGPREP_OK
Definition: stringprep.h:59
stringprep_xmpp_nodeprep
#define stringprep_xmpp_nodeprep(in, maxlen)
Definition: stringprep.h:176
stringprep_nameprep
#define stringprep_nameprep(in, maxlen)
Definition: stringprep.h:147
Stringprep_table::flags
Stringprep_profile_flags flags
Definition: stringprep.h:110
stringprep_rfc3454_A_1
IDNAPI const Stringprep_table_element stringprep_rfc3454_A_1[]
Definition: rfc3454.c:13
STRINGPREP_NO_NFKC
Definition: stringprep.h:79
Stringprep_profiles::name
const char * name
Definition: stringprep.h:117
stringprep_rfc3454_C_9
IDNAPI const Stringprep_table_element stringprep_rfc3454_C_9[]
Definition: rfc3454.c:3834
stringprep_ucs4_to_utf8
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
stringprep_iscsi_prohibit
IDNAPI const Stringprep_table_element stringprep_iscsi_prohibit[]
Definition: profiles.c:185
stringprep_rfc3454_C_1_1
IDNAPI const Stringprep_table_element stringprep_rfc3454_C_1_1[]
Definition: rfc3454.c:3473
Stringprep_profiles
Definition: stringprep.h:115
Stringprep_table
Definition: stringprep.h:107
Stringprep_table_element::map
uint32_t map[STRINGPREP_MAX_MAP_CHARS]
Definition: stringprep.h:103
STRINGPREP_MAP_TABLE
Definition: stringprep.h:89
stringprep_xmpp_nodeprep_prohibit
IDNAPI const Stringprep_table_element stringprep_xmpp_nodeprep_prohibit[]
Definition: profiles.c:94
IDNAPI
#define IDNAPI
Definition: stringprep.h:41
stringprep_unichar_to_utf8
IDNAPI int stringprep_unichar_to_utf8(uint32_t c, char *outbuf)
Definition: nfkc.c:1000
STRINGPREP_NO_UNASSIGNED
Definition: stringprep.h:81
STRINGPREP_BIDI_LEADTRAIL_NOT_RAL
Definition: stringprep.h:64
STRINGPREP_UNKNOWN_PROFILE
Definition: stringprep.h:70
stringprep_saslprep
IDNAPI const Stringprep_profile stringprep_saslprep[]
Definition: profiles.c:301
stringprep_rfc3454_C_2_1
IDNAPI const Stringprep_table_element stringprep_rfc3454_C_2_1[]
Definition: rfc3454.c:3609
Stringprep_table::operation
Stringprep_profile_steps operation
Definition: stringprep.h:109
stringprep_rfc3454_B_3
IDNAPI const Stringprep_table_element stringprep_rfc3454_B_3[]
Definition: rfc3454.c:2484
stringprep_ucs4_nfkc_normalize
IDNAPI uint32_t * stringprep_ucs4_nfkc_normalize(const uint32_t *str, ssize_t len)
Definition: nfkc.c:1091