1 #include "apachetools.h"
3 string_array* apacheParseParms(request_rec* r) {
5 if( r == NULL ) return NULL;
7 char* arg = r->args; /* url query string */
8 apr_pool_t *p = r->pool; /* memory pool */
9 string_array* sarray = init_string_array(12); /* method parameters */
11 growing_buffer* buffer = NULL; /* POST data */
12 growing_buffer* tmp_buf = NULL; /* temp buffer */
14 char* key = NULL; /* query item name */
15 char* val = NULL; /* query item value */
18 /* gather the post args and append them to the url query string */
19 if( !strcmp(r->method,"POST") ) {
21 ap_setup_client_block(r, REQUEST_CHUNKED_DECHUNK);
23 if(ap_should_client_block(r)) {
27 buffer = buffer_init(1025);
29 while(ap_get_client_block(r, body, 1024)) {
30 buffer_add( buffer, body );
36 tmp_buf = buffer_init(1024);
37 buffer_add(tmp_buf,arg);
38 buffer_add(tmp_buf,buffer->buf);
39 arg = (char*) apr_pstrdup(p, tmp_buf->buf);
43 arg = (char*) apr_pstrdup(p, buffer->buf);
51 if( ! arg || !arg[0] ) { /* we received no request */
56 while( arg && (val = ap_getword(p, (const char**) &arg, '&'))) {
58 key = ap_getword(r->pool, (const char**) &val, '=');
62 ap_unescape_url((char*)key);
63 ap_unescape_url((char*)val);
65 string_array_add(sarray, key);
66 string_array_add(sarray, val);
76 string_array* apacheGetParamKeys(string_array* params) {
77 if(params == NULL) return NULL;
78 string_array* sarray = init_string_array(12);
80 for( i = 0; i < params->size; i++ )
81 string_array_add(sarray, string_array_get_string(params, i++));
85 string_array* apacheGetParamValues(string_array* params, char* key) {
87 if(params == NULL || key == NULL) return NULL;
88 string_array* sarray = init_string_array(12);
91 for( i = 0; i < params->size; i++ ) {
92 char* nkey = string_array_get_string(params, i++);
93 if(key && !strcmp(nkey, key))
94 string_array_add(sarray, string_array_get_string(params, i));
100 char* apacheGetFirstParamValue(string_array* params, char* key) {
101 if(params == NULL || key == NULL) return NULL;
104 for( i = 0; i < params->size; i++ ) {
105 char* nkey = string_array_get_string(params, i++);
106 if(key && !strcmp(nkey, key))
107 return strdup(string_array_get_string(params, i));