40 #include "uriparser/Uri.h" 45 char* uri_parser_get_uri_part(
const char *uri, uri_parser_uri_parts_t part)
47 UriParserStateA state;
50 char *part_str= NULL, *ret_val= NULL;
56 state.uri = &uri_uri_a;
57 if(uriParseUriA(&state, uri)!= URI_SUCCESS)
62 part_str= (
char*)uri_uri_a.scheme.first;
63 part_str_size= uri_uri_a.scheme.afterLast- uri_uri_a.scheme.first;
66 part_str= (
char*)uri_uri_a.hostText.first;
67 part_str_size= uri_uri_a.hostText.afterLast- uri_uri_a.hostText.first;
70 part_str= (
char*)uri_uri_a.portText.first;
71 part_str_size= uri_uri_a.portText.afterLast- uri_uri_a.portText.first;
77 if(part_str!= NULL && part_str_size> 0)
78 ret_val= strndup(part_str, part_str_size);
81 uriFreeUriMembersA(&uri_uri_a);
85 char* uri_parser_query_str_get_value(
const char *key,
const char *query_str)
87 UriQueryListA *queryList, *nextNode;
89 size_t query_str_size;
95 CHECK_DO(query_str!= NULL,
return NULL);
97 query_str_size= strlen(query_str);
98 if(query_str_size<= 0)
101 if(uriDissectQueryMallocA(&queryList, &itemCount, query_str,
102 &query_str[query_str_size])!= URI_SUCCESS)
106 while(nextNode!= NULL) {
107 if(strncmp(key, nextNode->key, strlen(key))== 0) {
109 if(nextNode->value!= NULL)
110 ret_val= strdup(nextNode->value);
113 nextNode= nextNode->next;
117 uriFreeQueryListA(queryList);
121 int uri_parser_get_id_from_rest_url(
const char *url,
const char *needle,
124 int end_code= STAT_ENOTFOUND;
126 char *id_str_start= NULL, *id_str_stop= NULL;
130 CHECK_DO(url!= NULL && strlen(url)> 0,
return STAT_ERROR);
131 CHECK_DO(needle!= NULL && strlen(needle)> 0,
return STAT_ERROR);
132 CHECK_DO(ref_id!= NULL,
return STAT_ERROR);
134 if((id_str_start= strstr(url, needle))!= NULL) {
135 id_str_start+= strlen(needle);
136 id= strtoll(id_str_start, &id_str_stop, 10);
143 if(id_str_stop!= NULL && (*id_str_stop==
'/' || *id_str_stop==
'.')) {
145 end_code= STAT_SUCCESS;
148 end_code= STAT_ENOTFOUND;
General status codes enumeration.
#define CHECK_DO(COND, ACTION)