X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=src%2Fchxj_serf.c;h=0f4489d08ccd62d7121763feeb1b1cc5a93e78b3;hb=2f3204dcc69065543986259c167e13382b92a6fa;hp=67582cd34a7cabae99ce3cc464758582c559fd84;hpb=06efa69ac8c46141d5eda96e983c0b3ded32ac5d;p=modchxj%2Fmod_chxj.git diff --git a/src/chxj_serf.c b/src/chxj_serf.c index 67582cd3..0f4489d0 100644 --- a/src/chxj_serf.c +++ b/src/chxj_serf.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2009 Atsushi Konno All rights reserved. + * Copyright (C) 2005-2011 Atsushi Konno All rights reserved. * Copyright (C) 2005 QSDN,Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -139,12 +139,14 @@ s_handle_response(serf_request_t *UNUSED(request), serf_bucket_t *response, void if (SERF_BUCKET_READ_ERROR(rv)) { ctx->rv = rv; apr_atomic_dec32(&ctx->requests_outstanding); - DBG(ctx->r, "REQ[%X] end of s_handle_response() (ERROR)", (unsigned int)(apr_size_t)ctx->r); + DBG(ctx->r, "REQ[%X] (ERROR)", TO_ADDR(ctx->r)); + DBG(ctx->r,"REQ[%X] end %s()",TO_ADDR(ctx->r),__func__); return rv; } if (APR_STATUS_IS_EAGAIN(rv)) { /* 0 byte return if EAGAIN returned. */ - DBG(ctx->r, "REQ[%X] end of s_handle_response() (EAGAIN) len:[%d]", (unsigned int)(apr_size_t)ctx->r, (int)len); + DBG(ctx->r,"REQ[%X] (EAGAIN) len:[%d]", TO_ADDR(ctx->r), (int)len); + DBG(ctx->r,"REQ[%X] end %s()",TO_ADDR(ctx->r),__func__); return rv; } @@ -197,18 +199,20 @@ s_handle_response(serf_request_t *UNUSED(request), serf_bucket_t *response, void val++; key = qs_trim_string(ctx->pool, key); val = qs_trim_string(ctx->pool, val); - DBG(ctx->r, "key:[%s], val:[%s]", key, val); + DBG(ctx->r,"REQ[%X] key:[%s], val:[%s]", TO_ADDR(ctx->r),key, val); apr_table_add(ctx->headers_out, key, val); } } ctx->rv = APR_SUCCESS; apr_atomic_dec32(&ctx->requests_outstanding); - DBG(ctx->r, "REQ[%X] end of s_handle_response()(NORMAL)", (unsigned int)(apr_size_t)ctx->r); + DBG(ctx->r,"REQ[%X] (NORMAL)", TO_ADDR(ctx->r)); + DBG(ctx->r,"REQ[%X] end %s()",TO_ADDR(ctx->r),__func__); return APR_EOF; } if (APR_STATUS_IS_EAGAIN(rv)) { - DBG(ctx->r, "REQ[%X] end of s_handle_response() (EAGAIN)", (unsigned int)(apr_size_t)ctx->r); + DBG(ctx->r,"REQ[%X] (EAGAIN)", TO_ADDR(ctx->r)); + DBG(ctx->r,"REQ[%X] end %s()",TO_ADDR(ctx->r),__func__); return rv; } } @@ -241,17 +245,19 @@ s_setup_request(serf_request_t *request, 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--) { - serf_bucket_headers_setc(hdrs_bkt, hentryp[ii].key, hentryp[ii].val); - DBG(ctx->r, "REQ[%X] REQUEST key:[%s], val:[%s]", (unsigned int)(apr_size_t)ctx->r, hentryp[ii].key, hentryp[ii].val); + 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 key:[%s], val:[%s]", (unsigned int)(apr_size_t)ctx->r, "X-Chxj-Forward", "Done"); - DBG(ctx->r, "REQ[%X] REQUEST key:[%s], val:[%s]", (unsigned int)(apr_size_t)ctx->r, "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]", (unsigned int)(apr_size_t)r, serf_bucket_headers_get(hdrs_bkt, "Content-Length")); + 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) { @@ -369,7 +375,15 @@ default_chxj_serf_get(request_rec *r, apr_pool_t *ppool, const char *url_path, i } serf_connection_close(connection); - ret = apr_pstrdup(ppool, handler_ctx.response); + if (handler_ctx.response) { + ret = apr_palloc(ppool, handler_ctx.response_len + 1); + memset(ret, 0, handler_ctx.response_len + 1); + memcpy(ret, handler_ctx.response, handler_ctx.response_len); + } + else { + ret = apr_pstrdup(ppool, ""); + } + *response_len = handler_ctx.response_len; if (set_headers_flag) { r->headers_out = apr_table_copy(pool, handler_ctx.headers_out); *response_len = handler_ctx.response_len; @@ -397,7 +411,7 @@ default_chxj_serf_post(request_rec *r, apr_pool_t *ppool, const char *url_path, handler_ctx_t handler_ctx; char *ret; - DBG(r, "REQ:[%X] start chxj_serf_post()", (unsigned int)(apr_size_t)r); + DBG(r,"REQ[%X] start %s()",TO_ADDR(r),__func__); s_init(ppool, &pool); @@ -475,27 +489,32 @@ default_chxj_serf_post(request_rec *r, apr_pool_t *ppool, const char *url_path, } } - DBG(r, "end of serf request"); - DBG(r, "response_code:[%d]", handler_ctx.response_code); - DBG(r, "response:[%s][%" APR_SIZE_T_FMT "]", handler_ctx.response, handler_ctx.response_len); + DBG(r,"REQ[%X] end of serf request",TO_ADDR(r)); + DBG(r,"REQ[%X] response_code:[%d]", TO_ADDR(r),handler_ctx.response_code); + DBG(r,"REQ[%X] response:[%s][%" APR_SIZE_T_FMT "]", TO_ADDR(r),handler_ctx.response, handler_ctx.response_len); serf_connection_close(connection); if (handler_ctx.response) { - ret = apr_pstrdup(ppool, handler_ctx.response); + ret = apr_palloc(ppool, handler_ctx.response_len + 1); + memset(ret, 0, handler_ctx.response_len + 1); + memcpy(ret, handler_ctx.response, handler_ctx.response_len); } else { ret = apr_pstrdup(ppool, ""); } - if (set_headers_flag) { + if (set_headers_flag && !rv) { r->headers_out = apr_table_copy(pool, handler_ctx.headers_out); *response_len = handler_ctx.response_len; char *contentType = (char *)apr_table_get(handler_ctx.headers_out, "Content-Type"); if (contentType) { - DBG(r, "response content type[%s]", contentType); + DBG(r,"REQ[%X] response content type[%s]", TO_ADDR(r),contentType); chxj_set_content_type(r, apr_pstrdup(r->pool, contentType)); } } + if (rv) { + *response_len = 0; + } *response_code = handler_ctx.response_code; - DBG(r, "REQ:[%X] end chxj_serf_post()", (unsigned int)(apr_size_t)r); + DBG(r,"REQ[%X] end %s()",TO_ADDR(r),__func__); return ret; } @@ -515,7 +534,7 @@ default_chxj_serf_head(request_rec *r, apr_pool_t *ppool, const char *url_path, handler_ctx_t handler_ctx; char *ret; - DBG(r, "REQ:[%X] start chxj_serf_head()", (unsigned int)(apr_size_t)r); + DBG(r,"REQ[%X] start %s()",TO_ADDR(r),__func__); s_init(ppool, &pool); @@ -596,9 +615,9 @@ default_chxj_serf_head(request_rec *r, apr_pool_t *ppool, const char *url_path, } } - DBG(r, "end of serf request"); - DBG(r, "response_code:[%d]", handler_ctx.response_code); - DBG(r, "response:[%s][%" APR_SIZE_T_FMT "]", handler_ctx.response, handler_ctx.response_len); + DBG(r,"REQ[%X] end of serf request",TO_ADDR(r)); + DBG(r,"REQ[%X] response_code:[%d]", TO_ADDR(r),handler_ctx.response_code); + DBG(r,"REQ[%X] response:[%s][%" APR_SIZE_T_FMT "]", TO_ADDR(r),handler_ctx.response, handler_ctx.response_len); serf_connection_close(connection); if (handler_ctx.response) { ret = apr_pstrdup(ppool, handler_ctx.response); @@ -607,7 +626,7 @@ default_chxj_serf_head(request_rec *r, apr_pool_t *ppool, const char *url_path, ret = apr_pstrdup(ppool, ""); } *response_code = handler_ctx.response_code; - DBG(r, "REQ:[%X] end chxj_serf_post()", (unsigned int)(apr_size_t)r); + DBG(r,"REQ[%X] end %s()",TO_ADDR(r),__func__); return handler_ctx.headers_out; } /*