Lines Matching refs:req
156 #define REQ_VERSION_BEFORE(req, major_v, minor_v) \ argument
157 ((req)->major < (major_v) || \
158 ((req)->major == (major_v) && (req)->minor < (minor_v)))
160 #define REQ_VERSION_ATLEAST(req, major_v, minor_v) \ argument
161 ((req)->major > (major_v) || \
162 ((req)->major == (major_v) && (req)->minor >= (minor_v)))
181 struct evhttp_request *req);
183 struct evhttp_request *req);
347 evhttp_response_needs_body(struct evhttp_request *req) in evhttp_response_needs_body() argument
349 return (req->response_code != HTTP_NOCONTENT && in evhttp_response_needs_body()
350 req->response_code != HTTP_NOTMODIFIED && in evhttp_response_needs_body()
351 (req->response_code < 100 || req->response_code >= 200) && in evhttp_response_needs_body()
352 req->type != EVHTTP_REQ_HEAD); in evhttp_response_needs_body()
406 struct evhttp_request *req) in evhttp_send_continue() argument
411 req->major, req->minor); in evhttp_send_continue()
446 struct evhttp_request *req) in evhttp_make_header_request() argument
450 evhttp_remove_header(req->output_headers, "Proxy-Connection"); in evhttp_make_header_request()
453 method = evhttp_method(req->type); in evhttp_make_header_request()
456 method, req->uri, req->major, req->minor); in evhttp_make_header_request()
459 if ((req->type == EVHTTP_REQ_POST || req->type == EVHTTP_REQ_PUT) && in evhttp_make_header_request()
460 evhttp_find_header(req->output_headers, "Content-Length") == NULL){ in evhttp_make_header_request()
463 EV_SIZE_ARG(evbuffer_get_length(req->output_buffer))); in evhttp_make_header_request()
464 evhttp_add_header(req->output_headers, "Content-Length", size); in evhttp_make_header_request()
538 struct evhttp_request *req) in evhttp_make_header_response() argument
540 int is_keepalive = evhttp_is_connection_keepalive(req->input_headers); in evhttp_make_header_response()
543 req->major, req->minor, req->response_code, in evhttp_make_header_response()
544 req->response_code_line); in evhttp_make_header_response()
546 if (req->major == 1) { in evhttp_make_header_response()
547 if (req->minor >= 1) in evhttp_make_header_response()
548 evhttp_maybe_add_date_header(req->output_headers); in evhttp_make_header_response()
554 if (req->minor == 0 && is_keepalive) in evhttp_make_header_response()
555 evhttp_add_header(req->output_headers, in evhttp_make_header_response()
558 if ((req->minor >= 1 || is_keepalive) && in evhttp_make_header_response()
559 evhttp_response_needs_body(req)) { in evhttp_make_header_response()
566 req->output_headers, in evhttp_make_header_response()
567 evbuffer_get_length(req->output_buffer)); in evhttp_make_header_response()
572 if (evhttp_response_needs_body(req)) { in evhttp_make_header_response()
573 if (evhttp_find_header(req->output_headers, in evhttp_make_header_response()
575 evhttp_add_header(req->output_headers, in evhttp_make_header_response()
581 if (evhttp_is_connection_close(req->flags, req->input_headers)) { in evhttp_make_header_response()
582 evhttp_remove_header(req->output_headers, "Connection"); in evhttp_make_header_response()
583 if (!(req->flags & EVHTTP_PROXY_REQUEST)) in evhttp_make_header_response()
584 evhttp_add_header(req->output_headers, "Connection", "close"); in evhttp_make_header_response()
585 evhttp_remove_header(req->output_headers, "Proxy-Connection"); in evhttp_make_header_response()
593 evhttp_make_header(struct evhttp_connection *evcon, struct evhttp_request *req) in evhttp_make_header() argument
602 if (req->kind == EVHTTP_REQUEST) { in evhttp_make_header()
603 evhttp_make_header_request(evcon, req); in evhttp_make_header()
605 evhttp_make_header_response(evcon, req); in evhttp_make_header()
608 TAILQ_FOREACH(header, req->output_headers, next) { in evhttp_make_header()
614 if (evbuffer_get_length(req->output_buffer) > 0) { in evhttp_make_header()
622 evbuffer_add_buffer(output, req->output_buffer); in evhttp_make_header()
646 evhttp_connection_incoming_fail(struct evhttp_request *req, in evhttp_connection_incoming_fail() argument
660 if (!req->userdone) { in evhttp_connection_incoming_fail()
662 TAILQ_REMOVE(&req->evcon->requests, req, next); in evhttp_connection_incoming_fail()
666 req->evcon = NULL; in evhttp_connection_incoming_fail()
674 if (req->uri) { in evhttp_connection_incoming_fail()
675 mm_free(req->uri); in evhttp_connection_incoming_fail()
676 req->uri = NULL; in evhttp_connection_incoming_fail()
678 if (req->uri_elems) { in evhttp_connection_incoming_fail()
679 evhttp_uri_free(req->uri_elems); in evhttp_connection_incoming_fail()
680 req->uri_elems = NULL; in evhttp_connection_incoming_fail()
687 (*req->cb)(req, req->cb_arg); in evhttp_connection_incoming_fail()
701 struct evhttp_request* req = TAILQ_FIRST(&evcon->requests); in evhttp_connection_fail() local
704 EVUTIL_ASSERT(req != NULL); in evhttp_connection_fail()
717 if (evhttp_connection_incoming_fail(req, error) == -1) in evhttp_connection_fail()
725 cb = req->cb; in evhttp_connection_fail()
726 cb_arg = req->cb_arg; in evhttp_connection_fail()
736 TAILQ_REMOVE(&evcon->requests, req, next); in evhttp_connection_fail()
737 evhttp_request_free(req); in evhttp_connection_fail()
773 struct evhttp_request *req = TAILQ_FIRST(&evcon->requests); in evhttp_connection_done() local
779 TAILQ_REMOVE(&evcon->requests, req, next); in evhttp_connection_done()
780 req->evcon = NULL; in evhttp_connection_done()
785 evhttp_is_connection_close(req->flags, req->input_headers)|| in evhttp_connection_done()
786 evhttp_is_connection_close(req->flags, req->output_headers); in evhttp_connection_done()
817 (*req->cb)(req, req->cb_arg); in evhttp_connection_done()
822 if (con_outgoing && ((req->flags & EVHTTP_USER_OWNED) == 0)) { in evhttp_connection_done()
823 evhttp_request_free(req); in evhttp_connection_done()
842 evhttp_handle_chunked_read(struct evhttp_request *req, struct evbuffer *buf) in evhttp_handle_chunked_read() argument
844 if (req == NULL || buf == NULL) { in evhttp_handle_chunked_read()
861 if (req->ntoread < 0) { in evhttp_handle_chunked_read()
885 if ((ev_uint64_t)ntoread > EV_SIZE_MAX - req->body_size) { in evhttp_handle_chunked_read()
889 if (req->body_size + (size_t)ntoread > req->evcon->max_body_size) { in evhttp_handle_chunked_read()
895 req->body_size += (size_t)ntoread; in evhttp_handle_chunked_read()
896 req->ntoread = ntoread; in evhttp_handle_chunked_read()
897 if (req->ntoread == 0) { in evhttp_handle_chunked_read()
906 if (req->ntoread > EV_SSIZE_MAX) { in evhttp_handle_chunked_read()
911 if (req->ntoread > 0 && buflen < (ev_uint64_t)req->ntoread) in evhttp_handle_chunked_read()
915 evbuffer_remove_buffer(buf, req->input_buffer, (size_t)req->ntoread); in evhttp_handle_chunked_read()
916 req->ntoread = -1; in evhttp_handle_chunked_read()
917 if (req->chunk_cb != NULL) { in evhttp_handle_chunked_read()
918 req->flags |= EVHTTP_REQ_DEFER_FREE; in evhttp_handle_chunked_read()
919 (*req->chunk_cb)(req, req->cb_arg); in evhttp_handle_chunked_read()
920 evbuffer_drain(req->input_buffer, in evhttp_handle_chunked_read()
921 evbuffer_get_length(req->input_buffer)); in evhttp_handle_chunked_read()
922 req->flags &= ~EVHTTP_REQ_DEFER_FREE; in evhttp_handle_chunked_read()
923 if ((req->flags & EVHTTP_REQ_NEEDS_FREE) != 0) { in evhttp_handle_chunked_read()
933 evhttp_read_trailer(struct evhttp_connection *evcon, struct evhttp_request *req) in evhttp_read_trailer() argument
937 switch (evhttp_parse_headers(req, buf)) { in evhttp_read_trailer()
955 evhttp_read_body(struct evhttp_connection *evcon, struct evhttp_request *req) in evhttp_read_body() argument
959 if (req->chunked) { in evhttp_read_body()
960 switch (evhttp_handle_chunked_read(req, buf)) { in evhttp_read_body()
964 evhttp_read_trailer(evcon, req); in evhttp_read_body()
974 evhttp_request_free(req); in evhttp_read_body()
980 } else if (req->ntoread < 0) { in evhttp_read_body()
982 if ((size_t)(req->body_size + evbuffer_get_length(buf)) < req->body_size) { in evhttp_read_body()
987 req->body_size += evbuffer_get_length(buf); in evhttp_read_body()
988 evbuffer_add_buffer(req->input_buffer, buf); in evhttp_read_body()
989 } else if (req->chunk_cb != NULL || evbuffer_get_length(buf) >= (size_t)req->ntoread) { in evhttp_read_body()
995 if (n > (size_t) req->ntoread) in evhttp_read_body()
996 n = (size_t) req->ntoread; in evhttp_read_body()
997 req->ntoread -= n; in evhttp_read_body()
998 req->body_size += n; in evhttp_read_body()
999 evbuffer_remove_buffer(buf, req->input_buffer, n); in evhttp_read_body()
1002 if (req->body_size > req->evcon->max_body_size || in evhttp_read_body()
1003 (!req->chunked && req->ntoread >= 0 && in evhttp_read_body()
1004 (size_t)req->ntoread > req->evcon->max_body_size)) { in evhttp_read_body()
1013 if (evbuffer_get_length(req->input_buffer) > 0 && req->chunk_cb != NULL) { in evhttp_read_body()
1014 req->flags |= EVHTTP_REQ_DEFER_FREE; in evhttp_read_body()
1015 (*req->chunk_cb)(req, req->cb_arg); in evhttp_read_body()
1016 req->flags &= ~EVHTTP_REQ_DEFER_FREE; in evhttp_read_body()
1017 evbuffer_drain(req->input_buffer, in evhttp_read_body()
1018 evbuffer_get_length(req->input_buffer)); in evhttp_read_body()
1019 if ((req->flags & EVHTTP_REQ_NEEDS_FREE) != 0) { in evhttp_read_body()
1020 evhttp_request_free(req); in evhttp_read_body()
1025 if (req->ntoread == 0) { in evhttp_read_body()
1047 struct evhttp_request *req = TAILQ_FIRST(&evcon->requests); in evhttp_read_cb() local
1055 evhttp_read_firstline(evcon, req); in evhttp_read_cb()
1060 evhttp_read_header(evcon, req); in evhttp_read_cb()
1065 evhttp_read_body(evcon, req); in evhttp_read_cb()
1070 evhttp_read_trailer(evcon, req); in evhttp_read_cb()
1109 struct evhttp_request *req = TAILQ_FIRST(&evcon->requests); in evhttp_write_connectioncb() local
1110 EVUTIL_ASSERT(req != NULL); in evhttp_write_connectioncb()
1115 req->kind = EVHTTP_RESPONSE; in evhttp_write_connectioncb()
1127 struct evhttp_request *req; in evhttp_connection_free() local
1140 while ((req = TAILQ_FIRST(&evcon->requests)) != NULL) { in evhttp_connection_free()
1141 TAILQ_REMOVE(&evcon->requests, req, next); in evhttp_connection_free()
1142 evhttp_request_free(req); in evhttp_connection_free()
1197 struct evhttp_request *req = TAILQ_FIRST(&evcon->requests); in evhttp_request_dispatch() local
1200 if (req == NULL) in evhttp_request_dispatch()
1212 evhttp_make_header(evcon, req); in evhttp_request_dispatch()
1326 struct evhttp_request *req = TAILQ_FIRST(&evcon->requests); in evhttp_error_cb() local
1341 if (!req->chunked && req->ntoread < 0 in evhttp_error_cb()
1472 evhttp_parse_http_version(const char *version, struct evhttp_request *req) in evhttp_parse_http_version() argument
1479 __func__, version, req, req->remote_host)); in evhttp_parse_http_version()
1482 req->major = major; in evhttp_parse_http_version()
1483 req->minor = minor; in evhttp_parse_http_version()
1490 evhttp_parse_response_line(struct evhttp_request *req, char *line) in evhttp_parse_response_line() argument
1503 if (evhttp_parse_http_version(protocol, req) < 0) in evhttp_parse_response_line()
1506 req->response_code = atoi(number); in evhttp_parse_response_line()
1507 if (!evhttp_valid_response_code(req->response_code)) { in evhttp_parse_response_line()
1513 if ((req->response_code_line = mm_strdup(readable)) == NULL) { in evhttp_parse_response_line()
1524 evhttp_parse_request_line(struct evhttp_request *req, char *line) in evhttp_parse_request_line() argument
1545 req->type = EVHTTP_REQ_GET; in evhttp_parse_request_line()
1547 req->type = EVHTTP_REQ_POST; in evhttp_parse_request_line()
1549 req->type = EVHTTP_REQ_HEAD; in evhttp_parse_request_line()
1551 req->type = EVHTTP_REQ_PUT; in evhttp_parse_request_line()
1553 req->type = EVHTTP_REQ_DELETE; in evhttp_parse_request_line()
1555 req->type = EVHTTP_REQ_OPTIONS; in evhttp_parse_request_line()
1557 req->type = EVHTTP_REQ_TRACE; in evhttp_parse_request_line()
1559 req->type = EVHTTP_REQ_PATCH; in evhttp_parse_request_line()
1561 req->type = _EVHTTP_REQ_UNKNOWN; in evhttp_parse_request_line()
1563 __func__, method, req, req->remote_host)); in evhttp_parse_request_line()
1568 if (evhttp_parse_http_version(version, req) < 0) in evhttp_parse_request_line()
1571 if ((req->uri = mm_strdup(uri)) == NULL) { in evhttp_parse_request_line()
1576 if ((req->uri_elems = evhttp_uri_parse_with_flags(req->uri, in evhttp_parse_request_line()
1584 scheme = evhttp_uri_get_scheme(req->uri_elems); in evhttp_parse_request_line()
1585 hostname = evhttp_uri_get_host(req->uri_elems); in evhttp_parse_request_line()
1589 !evhttp_find_vhost(req->evcon->http_server, NULL, hostname)) in evhttp_parse_request_line()
1590 req->flags |= EVHTTP_PROXY_REQUEST; in evhttp_parse_request_line()
1722 evhttp_parse_firstline(struct evhttp_request *req, struct evbuffer *buffer) in evhttp_parse_firstline() argument
1731 if (req->evcon != NULL && in evhttp_parse_firstline()
1732 evbuffer_get_length(buffer) > req->evcon->max_headers_size) in evhttp_parse_firstline()
1738 if (req->evcon != NULL && in evhttp_parse_firstline()
1739 line_length > req->evcon->max_headers_size) { in evhttp_parse_firstline()
1744 req->headers_size = line_length; in evhttp_parse_firstline()
1746 switch (req->kind) { in evhttp_parse_firstline()
1748 if (evhttp_parse_request_line(req, line) == -1) in evhttp_parse_firstline()
1752 if (evhttp_parse_response_line(req, line) == -1) in evhttp_parse_firstline()
1787 evhttp_parse_headers(struct evhttp_request *req, struct evbuffer* buffer) in evhttp_parse_headers() argument
1793 struct evkeyvalq* headers = req->input_headers; in evhttp_parse_headers()
1799 req->headers_size += line_length; in evhttp_parse_headers()
1801 if (req->evcon != NULL && in evhttp_parse_headers()
1802 req->headers_size > req->evcon->max_headers_size) { in evhttp_parse_headers()
1836 if (req->evcon != NULL && in evhttp_parse_headers()
1837 req->headers_size + evbuffer_get_length(buffer) > req->evcon->max_headers_size) in evhttp_parse_headers()
1849 evhttp_get_body_length(struct evhttp_request *req) in evhttp_get_body_length() argument
1851 struct evkeyvalq *headers = req->input_headers; in evhttp_get_body_length()
1859 req->ntoread = -1; in evhttp_get_body_length()
1868 req->ntoread = -1; in evhttp_get_body_length()
1877 req->ntoread = ntoread; in evhttp_get_body_length()
1881 __func__, EV_I64_ARG(req->ntoread), in evhttp_get_body_length()
1882 EV_SIZE_ARG(evbuffer_get_length(bufferevent_get_input(req->evcon->bufev))))); in evhttp_get_body_length()
1910 evhttp_get_body(struct evhttp_connection *evcon, struct evhttp_request *req) in evhttp_get_body() argument
1915 if (req->kind == EVHTTP_REQUEST && in evhttp_get_body()
1916 !evhttp_method_may_have_body(req->type)) { in evhttp_get_body()
1921 xfer_enc = evhttp_find_header(req->input_headers, "Transfer-Encoding"); in evhttp_get_body()
1923 req->chunked = 1; in evhttp_get_body()
1924 req->ntoread = -1; in evhttp_get_body()
1926 if (evhttp_get_body_length(req) == -1) { in evhttp_get_body()
1931 if (req->kind == EVHTTP_REQUEST && req->ntoread < 1) { in evhttp_get_body()
1940 if (req->kind == EVHTTP_REQUEST && REQ_VERSION_ATLEAST(req, 1, 1)) { in evhttp_get_body()
1943 expect = evhttp_find_header(req->input_headers, "Expect"); in evhttp_get_body()
1952 if (req->ntoread > 0) { in evhttp_get_body()
1954 …if ((req->evcon->max_body_size <= EV_INT64_MAX) && (ev_uint64_t)req->ntoread > req->evcon->max_bod… in evhttp_get_body()
1955 evhttp_send_error(req, HTTP_ENTITYTOOLARGE, NULL); in evhttp_get_body()
1960 evhttp_send_continue(evcon, req); in evhttp_get_body()
1962 evhttp_send_error(req, HTTP_EXPECTATIONFAILED, in evhttp_get_body()
1969 evhttp_read_body(evcon, req); in evhttp_get_body()
1975 struct evhttp_request *req) in evhttp_read_firstline() argument
1979 res = evhttp_parse_firstline(req, bufferevent_get_input(evcon->bufev)); in evhttp_read_firstline()
1992 evhttp_read_header(evcon, req); in evhttp_read_firstline()
1997 struct evhttp_request *req) in evhttp_read_header() argument
2002 res = evhttp_parse_headers(req, bufferevent_get_input(evcon->bufev)); in evhttp_read_header()
2018 switch (req->kind) { in evhttp_read_header()
2022 evhttp_get_body(evcon, req); in evhttp_read_header()
2028 if (req->response_code == 100) { in evhttp_read_header()
2032 if (!evhttp_response_needs_body(req)) { in evhttp_read_header()
2034 __func__, req->response_code)); in evhttp_read_header()
2039 __func__, req->remote_host, EV_SOCK_ARG(fd))); in evhttp_read_header()
2040 evhttp_get_body(evcon, req); in evhttp_read_header()
2240 struct evhttp_request *req, in evhttp_make_request() argument
2244 req->kind = EVHTTP_REQUEST; in evhttp_make_request()
2245 req->type = type; in evhttp_make_request()
2246 if (req->uri != NULL) in evhttp_make_request()
2247 mm_free(req->uri); in evhttp_make_request()
2248 if ((req->uri = mm_strdup(uri)) == NULL) { in evhttp_make_request()
2250 evhttp_request_free(req); in evhttp_make_request()
2255 if (!req->major && !req->minor) { in evhttp_make_request()
2256 req->major = 1; in evhttp_make_request()
2257 req->minor = 1; in evhttp_make_request()
2260 EVUTIL_ASSERT(req->evcon == NULL); in evhttp_make_request()
2261 req->evcon = evcon; in evhttp_make_request()
2262 EVUTIL_ASSERT(!(req->flags & EVHTTP_REQ_OWN_CONNECTION)); in evhttp_make_request()
2264 TAILQ_INSERT_TAIL(&evcon->requests, req, next); in evhttp_make_request()
2274 TAILQ_REMOVE(&evcon->requests, req, next); in evhttp_make_request()
2284 if (TAILQ_FIRST(&evcon->requests) == req) in evhttp_make_request()
2291 evhttp_cancel_request(struct evhttp_request *req) in evhttp_cancel_request() argument
2293 struct evhttp_connection *evcon = req->evcon; in evhttp_cancel_request()
2296 if (TAILQ_FIRST(&evcon->requests) == req) { in evhttp_cancel_request()
2309 TAILQ_REMOVE(&evcon->requests, req, next); in evhttp_cancel_request()
2313 evhttp_request_free(req); in evhttp_cancel_request()
2347 struct evhttp_request *req = TAILQ_FIRST(&evcon->requests); in evhttp_send_done() local
2348 TAILQ_REMOVE(&evcon->requests, req, next); in evhttp_send_done()
2351 (REQ_VERSION_BEFORE(req, 1, 1) && in evhttp_send_done()
2352 !evhttp_is_connection_keepalive(req->input_headers))|| in evhttp_send_done()
2353 evhttp_is_connection_close(req->flags, req->input_headers) || in evhttp_send_done()
2354 evhttp_is_connection_close(req->flags, req->output_headers); in evhttp_send_done()
2356 EVUTIL_ASSERT(req->flags & EVHTTP_REQ_OWN_CONNECTION); in evhttp_send_done()
2357 evhttp_request_free(req); in evhttp_send_done()
2375 evhttp_send_error(struct evhttp_request *req, int error, const char *reason) in evhttp_send_error() argument
2387 evhttp_connection_free(req->evcon); in evhttp_send_error()
2394 evhttp_response_code(req, error, reason); in evhttp_send_error()
2398 evhttp_send_page(req, buf); in evhttp_send_error()
2407 evhttp_send(struct evhttp_request *req, struct evbuffer *databuf) in evhttp_send() argument
2409 struct evhttp_connection *evcon = req->evcon; in evhttp_send()
2412 evhttp_request_free(req); in evhttp_send()
2416 EVUTIL_ASSERT(TAILQ_FIRST(&evcon->requests) == req); in evhttp_send()
2419 req->userdone = 1; in evhttp_send()
2423 evbuffer_add_buffer(req->output_buffer, databuf); in evhttp_send()
2426 evhttp_make_header(evcon, req); in evhttp_send()
2432 evhttp_send_reply(struct evhttp_request *req, int code, const char *reason, in evhttp_send_reply() argument
2435 evhttp_response_code(req, code, reason); in evhttp_send_reply()
2437 evhttp_send(req, databuf); in evhttp_send_reply()
2441 evhttp_send_reply_start(struct evhttp_request *req, int code, in evhttp_send_reply_start() argument
2444 evhttp_response_code(req, code, reason); in evhttp_send_reply_start()
2445 if (evhttp_find_header(req->output_headers, "Content-Length") == NULL && in evhttp_send_reply_start()
2446 REQ_VERSION_ATLEAST(req, 1, 1) && in evhttp_send_reply_start()
2447 evhttp_response_needs_body(req)) { in evhttp_send_reply_start()
2453 evhttp_add_header(req->output_headers, "Transfer-Encoding", in evhttp_send_reply_start()
2455 req->chunked = 1; in evhttp_send_reply_start()
2457 req->chunked = 0; in evhttp_send_reply_start()
2459 evhttp_make_header(req->evcon, req); in evhttp_send_reply_start()
2460 evhttp_write_buffer(req->evcon, NULL, NULL); in evhttp_send_reply_start()
2464 evhttp_send_reply_chunk(struct evhttp_request *req, struct evbuffer *databuf) in evhttp_send_reply_chunk() argument
2466 struct evhttp_connection *evcon = req->evcon; in evhttp_send_reply_chunk()
2476 if (!evhttp_response_needs_body(req)) in evhttp_send_reply_chunk()
2478 if (req->chunked) { in evhttp_send_reply_chunk()
2483 if (req->chunked) { in evhttp_send_reply_chunk()
2490 evhttp_send_reply_end(struct evhttp_request *req) in evhttp_send_reply_end() argument
2492 struct evhttp_connection *evcon = req->evcon; in evhttp_send_reply_end()
2496 evhttp_request_free(req); in evhttp_send_reply_end()
2503 req->userdone = 1; in evhttp_send_reply_end()
2505 if (req->chunked) { in evhttp_send_reply_end()
2507 evhttp_write_buffer(req->evcon, evhttp_send_done, NULL); in evhttp_send_reply_end()
2508 req->chunked = 0; in evhttp_send_reply_end()
2610 evhttp_response_code(struct evhttp_request *req, int code, const char *reason) in evhttp_response_code() argument
2612 req->kind = EVHTTP_RESPONSE; in evhttp_response_code()
2613 req->response_code = code; in evhttp_response_code()
2614 if (req->response_code_line != NULL) in evhttp_response_code()
2615 mm_free(req->response_code_line); in evhttp_response_code()
2618 req->response_code_line = mm_strdup(reason); in evhttp_response_code()
2619 if (req->response_code_line == NULL) { in evhttp_response_code()
2626 evhttp_send_page(struct evhttp_request *req, struct evbuffer *databuf) in evhttp_send_page() argument
2628 if (!req->major || !req->minor) { in evhttp_send_page()
2629 req->major = 1; in evhttp_send_page()
2630 req->minor = 1; in evhttp_send_page()
2633 if (req->kind != EVHTTP_RESPONSE) in evhttp_send_page()
2634 evhttp_response_code(req, 200, "OK"); in evhttp_send_page()
2636 evhttp_clear_headers(req->output_headers); in evhttp_send_page()
2637 evhttp_add_header(req->output_headers, "Content-Type", "text/html"); in evhttp_send_page()
2638 evhttp_add_header(req->output_headers, "Connection", "close"); in evhttp_send_page()
2640 evhttp_send(req, databuf); in evhttp_send_page()
2875 evhttp_dispatch_callback(struct httpcbq *callbacks, struct evhttp_request *req) in evhttp_dispatch_callback() argument
2883 path = evhttp_uri_get_path(req->uri_elems); in evhttp_dispatch_callback()
3005 evhttp_handle_request(struct evhttp_request *req, void *arg) in evhttp_handle_request() argument
3012 req->userdone = 0; in evhttp_handle_request()
3014 if (req->type == 0 || req->uri == NULL) { in evhttp_handle_request()
3015 evhttp_send_error(req, HTTP_BADREQUEST, NULL); in evhttp_handle_request()
3019 if ((http->allowed_methods & req->type) == 0) { in evhttp_handle_request()
3021 (unsigned)req->type, (unsigned)http->allowed_methods)); in evhttp_handle_request()
3022 evhttp_send_error(req, HTTP_NOTIMPLEMENTED, NULL); in evhttp_handle_request()
3027 hostname = evhttp_request_get_host(req); in evhttp_handle_request()
3032 if ((cb = evhttp_dispatch_callback(&http->callbacks, req)) != NULL) { in evhttp_handle_request()
3033 (*cb->cb)(req, cb->cbarg); in evhttp_handle_request()
3039 (*http->gencb)(req, http->gencbarg); in evhttp_handle_request()
3053 if ((escaped_html = evhttp_htmlescape(req->uri)) == NULL) { in evhttp_handle_request()
3054 evhttp_connection_free(req->evcon); in evhttp_handle_request()
3060 evhttp_connection_free(req->evcon); in evhttp_handle_request()
3064 evhttp_response_code(req, HTTP_NOTFOUND, "Not Found"); in evhttp_handle_request()
3070 evhttp_send_page(req, buf); in evhttp_handle_request()
3464 struct evhttp_request *req = NULL; in evhttp_request_new() local
3467 if ((req = mm_calloc(1, sizeof(struct evhttp_request))) == NULL) { in evhttp_request_new()
3472 req->headers_size = 0; in evhttp_request_new()
3473 req->body_size = 0; in evhttp_request_new()
3475 req->kind = EVHTTP_RESPONSE; in evhttp_request_new()
3476 req->input_headers = mm_calloc(1, sizeof(struct evkeyvalq)); in evhttp_request_new()
3477 if (req->input_headers == NULL) { in evhttp_request_new()
3481 TAILQ_INIT(req->input_headers); in evhttp_request_new()
3483 req->output_headers = mm_calloc(1, sizeof(struct evkeyvalq)); in evhttp_request_new()
3484 if (req->output_headers == NULL) { in evhttp_request_new()
3488 TAILQ_INIT(req->output_headers); in evhttp_request_new()
3490 if ((req->input_buffer = evbuffer_new()) == NULL) { in evhttp_request_new()
3495 if ((req->output_buffer = evbuffer_new()) == NULL) { in evhttp_request_new()
3500 req->cb = cb; in evhttp_request_new()
3501 req->cb_arg = arg; in evhttp_request_new()
3503 return (req); in evhttp_request_new()
3506 if (req != NULL) in evhttp_request_new()
3507 evhttp_request_free(req); in evhttp_request_new()
3512 evhttp_request_free(struct evhttp_request *req) in evhttp_request_free() argument
3514 if ((req->flags & EVHTTP_REQ_DEFER_FREE) != 0) { in evhttp_request_free()
3515 req->flags |= EVHTTP_REQ_NEEDS_FREE; in evhttp_request_free()
3519 if (req->remote_host != NULL) in evhttp_request_free()
3520 mm_free(req->remote_host); in evhttp_request_free()
3521 if (req->uri != NULL) in evhttp_request_free()
3522 mm_free(req->uri); in evhttp_request_free()
3523 if (req->uri_elems != NULL) in evhttp_request_free()
3524 evhttp_uri_free(req->uri_elems); in evhttp_request_free()
3525 if (req->response_code_line != NULL) in evhttp_request_free()
3526 mm_free(req->response_code_line); in evhttp_request_free()
3527 if (req->host_cache != NULL) in evhttp_request_free()
3528 mm_free(req->host_cache); in evhttp_request_free()
3530 evhttp_clear_headers(req->input_headers); in evhttp_request_free()
3531 mm_free(req->input_headers); in evhttp_request_free()
3533 evhttp_clear_headers(req->output_headers); in evhttp_request_free()
3534 mm_free(req->output_headers); in evhttp_request_free()
3536 if (req->input_buffer != NULL) in evhttp_request_free()
3537 evbuffer_free(req->input_buffer); in evhttp_request_free()
3539 if (req->output_buffer != NULL) in evhttp_request_free()
3540 evbuffer_free(req->output_buffer); in evhttp_request_free()
3542 mm_free(req); in evhttp_request_free()
3546 evhttp_request_own(struct evhttp_request *req) in evhttp_request_own() argument
3548 req->flags |= EVHTTP_USER_OWNED; in evhttp_request_own()
3552 evhttp_request_is_owned(struct evhttp_request *req) in evhttp_request_is_owned() argument
3554 return (req->flags & EVHTTP_USER_OWNED) != 0; in evhttp_request_is_owned()
3558 evhttp_request_get_connection(struct evhttp_request *req) in evhttp_request_get_connection() argument
3560 return req->evcon; in evhttp_request_get_connection()
3570 evhttp_request_set_chunked_cb(struct evhttp_request *req, in evhttp_request_set_chunked_cb() argument
3573 req->chunk_cb = cb; in evhttp_request_set_chunked_cb()
3581 evhttp_request_get_uri(const struct evhttp_request *req) { in evhttp_request_get_uri() argument
3582 if (req->uri == NULL) in evhttp_request_get_uri()
3583 event_debug(("%s: request %p has no uri\n", __func__, req)); in evhttp_request_get_uri()
3584 return (req->uri); in evhttp_request_get_uri()
3588 evhttp_request_get_evhttp_uri(const struct evhttp_request *req) { in evhttp_request_get_evhttp_uri() argument
3589 if (req->uri_elems == NULL) in evhttp_request_get_evhttp_uri()
3591 __func__, req)); in evhttp_request_get_evhttp_uri()
3592 return (req->uri_elems); in evhttp_request_get_evhttp_uri()
3596 evhttp_request_get_host(struct evhttp_request *req) in evhttp_request_get_host() argument
3600 if (req->host_cache) in evhttp_request_get_host()
3601 return req->host_cache; in evhttp_request_get_host()
3603 if (req->uri_elems) in evhttp_request_get_host()
3604 host = evhttp_uri_get_host(req->uri_elems); in evhttp_request_get_host()
3605 if (!host && req->input_headers) { in evhttp_request_get_host()
3609 host = evhttp_find_header(req->input_headers, "Host"); in evhttp_request_get_host()
3618 req->host_cache = mm_malloc(len + 1); in evhttp_request_get_host()
3619 if (!req->host_cache) { in evhttp_request_get_host()
3623 memcpy(req->host_cache, host, len); in evhttp_request_get_host()
3624 req->host_cache[len] = '\0'; in evhttp_request_get_host()
3625 host = req->host_cache; in evhttp_request_get_host()
3634 evhttp_request_get_command(const struct evhttp_request *req) { in evhttp_request_get_command() argument
3635 return (req->type); in evhttp_request_get_command()
3639 evhttp_request_get_response_code(const struct evhttp_request *req) in evhttp_request_get_response_code() argument
3641 return req->response_code; in evhttp_request_get_response_code()
3645 struct evkeyvalq *evhttp_request_get_input_headers(struct evhttp_request *req) in evhttp_request_get_input_headers() argument
3647 return (req->input_headers); in evhttp_request_get_input_headers()
3651 struct evkeyvalq *evhttp_request_get_output_headers(struct evhttp_request *req) in evhttp_request_get_output_headers() argument
3653 return (req->output_headers); in evhttp_request_get_output_headers()
3657 struct evbuffer *evhttp_request_get_input_buffer(struct evhttp_request *req) in evhttp_request_get_input_buffer() argument
3659 return (req->input_buffer); in evhttp_request_get_input_buffer()
3663 struct evbuffer *evhttp_request_get_output_buffer(struct evhttp_request *req) in evhttp_request_get_output_buffer() argument
3665 return (req->output_buffer); in evhttp_request_get_output_buffer()
3717 struct evhttp_request *req; in evhttp_associate_new_request_with_connection() local
3718 if ((req = evhttp_request_new(evhttp_handle_request, http)) == NULL) in evhttp_associate_new_request_with_connection()
3721 if ((req->remote_host = mm_strdup(evcon->address)) == NULL) { in evhttp_associate_new_request_with_connection()
3723 evhttp_request_free(req); in evhttp_associate_new_request_with_connection()
3726 req->remote_port = evcon->port; in evhttp_associate_new_request_with_connection()
3728 req->evcon = evcon; /* the request ends up owning the connection */ in evhttp_associate_new_request_with_connection()
3729 req->flags |= EVHTTP_REQ_OWN_CONNECTION; in evhttp_associate_new_request_with_connection()
3736 req->userdone = 1; in evhttp_associate_new_request_with_connection()
3738 TAILQ_INSERT_TAIL(&evcon->requests, req, next); in evhttp_associate_new_request_with_connection()
3740 req->kind = EVHTTP_REQUEST; in evhttp_associate_new_request_with_connection()