This commit is contained in:
Xuan Sang LE 2018-02-19 17:44:45 +01:00
parent c0c6fb4c1a
commit d12b6122da
2 changed files with 16 additions and 34 deletions

View File

@ -372,24 +372,6 @@ void badrequest(void* client)
__t(client,"The request could not be understood by the server due to malformed syntax."); __t(client,"The request could not be understood by the server due to malformed syntax.");
} }
/**
* Decode the HTTP POST request with URL encode
* @param client socket client
* @param len content length
* @return query string
*/
char* post_url_decode(void* client,int len)
{
char *query = (char*) malloc((len+1)*sizeof(char));
for (int i = 0; i < len; i++) {
antd_recv(client, (query+i), 1);
}
query[len]='\0';
//query = url_decode(query);
LOG("POST Query %s\n", query);
return query;
}
char* apply_rules(const char* host, char*url) char* apply_rules(const char* host, char*url)
{ {
association it; association it;
@ -458,7 +440,7 @@ dictionary decode_request(void* client,const char* method, char* url)
token = strsep(&line,":"); token = strsep(&line,":");
trim(token,' '); trim(token,' ');
trim(line,' '); trim(line,' ');
dput(xheader,token,line); dput(xheader,token,strdup(line));
if(token != NULL &&strcasecmp(token,"Cookie") == 0) if(token != NULL &&strcasecmp(token,"Cookie") == 0)
{ {
if(!cookie) cookie = decode_cookie(line); if(!cookie) cookie = decode_cookie(line);
@ -524,24 +506,25 @@ dictionary decode_request(void* client,const char* method, char* url)
// decide what to do with the data // decide what to do with the data
if(strstr(ctype,FORM_URL_ENCODE) > 0) if(strstr(ctype,FORM_URL_ENCODE) > 0)
{ {
request = decode_url_request(post_url_decode(client,clen)); request = decode_url_request(post_data_decode(client,clen));
} else if(strstr(ctype,FORM_MULTI_PART)> 0) } else if(strstr(ctype,FORM_MULTI_PART)> 0)
{ {
//printf("Multi part form : %s\n", ctype); //printf("Multi part form : %s\n", ctype);
request = decode_multi_part_request(client,ctype); request = decode_multi_part_request(client,ctype);
} }
else if(strstr(ctype,APP_JSON) > 0)
{
char* query = json_data_decode(client,clen);
request = dict();
dput(request,"json", strdup(query));
free(query);
}
else else
{ {
LOG("Un supported yet %s\n",ctype); char* query = post_data_decode(client,clen);
return NULL; char* key = strstr(ctype,"/");
if(key)
key++;
else
key = ctype;
request = dict();
dput(request,key, strdup(query));
free(query);
} }
} }
if(ctype) free(ctype); if(ctype) free(ctype);
//if(cookie->key == NULL) {free(cookie);cookie= NULL;} //if(cookie->key == NULL) {free(cookie);cookie= NULL;}
@ -795,9 +778,9 @@ dictionary decode_url_request(const char* query)
return dic; return dic;
} }
/** /**
* Decode JSON query string to string * Decode post query string to string
*/ */
char* json_data_decode(void* client,int len) char* post_data_decode(void* client,int len)
{ {
char *query = (char*) malloc((len+1)*sizeof(char)); char *query = (char*) malloc((len+1)*sizeof(char));
for (int i = 0; i < len; i++) { for (int i = 0; i < len; i++) {
@ -805,7 +788,7 @@ char* json_data_decode(void* client,int len)
} }
query[len]='\0'; query[len]='\0';
//query = url_decode(query); //query = url_decode(query);
LOG("JSON Query %s\n", query); //LOG("JSON Query %s\n", query);
return query; return query;
} }

View File

@ -12,7 +12,6 @@
#define FORM_URL_ENCODE "application/x-www-form-urlencoded" #define FORM_URL_ENCODE "application/x-www-form-urlencoded"
#define FORM_MULTI_PART "multipart/form-data" #define FORM_MULTI_PART "multipart/form-data"
#define APP_JSON "application/json"
#define PLUGIN_HANDLER "handler" #define PLUGIN_HANDLER "handler"
#define WS_MAGIC_STRING "258EAFA5-E914-47DA-95CA-C5AB0DC85B11" #define WS_MAGIC_STRING "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
@ -41,7 +40,7 @@ dictionary decode_url_request(const char* query);
dictionary decode_request(void* client,const char* method, char* url); dictionary decode_request(void* client,const char* method, char* url);
dictionary decode_multi_part_request(void*,const char*); dictionary decode_multi_part_request(void*,const char*);
dictionary decode_cookie(const char*); dictionary decode_cookie(const char*);
char* json_data_decode(void*,int); char* post_data_decode(void*,int);
int execute_plugin(void* client, const char *path, int execute_plugin(void* client, const char *path,
const char *method, dictionary rq); const char *method, dictionary rq);