improve url parser

This commit is contained in:
lixianjing 2022-04-01 17:02:34 +08:00
parent d02297160c
commit e2567a79e5
5 changed files with 27 additions and 12 deletions

View File

@ -1,6 +1,7 @@
# 最新动态 # 最新动态
2022/04/01 2022/04/01
* 完善给edit、mledit和combo\_box增加了empty\_over状态感谢雨欣提供补丁 * 完善给edit、mledit和combo\_box增加了empty\_over状态感谢雨欣提供补丁
* 完善URL解析并增加一些新的schema。
2022/03/31 2022/03/31
* 增加带统计功能的stream (感谢林福提供) * 增加带统计功能的stream (感谢林福提供)

View File

@ -337,10 +337,6 @@ typedef struct _image_manager_t image_manager_t;
struct _system_info_t; struct _system_info_t;
typedef struct _system_info_t system_info_t; typedef struct _system_info_t system_info_t;
#define STR_SCHEMA_FILE "file://"
#define STR_SCHEMA_HTTP "http://"
#define STR_SCHEMA_HTTPS "https://"
#if defined(WITH_NANOVG_GL3) || defined(WITH_NANOVG_GL2) || defined(WITH_NANOVG_GLES3) || \ #if defined(WITH_NANOVG_GL3) || defined(WITH_NANOVG_GL2) || defined(WITH_NANOVG_GLES3) || \
defined(WITH_NANOVG_GLES2) defined(WITH_NANOVG_GLES2)
#define WITH_GPU_GL 1 #define WITH_GPU_GL 1

View File

@ -442,4 +442,11 @@ typedef struct _event_source_manager_t event_source_manager_t;
#define tk_isprint(c) (((int)(c) < 128) && isprint(c)) #define tk_isprint(c) (((int)(c) < 128) && isprint(c))
#define tk_isalpha(c) (((int)(c) < 128) && isalpha(c)) #define tk_isalpha(c) (((int)(c) < 128) && isalpha(c))
#define STR_SCHEMA_TCP "tcp://"
#define STR_SCHEMA_UDP "udp://"
#define STR_SCHEMA_SERIAL "serial://"
#define STR_SCHEMA_FILE "file://"
#define STR_SCHEMA_HTTP "http://"
#define STR_SCHEMA_HTTPS "https://"
#endif /*TYPES_DEF_H*/ #endif /*TYPES_DEF_H*/

View File

@ -142,6 +142,7 @@ static url_t* url_parse(url_t* url, const char* surl) {
break; break;
} }
case '/': { case '/': {
p--;
state = STATE_PATH; state = STATE_PATH;
break; break;
} }

View File

@ -89,7 +89,7 @@ TEST(URL, http2) {
url_t* url = url_create("http://www.zlg.cn/abc"); url_t* url = url_create("http://www.zlg.cn/abc");
ASSERT_STREQ(url->schema, "http"); ASSERT_STREQ(url->schema, "http");
ASSERT_STREQ(url->host, "www.zlg.cn"); ASSERT_STREQ(url->host, "www.zlg.cn");
ASSERT_STREQ(url->path, "abc"); ASSERT_STREQ(url->path, "/abc");
ASSERT_EQ(url->params == NULL, true); ASSERT_EQ(url->params == NULL, true);
ASSERT_EQ(url->user_name == NULL, true); ASSERT_EQ(url->user_name == NULL, true);
ASSERT_EQ(url->password == NULL, true); ASSERT_EQ(url->password == NULL, true);
@ -113,7 +113,7 @@ TEST(URL, http4) {
url_t* url = url_create("http://www.zlg.cn/abc?name=jim"); url_t* url = url_create("http://www.zlg.cn/abc?name=jim");
ASSERT_STREQ(url->schema, "http"); ASSERT_STREQ(url->schema, "http");
ASSERT_STREQ(url->host, "www.zlg.cn"); ASSERT_STREQ(url->host, "www.zlg.cn");
ASSERT_STREQ(url->path, "abc"); ASSERT_STREQ(url->path, "/abc");
ASSERT_EQ(url->params != NULL, true); ASSERT_EQ(url->params != NULL, true);
ASSERT_EQ(url->user_name == NULL, true); ASSERT_EQ(url->user_name == NULL, true);
ASSERT_EQ(url->password == NULL, true); ASSERT_EQ(url->password == NULL, true);
@ -126,7 +126,7 @@ TEST(URL, http5) {
url_t* url = url_create("http://www.zlg.cn/abc?name=jim&"); url_t* url = url_create("http://www.zlg.cn/abc?name=jim&");
ASSERT_STREQ(url->schema, "http"); ASSERT_STREQ(url->schema, "http");
ASSERT_STREQ(url->host, "www.zlg.cn"); ASSERT_STREQ(url->host, "www.zlg.cn");
ASSERT_STREQ(url->path, "abc"); ASSERT_STREQ(url->path, "/abc");
ASSERT_EQ(url->params != NULL, true); ASSERT_EQ(url->params != NULL, true);
ASSERT_EQ(url->user_name == NULL, true); ASSERT_EQ(url->user_name == NULL, true);
ASSERT_EQ(url->password == NULL, true); ASSERT_EQ(url->password == NULL, true);
@ -139,7 +139,7 @@ TEST(URL, http6) {
url_t* url = url_create("http://www.zlg.cn/abc?name=jim&age=100"); url_t* url = url_create("http://www.zlg.cn/abc?name=jim&age=100");
ASSERT_STREQ(url->schema, "http"); ASSERT_STREQ(url->schema, "http");
ASSERT_STREQ(url->host, "www.zlg.cn"); ASSERT_STREQ(url->host, "www.zlg.cn");
ASSERT_STREQ(url->path, "abc"); ASSERT_STREQ(url->path, "/abc");
ASSERT_EQ(url->params != NULL, true); ASSERT_EQ(url->params != NULL, true);
ASSERT_EQ(url->user_name == NULL, true); ASSERT_EQ(url->user_name == NULL, true);
ASSERT_EQ(url->password == NULL, true); ASSERT_EQ(url->password == NULL, true);
@ -153,7 +153,7 @@ TEST(URL, http7) {
url_t* url = url_create("http://www.zlg.cn/abc?name=jim&age=100&"); url_t* url = url_create("http://www.zlg.cn/abc?name=jim&age=100&");
ASSERT_STREQ(url->schema, "http"); ASSERT_STREQ(url->schema, "http");
ASSERT_STREQ(url->host, "www.zlg.cn"); ASSERT_STREQ(url->host, "www.zlg.cn");
ASSERT_STREQ(url->path, "abc"); ASSERT_STREQ(url->path, "/abc");
ASSERT_EQ(url->params != NULL, true); ASSERT_EQ(url->params != NULL, true);
ASSERT_EQ(url->user_name == NULL, true); ASSERT_EQ(url->user_name == NULL, true);
ASSERT_EQ(url->password == NULL, true); ASSERT_EQ(url->password == NULL, true);
@ -167,7 +167,7 @@ TEST(URL, http8) {
url_t* url = url_create("http://jim:1234@www.zlg.cn/abc?name=jim&age=100&"); url_t* url = url_create("http://jim:1234@www.zlg.cn/abc?name=jim&age=100&");
ASSERT_STREQ(url->schema, "http"); ASSERT_STREQ(url->schema, "http");
ASSERT_STREQ(url->host, "www.zlg.cn"); ASSERT_STREQ(url->host, "www.zlg.cn");
ASSERT_STREQ(url->path, "abc"); ASSERT_STREQ(url->path, "/abc");
ASSERT_EQ(url->params != NULL, true); ASSERT_EQ(url->params != NULL, true);
ASSERT_STREQ(url->user_name, "jim"); ASSERT_STREQ(url->user_name, "jim");
ASSERT_STREQ(url->password, "1234"); ASSERT_STREQ(url->password, "1234");
@ -181,7 +181,7 @@ TEST(URL, http9) {
url_t* url = url_create("jim:1234@www.zlg.cn/abc?name=jim&age=100&"); url_t* url = url_create("jim:1234@www.zlg.cn/abc?name=jim&age=100&");
ASSERT_STREQ(url->schema, "http"); ASSERT_STREQ(url->schema, "http");
ASSERT_STREQ(url->host, "www.zlg.cn"); ASSERT_STREQ(url->host, "www.zlg.cn");
ASSERT_STREQ(url->path, "abc"); ASSERT_STREQ(url->path, "/abc");
ASSERT_EQ(url->params != NULL, true); ASSERT_EQ(url->params != NULL, true);
ASSERT_STREQ(url->user_name, "jim"); ASSERT_STREQ(url->user_name, "jim");
ASSERT_STREQ(url->password, "1234"); ASSERT_STREQ(url->password, "1234");
@ -286,7 +286,17 @@ TEST(URL, asset) {
ASSERT_STREQ(url->schema, "asset"); ASSERT_STREQ(url->schema, "asset");
ASSERT_STREQ(url->host, "ui"); ASSERT_STREQ(url->host, "ui");
ASSERT_EQ(url->params == NULL, true); ASSERT_EQ(url->params == NULL, true);
ASSERT_STREQ(url->path, "main"); ASSERT_STREQ(url->path, "/main");
url_destroy(url);
}
TEST(URL, serial) {
url_t* url = url_create("serial:///dev/cu.usbserial-1410");
ASSERT_STREQ(url->schema, "serial");
ASSERT_STREQ(url->host, "");
ASSERT_EQ(url->params == NULL, true);
ASSERT_STREQ(url->path, "/dev/cu.usbserial-1410");
url_destroy(url); url_destroy(url);
} }