我有一个简单的洋葱服务器:
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)
,所以我可能做错了。
答案 0 :(得分:3)
似乎你需要写
if ((flags & OR_METHODS) == OR_DELETE)
因为这是一种比特场
(我在https://github.com/davidmoreno/onion/blob/master/src/onion/handlers/webdav.c#L102上找到了一个例子)