Skip to content

Commit c03bade

Browse files
authored
Merge pull request #138 from moteus/url_api
Support URL API
2 parents 11f39e3 + 949493b commit c03bade

File tree

11 files changed

+551
-4
lines changed

11 files changed

+551
-4
lines changed

lakefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ target('test', install, function()
3535
run_test('test_mime.lua')
3636
run_test('test_multi_callback.lua')
3737
run_test('test_multi_nested_callback.lua')
38+
run_test('test_urlapi.lua')
3839

3940
if not test_summary() then
4041
quit("test fail")

rockspecs/lua-curl-scm-0.rockspec

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,10 @@ build = {
6161

6262
lcurl = {
6363
sources = {
64-
"src/l52util.c", "src/lceasy.c", "src/lcerror.c",
65-
"src/lchttppost.c", "src/lcurl.c", "src/lcutils.c",
66-
"src/lcmulti.c", "src/lcshare.c","src/lcmime.c",
64+
"src/l52util.c", "src/lceasy.c", "src/lcerror.c",
65+
"src/lchttppost.c", "src/lcurl.c", "src/lcutils.c",
66+
"src/lcmulti.c", "src/lcshare.c", "src/lcmime.c",
67+
"src/lcurlapi.c",
6768
},
6869
incdirs = { "$(CURL_INCDIR)" },
6970
libdirs = { "$(CURL_LIBDIR)" }

src/lcerr_url.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#if LCURL_CURL_VER_GE(7,61,0)
2+
ERR_ENTRY ( BAD_HANDLE )
3+
ERR_ENTRY ( BAD_PARTPOINTER )
4+
ERR_ENTRY ( BAD_PORT_NUMBER )
5+
ERR_ENTRY ( MALFORMED_INPUT )
6+
ERR_ENTRY ( NO_FRAGMENT )
7+
ERR_ENTRY ( NO_HOST )
8+
ERR_ENTRY ( NO_OPTIONS )
9+
ERR_ENTRY ( NO_PASSWORD )
10+
ERR_ENTRY ( NO_PORT )
11+
ERR_ENTRY ( NO_QUERY )
12+
ERR_ENTRY ( NO_SCHEME )
13+
ERR_ENTRY ( NO_USER )
14+
ERR_ENTRY ( OK )
15+
ERR_ENTRY ( OUT_OF_MEMORY )
16+
ERR_ENTRY ( UNKNOWN_PART )
17+
ERR_ENTRY ( UNSUPPORTED_SCHEME)
18+
ERR_ENTRY ( URLDECODE )
19+
ERR_ENTRY ( USER_NOT_ALLOWED )
20+
#endif

src/lcerror.c

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ static const char *LCURL_ERROR = LCURL_ERROR_NAME;
2020
#define LCURL_ERROR_MULTI_NAME "CURL-MULTI"
2121
#define LCURL_ERROR_SHARE_NAME "CURL-SHARE"
2222
#define LCURL_ERROR_FORM_NAME "CURL-FORM"
23+
#define LCURL_ERROR_URL_NAME "CURL-URL"
2324

2425
typedef struct lcurl_error_tag{
2526
int tp;
@@ -72,12 +73,24 @@ static const char* lcurl_err_form_mnemo(int err){
7273
#undef ERR_ENTRY
7374
}
7475

76+
static const char* lcurl_err_url_mnemo(int err){
77+
#define ERR_ENTRY(E) case CURLUE_##E: return #E;
78+
79+
switch (err){
80+
#include "lcerr_url.h"
81+
}
82+
return "UNKNOWN";
83+
84+
#undef ERR_ENTRY
85+
}
86+
7587
static const char* _lcurl_err_mnemo(int tp, int err){
7688
switch(tp){
7789
case LCURL_ERROR_EASY : return lcurl_err_easy_mnemo (err);
7890
case LCURL_ERROR_MULTI: return lcurl_err_multi_mnemo(err);
7991
case LCURL_ERROR_SHARE: return lcurl_err_share_mnemo(err);
8092
case LCURL_ERROR_FORM : return lcurl_err_form_mnemo (err);
93+
case LCURL_ERROR_URL : return lcurl_err_url_mnemo (err);
8194
}
8295
assert(0);
8396
return "<UNSUPPORTED ERROR TYPE>";
@@ -89,6 +102,7 @@ static const char* _lcurl_err_msg(int tp, int err){
89102
case LCURL_ERROR_MULTI: return curl_multi_strerror(err);
90103
case LCURL_ERROR_SHARE: return curl_share_strerror(err);
91104
case LCURL_ERROR_FORM : return lcurl_err_form_mnemo(err);
105+
case LCURL_ERROR_URL : return lcurl_err_url_mnemo(err);
92106
}
93107
assert(0);
94108
return "<UNSUPPORTED ERROR TYPE>";
@@ -100,6 +114,7 @@ static const char* _lcurl_err_category_name(int tp){
100114
(tp == LCURL_ERROR_MULTI) ||
101115
(tp == LCURL_ERROR_SHARE) ||
102116
(tp == LCURL_ERROR_FORM ) ||
117+
(tp == LCURL_ERROR_URL ) ||
103118
0
104119
);
105120

@@ -120,6 +135,10 @@ static const char* _lcurl_err_category_name(int tp){
120135
static const char *name = LCURL_ERROR_FORM_NAME;
121136
return name;
122137
}
138+
case LCURL_ERROR_URL: {
139+
static const char *name = LCURL_ERROR_URL_NAME;
140+
return name;
141+
}
123142
}
124143

125144
assert(0);
@@ -147,6 +166,7 @@ int lcurl_error_create(lua_State *L, int error_type, int no){
147166
(error_type == LCURL_ERROR_MULTI) ||
148167
(error_type == LCURL_ERROR_SHARE) ||
149168
(error_type == LCURL_ERROR_FORM ) ||
169+
(error_type == LCURL_ERROR_URL ) ||
150170
0
151171
);
152172

@@ -233,13 +253,15 @@ static const int ERROR_CATEGORIES[] = {
233253
LCURL_ERROR_MULTI,
234254
LCURL_ERROR_SHARE,
235255
LCURL_ERROR_FORM,
256+
LCURL_ERROR_URL,
236257
};
237258

238259
static const char* ERROR_CATEGORIES_NAME[] = {
239260
LCURL_ERROR_EASY_NAME,
240261
LCURL_ERROR_MULTI_NAME,
241262
LCURL_ERROR_SHARE_NAME,
242263
LCURL_ERROR_FORM_NAME,
264+
LCURL_ERROR_URL_NAME,
243265
NULL
244266
};
245267

@@ -297,6 +319,10 @@ static const lcurl_const_t lcurl_error_codes[] = {
297319

298320
#define ERR_ENTRY(N) { "E_FORM_"#N, CURL_FORMADD_##N },
299321
#include "lcerr_form.h"
322+
#undef ERR_ENTRY
323+
324+
#define ERR_ENTRY(N) { "E_URL_"#N, CURLUE_##N },
325+
#include "lcerr_url.h"
300326
#undef ERR_ENTRY
301327

302328
{NULL, 0}

src/lcerror.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#define LCURL_ERROR_MULTI 2
1919
#define LCURL_ERROR_SHARE 3
2020
#define LCURL_ERROR_FORM 4
21+
#define LCURL_ERROR_URL 5
2122

2223
#define LCURL_ERROR_RETURN 1
2324
#define LCURL_ERROR_RAISE 2

src/lcopturl.h

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
ENTRY_PART(fragment, UPART_FRAGMENT , CURLUE_NO_FRAGMENT )
2+
ENTRY_PART(host, UPART_HOST , CURLUE_NO_HOST )
3+
ENTRY_PART(options, UPART_OPTIONS , CURLUE_NO_OPTIONS )
4+
ENTRY_PART(password, UPART_PASSWORD , CURLUE_NO_PASSWORD )
5+
ENTRY_PART(path, UPART_PATH , CURLUE_OK )
6+
ENTRY_PART(port, UPART_PORT , CURLUE_NO_PORT )
7+
ENTRY_PART(query, UPART_QUERY , CURLUE_NO_QUERY )
8+
ENTRY_PART(scheme, UPART_SCHEME , CURLUE_NO_SCHEME )
9+
ENTRY_PART(url, UPART_URL , CURLUE_OK )
10+
ENTRY_PART(user, UPART_USER , CURLUE_NO_USER )
11+
12+
ENTRY_FLAG(DEFAULT_PORT )
13+
ENTRY_FLAG(NO_DEFAULT_PORT )
14+
ENTRY_FLAG(DEFAULT_SCHEME )
15+
ENTRY_FLAG(NON_SUPPORT_SCHEME )
16+
ENTRY_FLAG(PATH_AS_IS )
17+
ENTRY_FLAG(DISALLOW_USER )
18+
ENTRY_FLAG(URLDECODE )
19+
ENTRY_FLAG(URLENCODE )
20+
ENTRY_FLAG(APPENDQUERY )
21+
ENTRY_FLAG(GUESS_SCHEME )

src/lcurl.c

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "lcerror.h"
1616
#include "lchttppost.h"
1717
#include "lcmime.h"
18+
#include "lcurlapi.h"
1819
#include "lcutils.h"
1920

2021
/*export*/
@@ -36,10 +37,18 @@ static int lcurl_share_new_safe(lua_State *L){
3637
return lcurl_share_create(L, LCURL_ERROR_RETURN);
3738
}
3839

39-
static int lcurl_hpost_new_safe(lua_State *L){
40+
static int lcurl_hpost_new_safe(lua_State *L) {
4041
return lcurl_hpost_create(L, LCURL_ERROR_RETURN);
4142
}
4243

44+
#if LCURL_CURL_VER_GE(7,62,0)
45+
46+
static int lcurl_url_new_safe(lua_State *L) {
47+
return lcurl_url_create(L, LCURL_ERROR_RETURN);
48+
}
49+
50+
#endif
51+
4352
static int lcurl_easy_new(lua_State *L){
4453
return lcurl_easy_create(L, LCURL_ERROR_RAISE);
4554
}
@@ -56,6 +65,14 @@ static int lcurl_hpost_new(lua_State *L){
5665
return lcurl_hpost_create(L, LCURL_ERROR_RAISE);
5766
}
5867

68+
#if LCURL_CURL_VER_GE(7,62,0)
69+
70+
static int lcurl_url_new(lua_State *L) {
71+
return lcurl_url_create(L, LCURL_ERROR_RAISE);
72+
}
73+
74+
#endif
75+
5976
static int lcurl_version(lua_State *L){
6077
lua_pushstring(L, curl_version());
6178
return 1;
@@ -170,6 +187,9 @@ static const struct luaL_Reg lcurl_functions[] = {
170187
{"easy", lcurl_easy_new },
171188
{"multi", lcurl_multi_new },
172189
{"share", lcurl_share_new },
190+
#if LCURL_CURL_VER_GE(7,62,0)
191+
{"url", lcurl_url_new },
192+
#endif
173193
{"version", lcurl_version },
174194
{"version_info", lcurl_version_info },
175195

@@ -182,6 +202,9 @@ static const struct luaL_Reg lcurl_functions_safe[] = {
182202
{"easy", lcurl_easy_new_safe },
183203
{"multi", lcurl_multi_new_safe },
184204
{"share", lcurl_share_new_safe },
205+
#if LCURL_CURL_VER_GE(7,62,0)
206+
{"url", lcurl_url_new_safe },
207+
#endif
185208
{"version", lcurl_version },
186209
{"version_info", lcurl_version_info },
187210

@@ -258,6 +281,7 @@ static int luaopen_lcurl_(lua_State *L, const struct luaL_Reg *func){
258281
LCURL_PUSH_NUP(L); lcurl_mime_initlib (L, NUP);
259282
LCURL_PUSH_NUP(L); lcurl_multi_initlib(L, NUP);
260283
LCURL_PUSH_NUP(L); lcurl_share_initlib(L, NUP);
284+
LCURL_PUSH_NUP(L); lcurl_url_initlib (L, NUP);
261285

262286
LCURL_PUSH_NUP(L);
263287

0 commit comments

Comments
 (0)