コード例 #1
0
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);
}
コード例 #2
0
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;
}
コード例 #3
0
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;
}
コード例 #4
0
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;
}