Skip to content

Commit

Permalink
split finding of callbacks out of code
Browse files Browse the repository at this point in the history
svn:r350
  • Loading branch information
provos committed Mar 6, 2007
1 parent 50edb19 commit a968da7
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 14 deletions.
2 changes: 2 additions & 0 deletions evhttp.h
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,8 @@ struct evhttp_request {
*/
struct evhttp_request *evhttp_request_new(
void (*cb)(struct evhttp_request *, void *), void *arg);

/* enable delivery of chunks to requestor */
void evhttp_request_set_chunked_cb(struct evhttp_request *,
void (*cb)(struct evhttp_request *, void *));

Expand Down
39 changes: 25 additions & 14 deletions http.c
Original file line number Diff line number Diff line change
Expand Up @@ -1795,30 +1795,41 @@ evhttp_parse_query(const char *uri, struct evkeyvalq *headers)
free(line);
}

void
evhttp_handle_request(struct evhttp_request *req, void *arg)
static struct evhttp_cb *
evhttp_dispatch_callback(struct httpcbq *callbacks, struct evhttp_request *req)
{
struct evhttp *http = arg;
struct evhttp_cb *cb;

if (req->uri == NULL) {
evhttp_send_error(req, HTTP_BADREQUEST, "Bad Request");
return;
}

/* Test for different URLs */
TAILQ_FOREACH(cb, &http->callbacks, next) {
char *p = strchr(req->uri, '?');
TAILQ_FOREACH(cb, callbacks, next) {
int res;
char *p = strchr(req->uri, '?');
if (p == NULL)
res = strcmp(cb->what, req->uri) == 0;
else
res = strncmp(cb->what, req->uri,
(size_t)(p - req->uri)) == 0;
if (res) {
(*cb->cb)(req, cb->cbarg);
return;
}
if (res)
return (cb);
}

return (NULL);
}

void
evhttp_handle_request(struct evhttp_request *req, void *arg)
{
struct evhttp *http = arg;
struct evhttp_cb *cb = NULL;

if (req->uri == NULL) {
evhttp_send_error(req, HTTP_BADREQUEST, "Bad Request");
return;
}

if ((cb = evhttp_dispatch_callback(&http->callbacks, req)) != NULL) {
(*cb->cb)(req, cb->cbarg);
return;
}

/* Generic call back */
Expand Down

0 comments on commit a968da7

Please sign in to comment.