ngx_int_t hustdb_ha_start_del( ngx_bool_t support_post_only, ngx_bool_t key_in_body, ngx_bool_t has_tb, ngx_bool_t check_body_len, ngx_str_t * backend_uri, ngx_http_request_t *r) { if (key_in_body) { return hustdb_ha_start_post(support_post_only, key_in_body, has_tb, check_body_len, backend_uri, r); } ngx_http_hustdb_ha_write_ctx_t * ctx = __create_write_ctx(r); if (!ctx) { return NGX_ERROR; } ctx->base.base.backend_uri = backend_uri; write_ctx_t tmp; if (!__set_write_context(NULL, has_tb, r, &tmp)) { return NGX_ERROR; } __copy_data(&tmp, ctx); return ngx_http_gen_subrequest( ctx->base.base.backend_uri, r, ctx->base.peer->peer, &ctx->base.base, hustdb_ha_on_subrequest_complete); }
ngx_int_t hustdb_ha_start_post( ngx_bool_t support_post_only, ngx_bool_t key_in_body, ngx_bool_t has_tb, ngx_bool_t check_body_len, ngx_str_t * backend_uri, ngx_http_request_t *r) { ngx_http_hustdb_ha_write_ctx_t * ctx = __create_write_ctx(r); if (!ctx) { return hustdb_ha_send_response(NGX_HTTP_NOT_FOUND, NULL, NULL, r); } ctx->check_body_len = check_body_len; ctx->base.base.backend_uri = backend_uri; if (support_post_only && !(r->method & NGX_HTTP_POST)) { return NGX_HTTP_NOT_ALLOWED; } if (key_in_body) { ctx->key_in_body = true; ctx->has_tb = has_tb; } else { write_ctx_t tmp; if (!__set_write_context(NULL, has_tb, r, &tmp)) { return hustdb_ha_send_response(NGX_HTTP_NOT_FOUND, NULL, NULL, r); } __copy_data(&tmp, ctx); } ngx_int_t rc = ngx_http_read_client_request_body(r, __post_handler); if ( rc >= NGX_HTTP_SPECIAL_RESPONSE ) { return rc; } return NGX_DONE; }
static ngx_int_t __start_zwrite(ngx_str_t * backend_uri, ngx_http_request_t *r) { ngx_http_hustdb_ha_write_ctx_t * ctx = __create_zwrite_ctx(r); if (!ctx) { return hustdb_ha_send_response(NGX_HTTP_NOT_FOUND, NULL, NULL, r); } ctx->base.base.backend_uri = backend_uri; write_ctx_t tmp; if (!__parse_args(true, true, r, &tmp)) { return hustdb_ha_send_response(NGX_HTTP_NOT_FOUND, NULL, NULL, r); } __copy_data(&tmp, ctx); ngx_int_t rc = ngx_http_read_client_request_body(r, __post_body_handler); if ( rc >= NGX_HTTP_SPECIAL_RESPONSE ) { return rc; } return NGX_DONE; }
static ngx_bool_t __init_write_ctx_by_body(ngx_http_request_t *r, ngx_http_hustdb_ha_write_ctx_t * ctx) { do { char * key = hustdb_ha_get_key_from_body(r); if (!key) { break; } write_ctx_t tmp; if (!__set_write_context(key, ctx->has_tb, r, &tmp)) { break; } __copy_data(&tmp, ctx); return true; } while (0); hustdb_ha_send_response(NGX_HTTP_NOT_FOUND, NULL, NULL, r); return false; }