/* skip key */
p += token_len + 1;
- http_decodeUrl(p, strlen(p), decoded_str, sizeof(decoded_str));
- value_len = strlen(decoded_str);
+ value_len = http_decodeUrl(p, strlen(p), decoded_str, sizeof(decoded_str));
if (value_len >= len)
return -1;
return strtol(hex, &stop, 16);
}
-void http_decodeUrl(const char *raw_buf, size_t raw_len, char *decodec_buf, size_t len)
+size_t http_decodeUrl(const char *raw_buf, size_t raw_len, char *decodec_buf, size_t len)
{
ASSERT(decodec_buf);
char value;
+ size_t i;
memset(decodec_buf, 0, len);
- for (size_t i = 0; i < raw_len; i++)
+ for (i = 0; i < raw_len; i++)
{
- if (!len)
- return;
+ if (len <= 1)
+ return i;
if (raw_buf[i] == '%')
{
*decodec_buf++ = (raw_buf[i] == '+' ? ' ' : raw_buf[i]);
len--;
}
+
+ return i;
}
void http_getPageName(const char *recv_buf, size_t recv_len, char *page_name, size_t len)
INLINE const char *get_ext(const char *name)
{
const char *ext = strstr(name, ".");
- if(ext && (ext + 1))
+ if((ext != NULL) && ((ext + 1) != '\0'))
return (ext + 1);
return NULL;
{
ASSERT(content_type < HTTP_CONTENT_CNT);
- netconn_write(client, http_html_hdr_200, sizeof(http_html_hdr_200) - 1, NETCONN_COPY);
+ netconn_write(client, http_html_hdr_200, sizeof(http_html_hdr_200) - 1, NETCONN_NOCOPY);
netconn_write(client, http_content_type[content_type].content,
- strlen(http_content_type[content_type].content), NETCONN_COPY);
+ strlen(http_content_type[content_type].content), NETCONN_NOCOPY);
}
{
ASSERT(content_type < HTTP_CONTENT_CNT);
- netconn_write(client, http_html_hdr_404, sizeof(http_html_hdr_404) - 1, NETCONN_COPY);
+ netconn_write(client, http_html_hdr_404, sizeof(http_html_hdr_404) - 1, NETCONN_NOCOPY);
netconn_write(client, http_content_type[content_type].content,
- strlen(http_content_type[content_type].content), NETCONN_COPY);
+ strlen(http_content_type[content_type].content), NETCONN_NOCOPY);
}
/**
{
ASSERT(content_type < HTTP_CONTENT_CNT);
- netconn_write(client, http_html_hdr_500, sizeof(http_html_hdr_500) - 1, NETCONN_COPY);
+ netconn_write(client, http_html_hdr_500, sizeof(http_html_hdr_500) - 1, NETCONN_NOCOPY);
netconn_write(client, http_content_type[content_type].content,
- strlen(http_content_type[content_type].content), NETCONN_COPY);
+ strlen(http_content_type[content_type].content), NETCONN_NOCOPY);
}
static http_handler_t cgi_search(const char *name, HttpCGI *table)
int http_getValue(char *tolenized_buf, size_t tolenized_buf_len, const char *key, char *value, size_t len);
int http_tokenizeGetRequest(char *raw_buf, size_t raw_len);
void http_getPageName(const char *recv_buf, size_t recv_len, char *page_name, size_t len);
-void http_decodeUrl(const char *raw_buf, size_t raw_len, char *decodec_buf, size_t len);
+size_t http_decodeUrl(const char *raw_buf, size_t raw_len, char *decodec_buf, size_t len);
int http_searchContentType(const char *name);
void http_sendOk(struct netconn *client, int content_type);
static const char uri[] = "test%5B%5D!@;'%22%5C.%20";
static const char uri_check[] = "test[]!@;'\"\\. ";
+static const char uri0[] = "12345";
+static const char uri_check0[] = "1234";
+
static const char uri1[] = "!*'();:@&=%2B%24%2C/?#%5B%5D%3C%3E%7E.%22%7B%7D%7C%5C-%60_%5E%25";
static const char uri_check1[] = "!*'();:@&=+$,/?#[]<>~.\"{}|\\-`_^%";
}
+ char decoded0[5];
+ http_decodeUrl(uri0, 6, decoded0, 5);
+
+ if (strcmp(decoded0, uri_check0))
+ {
+ kprintf("error 04 %s\n", decoded0);
+ goto error;
+ }
+
char decoded[sizeof(uri)];
http_decodeUrl(uri,sizeof(uri), decoded, sizeof(uri));