static int append_request_headers(void *baton, const char *key, const char *value) { serf_bucket_t *hdrs_bkt = baton; serf_bucket_headers_setc(hdrs_bkt, key, value); return 0; }
static apr_status_t s_setup_request(serf_request_t *request, void *setup_ctx, serf_bucket_t **req_bkt, serf_response_acceptor_t *acceptor, void **acceptor_ctx, serf_response_handler_t *handler, void **handler_ctx, apr_pool_t *UNUSED(pool)) { handler_ctx_t *ctx = setup_ctx; serf_bucket_t *hdrs_bkt; serf_bucket_t *body_bkt = NULL; request_rec *r = ctx->r; int ii; if (ctx->post_data) { body_bkt = serf_bucket_simple_create(ctx->post_data, ctx->post_data_len, NULL, NULL, serf_request_get_alloc(request)); } *req_bkt = serf_bucket_request_create(ctx->method, ctx->path, body_bkt, serf_request_get_alloc(request)); hdrs_bkt = serf_bucket_request_get_headers(*req_bkt); apr_array_header_t *headers = (apr_array_header_t*)apr_table_elts(r->headers_in); apr_table_entry_t *hentryp = (apr_table_entry_t*)headers->elts; for (ii=headers->nelts-1; ii>=0; ii--) { DBG(ctx->r, "REQ[%X] REQUEST PREV key:[%s], val:[%s]", TO_ADDR(ctx->r), hentryp[ii].key, hentryp[ii].val); serf_bucket_headers_setc(hdrs_bkt, hentryp[ii].key, (hentryp[ii].val) ? hentryp[ii].val : ""); DBG(ctx->r, "REQ[%X] REQUEST AFTER key:[%s], val:[%s]", TO_ADDR(ctx->r), hentryp[ii].key, hentryp[ii].val); } if (ctx->post_data) { DBG(ctx->r, "REQ[%X] REQUEST PREV key:[%s], val:[%s]", TO_ADDR(ctx->r), "X-Chxj-Forward", "Done"); serf_bucket_headers_setc(hdrs_bkt, "X-Chxj-Forward", "Done"); DBG(ctx->r, "REQ[%X] REQUEST AFTER key:[%s], val:[%s]", TO_ADDR(ctx->r), "X-Chxj-Forward", "Done"); DBG(ctx->r, "REQ[%X] REQUEST PREV key:[%s], val:[%s]", TO_ADDR(ctx->r), "X-Chxj-Content-Length", apr_psprintf(r->pool, "%" APR_SIZE_T_FMT, ctx->post_data_len)); serf_bucket_headers_setc(hdrs_bkt, "X-Chxj-Content-Length", apr_psprintf(r->pool, "%" APR_SIZE_T_FMT , ctx->post_data_len)); DBG(ctx->r, "REQ[%X] REQUEST AFTER key:[%s], val:[%s]", TO_ADDR(ctx->r), "X-Chxj-Content-Length", apr_psprintf(r->pool, "%" APR_SIZE_T_FMT, ctx->post_data_len)); } DBG(ctx->r, "REQ[%X] REQUEST Content-Length:[%s]", TO_ADDR(ctx->r), serf_bucket_headers_get(hdrs_bkt, "Content-Length")); apr_atomic_inc32(&(ctx->requests_outstanding)); if (ctx->acceptor_ctx->ssl_flag) { serf_bucket_alloc_t *req_alloc; app_ctx_t *app_ctx = ctx->acceptor_ctx; req_alloc = serf_request_get_alloc(request); if (app_ctx->ssl_ctx == NULL) { *req_bkt = serf_bucket_ssl_encrypt_create(*req_bkt, NULL, app_ctx->bkt_alloc); app_ctx->ssl_ctx = serf_bucket_ssl_encrypt_context_get(*req_bkt); } else { *req_bkt = serf_bucket_ssl_encrypt_create(*req_bkt, app_ctx->ssl_ctx, app_ctx->bkt_alloc); } } *acceptor = ctx->acceptor; *acceptor_ctx = ctx->acceptor_ctx; *handler = ctx->handler; *handler_ctx = ctx; return APR_SUCCESS; }