static apr_status_t setup_request(serf_request_t *request, void *setup_baton, serf_bucket_t **req_bkt, serf_response_acceptor_t *acceptor, void **acceptor_baton, serf_response_handler_t *handler, void **handler_baton, apr_pool_t *pool) { handler_baton_t *ctx = setup_baton; serf_bucket_t *hdrs_bkt; *req_bkt = serf_bucket_request_create("GET", ctx->full_path, NULL, serf_request_get_alloc(request)); hdrs_bkt = serf_bucket_request_get_headers(*req_bkt); /* FIXME: Shouldn't we be able to figure out the host ourselves? */ serf_bucket_headers_setn(hdrs_bkt, "Host", ctx->hostinfo); serf_bucket_headers_setn(hdrs_bkt, "User-Agent", "Serf/" SERF_VERSION_STRING); /* Shouldn't serf do this for us? */ serf_bucket_headers_setn(hdrs_bkt, "Accept-Encoding", "gzip"); if (ctx->app_ctx->authn != NULL) { serf_bucket_headers_setn(hdrs_bkt, "Authorization", ctx->app_ctx->authn); } if (ctx->app_ctx->using_ssl) { serf_bucket_alloc_t *req_alloc; req_alloc = serf_request_get_alloc(request); if (ctx->app_ctx->ssl_ctx == NULL) { *req_bkt = serf_bucket_ssl_encrypt_create(*req_bkt, NULL, ctx->app_ctx->bkt_alloc); ctx->app_ctx->ssl_ctx = serf_bucket_ssl_encrypt_context_get(*req_bkt); } else { *req_bkt = serf_bucket_ssl_encrypt_create(*req_bkt, ctx->app_ctx->ssl_ctx, ctx->app_ctx->bkt_alloc); } } #ifdef SERF_VERBOSE printf("Url requesting: %s\n", ctx->full_path); #endif *acceptor = ctx->acceptor; *acceptor_baton = ctx->acceptor_baton; *handler = ctx->handler; *handler_baton = ctx; return APR_SUCCESS; }
/* This function makes serf use SSL on the connection. */ apr_status_t default_https_conn_setup(apr_socket_t *skt, serf_bucket_t **input_bkt, serf_bucket_t **output_bkt, void *setup_baton, apr_pool_t *pool) { test_baton_t *tb = setup_baton; *input_bkt = serf_bucket_socket_create(skt, tb->bkt_alloc); *input_bkt = serf_bucket_ssl_decrypt_create(*input_bkt, NULL, tb->bkt_alloc); tb->ssl_context = serf_bucket_ssl_encrypt_context_get(*input_bkt); if (output_bkt) { *output_bkt = serf_bucket_ssl_encrypt_create(*output_bkt, tb->ssl_context, tb->bkt_alloc); } if (tb->server_cert_cb) serf_ssl_server_cert_callback_set(tb->ssl_context, tb->server_cert_cb, tb); serf_ssl_set_hostname(tb->ssl_context, "localhost"); return APR_SUCCESS; }
static apr_status_t setup_request(serf_request_t *request, void *vbaton, serf_bucket_t **req_bkt, serf_response_acceptor_t *acceptor, void **acceptor_baton, serf_response_handler_t *handler, void **handler_baton, apr_pool_t *pool) { s_baton_t *ctx = vbaton; serf_bucket_t *hdrs_bkt; *req_bkt = serf_bucket_request_create(ctx->r->method, ctx->r->unparsed_uri, ctx->body_bkt, serf_request_get_alloc(request)); hdrs_bkt = serf_bucket_request_get_headers(*req_bkt); apr_table_do(copy_headers_in, hdrs_bkt, ctx->r->headers_in, NULL); if (ctx->conf->preservehost) { serf_bucket_headers_setn(hdrs_bkt, "Host", apr_table_get(ctx->r->headers_in, "Host")); } else { serf_bucket_headers_setn(hdrs_bkt, "Host", ctx->conf->url.hostname); } serf_bucket_headers_setn(hdrs_bkt, "Accept-Encoding", "gzip"); if (ctx->want_ssl) { if (ctx->ssl_ctx == NULL) { *req_bkt = serf_bucket_ssl_encrypt_create(*req_bkt, NULL, ctx->bkt_alloc); ctx->ssl_ctx = serf_bucket_ssl_encrypt_context_get(*req_bkt); } else { *req_bkt = serf_bucket_ssl_encrypt_create(*req_bkt, ctx->ssl_ctx, ctx->bkt_alloc); } } *acceptor = accept_response; *acceptor_baton = ctx; *handler = handle_response; *handler_baton = ctx; return APR_SUCCESS; }
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; }