static osrfStringArray* apacheGetParamKeys(osrfStringArray* params) { if(params == NULL) return NULL; osrfStringArray* sarray = osrfNewStringArray(12); int i; //osrfLogDebug(OSRF_LOG_MARK, "Fetching URL param keys"); for( i = 0; i < params->size; i++ ) osrfStringArrayAdd(sarray, osrfStringArrayGetString(params, i++)); return sarray; }
static osrfStringArray* apacheGetParamValues(osrfStringArray* params, char* key) { if(params == NULL || key == NULL) return NULL; osrfStringArray* sarray = osrfNewStringArray(12); //osrfLogDebug(OSRF_LOG_MARK, "Fetching URL values for key %s", key); int i; for( i = 0; i < params->size; i++ ) { const char* nkey = osrfStringArrayGetString(params, i++); if(nkey && !strcmp(nkey, key)) osrfStringArrayAdd(sarray, osrfStringArrayGetString(params, i)); } return sarray; }
static void childInit(apr_pool_t *p, server_rec *s) { if(!osrfSystemBootstrapClientResc(configFile, configCtx, "translator")) { ap_log_error( APLOG_MARK, APLOG_ERR, 0, s, "Unable to Bootstrap OpenSRF Client with config %s..", configFile); return; } routerName = osrfConfigGetValue(NULL, "/router_name"); domainName = osrfConfigGetValue(NULL, "/domain"); const char* servers[] = {cacheServers}; osrfCacheInit(servers, 1, 86400); osrfConnected = 1; allowedOrigins = osrfNewStringArray(4); osrfConfigGetValueList(NULL, allowedOrigins, "/cross_origin/origin"); // at pool destroy time (= child exit time), cleanup // XXX causes us to disconnect even for clone()'d process cleanup (as in mod_cgi) //apr_pool_cleanup_register(p, NULL, childExit, apr_pool_cleanup_null); }
static osrfStringArray* apacheParseParms(request_rec* r) { if( r == NULL ) return NULL; //ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "got a valid request_rec"); char* arg = NULL; apr_pool_t *p = r->pool; /* memory pool */ growing_buffer* buffer = buffer_init(1025); /* gather the post args and append them to the url query string */ if( !strcmp(r->method,"POST") ) { ap_setup_client_block(r, REQUEST_CHUNKED_DECHUNK); //osrfLogDebug(OSRF_LOG_MARK, "gateway reading post data.."); //ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "idlchunk reading post data.."); if(ap_should_client_block(r)) { /* Start with url query string, if any */ if(r->args && r->args[0]) buffer_add(buffer, r->args); char body[1025]; //osrfLogDebug(OSRF_LOG_MARK, "gateway client has post data, reading..."); /* Append POST data */ long bread; while( (bread = ap_get_client_block(r, body, sizeof(body) - 1)) ) { if(bread < 0) { //osrfLogInfo(OSRF_LOG_MARK, // "ap_get_client_block(): returned error, exiting POST reader"); break; } body[bread] = '\0'; buffer_add( buffer, body ); //osrfLogDebug(OSRF_LOG_MARK, // "gateway read %ld bytes: %d bytes of data so far", bread, buffer->n_used); if(buffer->n_used > APACHE_TOOLS_MAX_POST_SIZE) { //osrfLogError(OSRF_LOG_MARK, "gateway received POST larger " // "than %d bytes. dropping request", APACHE_TOOLS_MAX_POST_SIZE); buffer_free(buffer); return NULL; } } //osrfLogDebug(OSRF_LOG_MARK, "gateway done reading post data"); } } else { /* GET */ if(r->args && r->args[0]) buffer_add(buffer, r->args); //ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "idlchunk read GET data.."); } if(buffer->n_used > 0) arg = apr_pstrdup(p, buffer->buf); else arg = NULL; buffer_free(buffer); if( !arg || !arg[0] ) { /* we received no request */ return NULL; } //osrfLogDebug(OSRF_LOG_MARK, "parsing URL params from post/get request data: %s", arg); //ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "parsing URL params from post/get request data: %s", arg); osrfStringArray* sarray = osrfNewStringArray(12); /* method parameters */ int sanity = 0; char* key = NULL; /* query item name */ char* val = NULL; /* query item value */ /* Parse the post/get request data into a series of name/value pairs. */ /* Load each name into an even-numbered slot of an osrfStringArray, and */ /* the corresponding value into the following odd-numbered slot. */ while( arg && (val = ap_getword(p, (const char**) &arg, '&'))) { key = ap_getword(r->pool, (const char**) &val, '='); if(!key || !key[0]) break; ap_unescape_url(key); ap_unescape_url(val); //osrfLogDebug(OSRF_LOG_MARK, "parsed URL params %s=%s", key, val); osrfStringArrayAdd(sarray, key); osrfStringArrayAdd(sarray, val); if( sanity++ > 1000 ) { //osrfLogError(OSRF_LOG_MARK, // "Parsing URL params failed sanity check: 1000 iterations"); osrfStringArrayFree(sarray); return NULL; } } //osrfLogDebug(OSRF_LOG_MARK, // "Apache tools parsed %d params key/values", sarray->size / 2 ); return sarray; }