From 922b43179f3bc1a33d18c62bee8b52c23a61bdff Mon Sep 17 00:00:00 2001 From: deuce <> Date: Fri, 3 Dec 2004 05:07:55 +0000 Subject: [PATCH] Unify js_parse_post() and js_parse_query() (They currently do exactly the same thing!) Make elements of the query object arrays which contain all of the values for that key as an array. --- src/sbbs3/websrvr.c | 99 ++++++++++++++++++++------------------------- 1 file changed, 44 insertions(+), 55 deletions(-) diff --git a/src/sbbs3/websrvr.c b/src/sbbs3/websrvr.c index a34ab71634..6e51a29a1d 100644 --- a/src/sbbs3/websrvr.c +++ b/src/sbbs3/websrvr.c @@ -1337,19 +1337,57 @@ static void unescape(char *p) *(dst)=0; } -static void js_parse_post(http_session_t * session) +static void js_add_queryval(http_session_t * session, char *key, char *value) { + JSObject* keyarray; + jsval val; + jsint len; + int alen; + + /* Return existing object if it's already been created */ + if(JS_GetProperty(session->js_cx,session->js_query,key,&val) && val!=JSVAL_VOID) { + keyarray = JSVAL_TO_OBJECT(val); + alen=-1; + } + else { + keyarray = JS_NewArrayObject(session->js_cx, 0, NULL); + if(!JS_DefineProperty(session->js_cx, session->js_query, key, OBJECT_TO_JSVAL(keyarray) + , NULL, NULL, JSPROP_ENUMERATE)) + return; + alen=0; + } + + if(alen==-1) { + if(JS_GetArrayLength(session->js_cx, keyarray, &len)==JS_FALSE) + return; + alen=JSVAL_TO_INT(len)+1; + } + + val=STRING_TO_JSVAL(JS_NewStringCopyZ(session->js_cx,value)); + JS_SetElement(session->js_cx, keyarray, alen, &val); +} + +static void js_add_header(http_session_t * session, char *key, char *value) +{ + JSString* js_str; + + if((js_str=JS_NewStringCopyZ(session->js_cx, value))==NULL) + return; + JS_DefineProperty(session->js_cx, session->js_header, key, STRING_TO_JSVAL(js_str) + ,NULL,NULL,JSPROP_ENUMERATE|JSPROP_READONLY); +} + +static void js_parse_query(http_session_t * session, char *p) { size_t key_len; size_t value_len; char *lp; char *key; char *value; - JSString* js_str; - if(session->req.post_data == NULL) + if(p == NULL) return; - lp=session->req.post_data; + lp=p; while(key_len=strcspn(lp,"=")) { key=lp; @@ -1367,23 +1405,10 @@ static void js_parse_post(http_session_t * session) } unescape(value); unescape(key); - if((js_str=JS_NewStringCopyZ(session->js_cx, value))==NULL) - return; - JS_DefineProperty(session->js_cx, session->js_query, key, STRING_TO_JSVAL(js_str) - ,NULL,NULL,JSPROP_ENUMERATE|JSPROP_READONLY); + js_add_queryval(session, key, value); } } -static void js_add_header(http_session_t * session, char *key, char *value) -{ - JSString* js_str; - - if((js_str=JS_NewStringCopyZ(session->js_cx, value))==NULL) - return; - JS_DefineProperty(session->js_cx, session->js_header, key, STRING_TO_JSVAL(js_str) - ,NULL,NULL,JSPROP_ENUMERATE|JSPROP_READONLY); -} - static BOOL parse_headers(http_session_t * session) { char *head_line; @@ -1456,7 +1481,7 @@ static BOOL parse_headers(http_session_t * session) session->req.post_len=0; session->req.post_data[session->req.post_len]=0; if(session->req.dynamic==IS_SSJS || session->req.dynamic==IS_JS) { - js_parse_post(session); + js_parse_query(session,session->req.post_data); } } else { @@ -1485,42 +1510,6 @@ static int get_version(char *p) return(i-1); } -static void js_parse_query(http_session_t * session, char *p) { - size_t key_len; - size_t value_len; - char *lp; - char *key; - char *value; - JSString* js_str; - - if(p == NULL) - return; - - lp=p; - - while(key_len=strcspn(lp,"=")) { - key=lp; - lp+=key_len; - if(*lp) { - *lp=0; - lp++; - } - value_len=strcspn(lp,"&"); - value=lp; - lp+=value_len; - if(*lp) { - *lp=0; - lp++; - } - unescape(value); - unescape(key); - if((js_str=JS_NewStringCopyZ(session->js_cx, value))==NULL) - return; - JS_DefineProperty(session->js_cx, session->js_query, key, STRING_TO_JSVAL(js_str) - ,NULL,NULL,JSPROP_ENUMERATE|JSPROP_READONLY); - } -} - static int is_dynamic_req(http_session_t* session) { int i=0; -- GitLab