Software /
code /
prosody
Annotate
util-src/encodings.c @ 481:29f974ef00a7
More Makefile improvements (install the certificates, and update the config on install to find them)
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Sat, 29 Nov 2008 17:52:10 +0000 |
parent | 474:666e22848890 |
child | 520:e96ac4bb6dd8 |
rev | line source |
---|---|
415
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
1 /* |
417 | 2 * encodings.c |
3 * Lua library for base64, stringprep and idna encodings | |
415
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
4 */ |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
5 |
441
4089b62b510c
Minor changes to C files (to prevent compiler warnings)
Waqas Hussain <waqas20@gmail.com>
parents:
432
diff
changeset
|
6 // Newer MSVC compilers deprecate strcpy as unsafe, but we use it in a safe way |
4089b62b510c
Minor changes to C files (to prevent compiler warnings)
Waqas Hussain <waqas20@gmail.com>
parents:
432
diff
changeset
|
7 #define _CRT_SECURE_NO_DEPRECATE |
4089b62b510c
Minor changes to C files (to prevent compiler warnings)
Waqas Hussain <waqas20@gmail.com>
parents:
432
diff
changeset
|
8 |
415
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
9 #include <string.h> |
473
22b0e654c4cf
To use free you should include stdlib.h rather than malloc.h according to man page of free() and various C reference websites.
Tobias Markmann <tm@ayena.de>
parents:
441
diff
changeset
|
10 #include <stdlib.h> |
415
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
11 |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
12 #include "lua.h" |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
13 #include "lauxlib.h" |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
14 |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
15 /***************** BASE64 *****************/ |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
16 |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
17 static const char code[]= |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
18 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
19 |
474
666e22848890
Use unsigned int instead of uint because uint is already in use on OS X.
Tobias Markmann <tm@ayena.de>
parents:
473
diff
changeset
|
20 static void base64_encode(luaL_Buffer *b, unsigned int c1, unsigned int c2, unsigned int c3, int n) |
415
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
21 { |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
22 unsigned long tuple=c3+256UL*(c2+256UL*c1); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
23 int i; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
24 char s[4]; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
25 for (i=0; i<4; i++) { |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
26 s[3-i] = code[tuple % 64]; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
27 tuple /= 64; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
28 } |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
29 for (i=n+1; i<4; i++) s[i]='='; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
30 luaL_addlstring(b,s,4); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
31 } |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
32 |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
33 static int Lbase64_encode(lua_State *L) /** encode(s) */ |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
34 { |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
35 size_t l; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
36 const unsigned char *s=(const unsigned char*)luaL_checklstring(L,1,&l); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
37 luaL_Buffer b; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
38 int n; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
39 luaL_buffinit(L,&b); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
40 for (n=l/3; n--; s+=3) base64_encode(&b,s[0],s[1],s[2],3); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
41 switch (l%3) |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
42 { |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
43 case 1: base64_encode(&b,s[0],0,0,1); break; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
44 case 2: base64_encode(&b,s[0],s[1],0,2); break; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
45 } |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
46 luaL_pushresult(&b); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
47 return 1; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
48 } |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
49 |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
50 static void base64_decode(luaL_Buffer *b, int c1, int c2, int c3, int c4, int n) |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
51 { |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
52 unsigned long tuple=c4+64L*(c3+64L*(c2+64L*c1)); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
53 char s[3]; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
54 switch (--n) |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
55 { |
441
4089b62b510c
Minor changes to C files (to prevent compiler warnings)
Waqas Hussain <waqas20@gmail.com>
parents:
432
diff
changeset
|
56 case 3: s[2]=(char) tuple; |
4089b62b510c
Minor changes to C files (to prevent compiler warnings)
Waqas Hussain <waqas20@gmail.com>
parents:
432
diff
changeset
|
57 case 2: s[1]=(char) (tuple >> 8); |
4089b62b510c
Minor changes to C files (to prevent compiler warnings)
Waqas Hussain <waqas20@gmail.com>
parents:
432
diff
changeset
|
58 case 1: s[0]=(char) (tuple >> 16); |
415
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
59 } |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
60 luaL_addlstring(b,s,n); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
61 } |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
62 |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
63 static int Lbase64_decode(lua_State *L) /** decode(s) */ |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
64 { |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
65 size_t l; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
66 const char *s=luaL_checklstring(L,1,&l); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
67 luaL_Buffer b; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
68 int n=0; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
69 char t[4]; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
70 luaL_buffinit(L,&b); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
71 for (;;) |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
72 { |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
73 int c=*s++; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
74 switch (c) |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
75 { |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
76 const char *p; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
77 default: |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
78 p=strchr(code,c); if (p==NULL) return 0; |
441
4089b62b510c
Minor changes to C files (to prevent compiler warnings)
Waqas Hussain <waqas20@gmail.com>
parents:
432
diff
changeset
|
79 t[n++]= (char) (p-code); |
415
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
80 if (n==4) |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
81 { |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
82 base64_decode(&b,t[0],t[1],t[2],t[3],4); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
83 n=0; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
84 } |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
85 break; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
86 case '=': |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
87 switch (n) |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
88 { |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
89 case 1: base64_decode(&b,t[0],0,0,0,1); break; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
90 case 2: base64_decode(&b,t[0],t[1],0,0,2); break; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
91 case 3: base64_decode(&b,t[0],t[1],t[2],0,3); break; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
92 } |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
93 case 0: |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
94 luaL_pushresult(&b); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
95 return 1; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
96 case '\n': case '\r': case '\t': case ' ': case '\f': case '\b': |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
97 break; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
98 } |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
99 } |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
100 return 0; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
101 } |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
102 |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
103 static const luaL_Reg Reg_base64[] = |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
104 { |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
105 { "encode", Lbase64_encode }, |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
106 { "decode", Lbase64_decode }, |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
107 { NULL, NULL } |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
108 }; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
109 |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
110 /***************** STRINGPREP *****************/ |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
111 |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
112 #include <stringprep.h> |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
113 |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
114 static int stringprep_prep(lua_State *L, const Stringprep_profile *profile) |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
115 { |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
116 size_t len; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
117 const char *s = luaL_checklstring(L, 1, &len); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
118 char string[1024]; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
119 int ret; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
120 if (len >= 1024) { |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
121 lua_pushnil(L); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
122 return 1; // TODO return error message |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
123 } |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
124 strcpy(string, s); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
125 ret = stringprep(string, 1024, 0, profile); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
126 if (ret == STRINGPREP_OK) { |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
127 lua_pushstring(L, string); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
128 return 1; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
129 } else { |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
130 lua_pushnil(L); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
131 return 1; // TODO return error message |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
132 } |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
133 } |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
134 |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
135 #define MAKE_PREP_FUNC(myFunc, prep) \ |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
136 static int myFunc(lua_State *L) { return stringprep_prep(L, prep); } |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
137 |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
138 MAKE_PREP_FUNC(Lstringprep_nameprep, stringprep_nameprep) /** stringprep.nameprep(s) */ |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
139 MAKE_PREP_FUNC(Lstringprep_nodeprep, stringprep_xmpp_nodeprep) /** stringprep.nodeprep(s) */ |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
140 MAKE_PREP_FUNC(Lstringprep_resourceprep, stringprep_xmpp_resourceprep) /** stringprep.resourceprep(s) */ |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
141 MAKE_PREP_FUNC(Lstringprep_saslprep, stringprep_saslprep) /** stringprep.saslprep(s) */ |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
142 |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
143 static const luaL_Reg Reg_stringprep[] = |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
144 { |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
145 { "nameprep", Lstringprep_nameprep }, |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
146 { "nodeprep", Lstringprep_nodeprep }, |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
147 { "resourceprep", Lstringprep_resourceprep }, |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
148 { "saslprep", Lstringprep_saslprep }, |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
149 { NULL, NULL } |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
150 }; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
151 |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
152 /***************** IDNA *****************/ |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
153 |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
154 #include <idna.h> |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
155 |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
156 static int Lidna_to_ascii(lua_State *L) /** idna.to_ascii(s) */ |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
157 { |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
158 size_t len; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
159 const char *s = luaL_checklstring(L, 1, &len); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
160 char* output = NULL; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
161 int ret = idna_to_ascii_8z(s, &output, 0); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
162 if (ret == IDNA_SUCCESS) { |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
163 lua_pushstring(L, output); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
164 if (output) free(output); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
165 return 1; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
166 } else { |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
167 lua_pushnil(L); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
168 if (output) free(output); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
169 return 1; // TODO return error message |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
170 } |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
171 } |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
172 |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
173 static int Lidna_to_unicode(lua_State *L) /** idna.to_unicode(s) */ |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
174 { |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
175 size_t len; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
176 const char *s = luaL_checklstring(L, 1, &len); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
177 char* output = NULL; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
178 int ret = idna_to_unicode_8z8z(s, &output, 0); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
179 if (ret == IDNA_SUCCESS) { |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
180 lua_pushstring(L, output); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
181 if (output) free(output); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
182 return 1; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
183 } else { |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
184 lua_pushnil(L); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
185 if (output) free(output); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
186 return 1; // TODO return error message |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
187 } |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
188 } |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
189 |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
190 static const luaL_Reg Reg_idna[] = |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
191 { |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
192 { "to_ascii", Lidna_to_ascii }, |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
193 { "to_unicode", Lidna_to_unicode }, |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
194 { NULL, NULL } |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
195 }; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
196 |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
197 /***************** end *****************/ |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
198 |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
199 static const luaL_Reg Reg[] = |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
200 { |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
201 { NULL, NULL } |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
202 }; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
203 |
432
fb19a5c14d44
Fix for hashes.c and encodings.c to rename luaopen for util_*
Matthew Wild <mwild1@gmail.com>
parents:
417
diff
changeset
|
204 LUALIB_API int luaopen_util_encodings(lua_State *L) |
415
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
205 { |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
206 luaL_register(L, "encodings", Reg); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
207 |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
208 lua_pushliteral(L, "base64"); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
209 lua_newtable(L); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
210 luaL_register(L, NULL, Reg_base64); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
211 lua_settable(L,-3); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
212 |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
213 lua_pushliteral(L, "stringprep"); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
214 lua_newtable(L); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
215 luaL_register(L, NULL, Reg_stringprep); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
216 lua_settable(L,-3); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
217 |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
218 lua_pushliteral(L, "idna"); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
219 lua_newtable(L); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
220 luaL_register(L, NULL, Reg_idna); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
221 lua_settable(L,-3); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
222 |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
223 lua_pushliteral(L, "version"); /** version */ |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
224 lua_pushliteral(L, "-3.14"); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
225 lua_settable(L,-3); |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
226 return 1; |
3cf7deea9971
Added util-src/encodings.c - support for base64, stringprep and idna encodings
Waqas Hussain <waqas20@gmail.com>
parents:
diff
changeset
|
227 } |