从libonion中的请求获取方法

时间:2015-11-26 12:22:41

标签: c

我有一个简单的洋葱服务器:

int parse_input(void *p, onion_request *req, onion_response *res)
{
    const onion_request_flags flags = onion_request_get_flags(req);

    if (flags == OR_DELETE) {
        printf("got OR_DELETE\n"); // It doesnt work
    }
}

onion *o=NULL;

static void shutdown_server(int _)
{
    if (o)
    onion_listen_stop(o);
}

int main(int argc, char **argv)
{
    signal(SIGINT,shutdown_server);
    signal(SIGTERM,shutdown_server);

    o=onion_new(O_POOL);
    onion_set_timeout(o, 5000);
    onion_set_hostname(o,"0.0.0.0");
    onion_set_port(o, "4711");
    onion_url *urls=onion_root_url(o);

    onion_url_add(urls, "", parse_input);
    onion_url_add(urls, "^(.*)$", parse_input);

    onion_listen(o);
    onion_free(o);
    return 0;
}

我想要做的是每当我通过curl发送请求时,我希望服务器在parse_input内获取请求的方法。例如:

curl -X "DELETE" localhost:4711/

我现在希望服务器获得DELETE方法,因此我可以根据它进行调度。但它没有输入if if (flags == OR_DELETE),所以我可能做错了。

1 个答案:

答案 0 :(得分:3)

似乎你需要写

if ((flags & OR_METHODS) == OR_DELETE)

因为这是一种比特场

(我在https://github.com/davidmoreno/onion/blob/master/src/onion/handlers/webdav.c#L102上找到了一个例子)