bug fixes after testing
[Evergreen.git] / Open-ILS / src / apachemods / apachetools.c
1 #include "apachetools.h"
2
3 string_array* apacheParseParms(request_rec* r) {
4
5         if( r == NULL ) return NULL;
6
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 */
10
11         growing_buffer* buffer          = NULL; /* POST data */
12         growing_buffer* tmp_buf         = NULL; /* temp buffer */
13
14         char* key                                               = NULL; /* query item name */
15         char* val                                               = NULL; /* query item value */
16
17
18         /* gather the post args and append them to the url query string */
19         if( !strcmp(r->method,"POST") ) {
20
21                 ap_setup_client_block(r, REQUEST_CHUNKED_DECHUNK);
22
23                 if(ap_should_client_block(r)) {
24
25                         char body[1025];
26                         memset(body,0,1025);
27                         buffer = buffer_init(1025);
28         
29                         while(ap_get_client_block(r, body, 1024)) {
30                                 buffer_add( buffer, body );
31                                 memset(body,0,1025);
32                         }
33         
34                         if(arg && arg[0]) {
35
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);
40                                 buffer_free(tmp_buf);
41
42                         } else {
43                                 arg = (char*) apr_pstrdup(p, buffer->buf);
44                         }
45
46                         buffer_free(buffer);
47                 }
48         } 
49
50
51         if( ! arg || !arg[0] ) { /* we received no request */
52                 return NULL;
53         }
54
55
56         while( arg && (val = ap_getword(p, (const char**) &arg, '&'))) {
57
58                 key = ap_getword(r->pool, (const char**) &val, '=');
59                 if(!key || !key[0])
60                         break;
61
62                 ap_unescape_url((char*)key);
63                 ap_unescape_url((char*)val);
64
65                 string_array_add(sarray, key);
66                 string_array_add(sarray, val);
67
68         }
69
70         return sarray;
71
72 }
73
74
75
76 string_array* apacheGetParamKeys(string_array* params) {
77         if(params == NULL) return NULL; 
78         string_array* sarray    = init_string_array(12); 
79         int i;
80         for( i = 0; i < params->size; i++ ) 
81                 string_array_add(sarray, string_array_get_string(params, i++)); 
82         return sarray;
83 }
84
85 string_array* apacheGetParamValues(string_array* params, char* key) {
86
87         if(params == NULL || key == NULL) return NULL;  
88         string_array* sarray    = init_string_array(12); 
89
90         int i;
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));   
95         }
96         return sarray;
97 }
98
99
100 char* apacheGetFirstParamValue(string_array* params, char* key) {
101         if(params == NULL || key == NULL) return NULL;  
102
103         int i;
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));
108         }
109
110         return NULL;
111 }
112
113
114 int apacheDebug( char* msg, ... ) {
115         VA_LIST_TO_STRING(msg);
116         fprintf(stderr, "%s\n", VA_BUF);
117         fflush(stderr);
118         return 0;
119 }
120
121
122 int apacheError( char* msg, ... ) {
123         VA_LIST_TO_STRING(msg);
124         fprintf(stderr, "%s\n", VA_BUF);
125         fflush(stderr);
126         return HTTP_INTERNAL_SERVER_ERROR; 
127 }
128
129