Lines Matching refs:req
211 struct evhttp_request *req);
213 struct evhttp_request *req);
379 struct evhttp_request *req) in evhttp_make_header_request() argument
383 evhttp_remove_header(req->output_headers, "Proxy-Connection"); in evhttp_make_header_request()
386 method = evhttp_method(req->type); in evhttp_make_header_request()
388 method, req->uri, req->major, req->minor); in evhttp_make_header_request()
391 if (req->type == EVHTTP_REQ_POST && in evhttp_make_header_request()
392 evhttp_find_header(req->output_headers, "Content-Length") == NULL){ in evhttp_make_header_request()
395 (long)EVBUFFER_LENGTH(req->output_buffer)); in evhttp_make_header_request()
396 evhttp_add_header(req->output_headers, "Content-Length", size); in evhttp_make_header_request()
462 struct evhttp_request *req) in evhttp_make_header_response() argument
464 int is_keepalive = evhttp_is_connection_keepalive(req->input_headers); in evhttp_make_header_response()
466 req->major, req->minor, req->response_code, in evhttp_make_header_response()
467 req->response_code_line); in evhttp_make_header_response()
469 if (req->major == 1) { in evhttp_make_header_response()
470 if (req->minor == 1) in evhttp_make_header_response()
471 evhttp_maybe_add_date_header(req->output_headers); in evhttp_make_header_response()
477 if (req->minor == 0 && is_keepalive) in evhttp_make_header_response()
478 evhttp_add_header(req->output_headers, in evhttp_make_header_response()
481 if (req->minor == 1 || is_keepalive) { in evhttp_make_header_response()
488 req->output_headers, in evhttp_make_header_response()
489 (long)EVBUFFER_LENGTH(req->output_buffer)); in evhttp_make_header_response()
494 if (EVBUFFER_LENGTH(req->output_buffer)) { in evhttp_make_header_response()
495 if (evhttp_find_header(req->output_headers, in evhttp_make_header_response()
497 evhttp_add_header(req->output_headers, in evhttp_make_header_response()
503 if (evhttp_is_connection_close(req->flags, req->input_headers)) { in evhttp_make_header_response()
504 evhttp_remove_header(req->output_headers, "Connection"); in evhttp_make_header_response()
505 if (!(req->flags & EVHTTP_PROXY_REQUEST)) in evhttp_make_header_response()
506 evhttp_add_header(req->output_headers, "Connection", "close"); in evhttp_make_header_response()
507 evhttp_remove_header(req->output_headers, "Proxy-Connection"); in evhttp_make_header_response()
512 evhttp_make_header(struct evhttp_connection *evcon, struct evhttp_request *req) in evhttp_make_header() argument
520 if (req->kind == EVHTTP_REQUEST) { in evhttp_make_header()
521 evhttp_make_header_request(evcon, req); in evhttp_make_header()
523 evhttp_make_header_response(evcon, req); in evhttp_make_header()
526 TAILQ_FOREACH(header, req->output_headers, next) { in evhttp_make_header()
532 if (EVBUFFER_LENGTH(req->output_buffer) > 0) { in evhttp_make_header()
537 evbuffer_add_buffer(evcon->output_buffer, req->output_buffer); in evhttp_make_header()
599 evhttp_connection_incoming_fail(struct evhttp_request *req, in evhttp_connection_incoming_fail() argument
615 if (req->uri) { in evhttp_connection_incoming_fail()
616 free(req->uri); in evhttp_connection_incoming_fail()
617 req->uri = NULL; in evhttp_connection_incoming_fail()
624 (*req->cb)(req, req->cb_arg); in evhttp_connection_incoming_fail()
634 struct evhttp_request* req = TAILQ_FIRST(&evcon->requests); in evhttp_connection_fail() local
637 assert(req != NULL); in evhttp_connection_fail()
648 if (evhttp_connection_incoming_fail(req, error) == -1) in evhttp_connection_fail()
654 cb = req->cb; in evhttp_connection_fail()
655 cb_arg = req->cb_arg; in evhttp_connection_fail()
657 TAILQ_REMOVE(&evcon->requests, req, next); in evhttp_connection_fail()
658 evhttp_request_free(req); in evhttp_connection_fail()
719 struct evhttp_request *req = TAILQ_FIRST(&evcon->requests); in evhttp_connection_done() local
725 TAILQ_REMOVE(&evcon->requests, req, next); in evhttp_connection_done()
726 req->evcon = NULL; in evhttp_connection_done()
731 evhttp_is_connection_close(req->flags, req->input_headers)|| in evhttp_connection_done()
732 evhttp_is_connection_close(req->flags, req->output_headers); in evhttp_connection_done()
763 (*req->cb)(req, req->cb_arg); in evhttp_connection_done()
767 evhttp_request_free(req); in evhttp_connection_done()
784 evhttp_handle_chunked_read(struct evhttp_request *req, struct evbuffer *buf) in evhttp_handle_chunked_read() argument
789 if (req->ntoread < 0) { in evhttp_handle_chunked_read()
811 req->ntoread = ntoread; in evhttp_handle_chunked_read()
812 if (req->ntoread == 0) { in evhttp_handle_chunked_read()
820 if (len < req->ntoread) in evhttp_handle_chunked_read()
824 evbuffer_add(req->input_buffer, in evhttp_handle_chunked_read()
825 EVBUFFER_DATA(buf), (size_t)req->ntoread); in evhttp_handle_chunked_read()
826 evbuffer_drain(buf, (size_t)req->ntoread); in evhttp_handle_chunked_read()
827 req->ntoread = -1; in evhttp_handle_chunked_read()
828 if (req->chunk_cb != NULL) { in evhttp_handle_chunked_read()
829 (*req->chunk_cb)(req, req->cb_arg); in evhttp_handle_chunked_read()
830 evbuffer_drain(req->input_buffer, in evhttp_handle_chunked_read()
831 EVBUFFER_LENGTH(req->input_buffer)); in evhttp_handle_chunked_read()
839 evhttp_read_trailer(struct evhttp_connection *evcon, struct evhttp_request *req) in evhttp_read_trailer() argument
843 switch (evhttp_parse_headers(req, buf)) { in evhttp_read_trailer()
860 evhttp_read_body(struct evhttp_connection *evcon, struct evhttp_request *req) in evhttp_read_body() argument
864 if (req->chunked) { in evhttp_read_body()
865 switch (evhttp_handle_chunked_read(req, buf)) { in evhttp_read_body()
869 evhttp_read_trailer(evcon, req); in evhttp_read_body()
878 evhttp_request_free(req); in evhttp_read_body()
884 } else if (req->ntoread < 0) { in evhttp_read_body()
886 evbuffer_add_buffer(req->input_buffer, buf); in evhttp_read_body()
887 } else if (EVBUFFER_LENGTH(buf) >= req->ntoread) { in evhttp_read_body()
889 evbuffer_add(req->input_buffer, EVBUFFER_DATA(buf), in evhttp_read_body()
890 (size_t)req->ntoread); in evhttp_read_body()
891 evbuffer_drain(buf, (size_t)req->ntoread); in evhttp_read_body()
892 req->ntoread = 0; in evhttp_read_body()
913 struct evhttp_request *req = TAILQ_FIRST(&evcon->requests); in evhttp_read() local
942 evhttp_read_firstline(evcon, req); in evhttp_read()
945 evhttp_read_header(evcon, req); in evhttp_read()
948 evhttp_read_body(evcon, req); in evhttp_read()
951 evhttp_read_trailer(evcon, req); in evhttp_read()
967 struct evhttp_request *req = TAILQ_FIRST(&evcon->requests); in evhttp_write_connectioncb() local
968 assert(req != NULL); in evhttp_write_connectioncb()
973 req->kind = EVHTTP_RESPONSE; in evhttp_write_connectioncb()
985 struct evhttp_request *req; in evhttp_connection_free() local
994 while ((req = TAILQ_FIRST(&evcon->requests)) != NULL) { in evhttp_connection_free()
995 TAILQ_REMOVE(&evcon->requests, req, next); in evhttp_connection_free()
996 evhttp_request_free(req); in evhttp_connection_free()
1050 struct evhttp_request *req = TAILQ_FIRST(&evcon->requests); in evhttp_request_dispatch() local
1053 if (req == NULL) in evhttp_request_dispatch()
1065 evhttp_make_header(evcon, req); in evhttp_request_dispatch()
1212 evhttp_parse_response_line(struct evhttp_request *req, char *line) in evhttp_parse_response_line() argument
1227 req->major = 1; in evhttp_parse_response_line()
1228 req->minor = 0; in evhttp_parse_response_line()
1230 req->major = 1; in evhttp_parse_response_line()
1231 req->minor = 1; in evhttp_parse_response_line()
1238 req->response_code = atoi(number); in evhttp_parse_response_line()
1239 if (!evhttp_valid_response_code(req->response_code)) { in evhttp_parse_response_line()
1245 if ((req->response_code_line = strdup(readable)) == NULL) in evhttp_parse_response_line()
1254 evhttp_parse_request_line(struct evhttp_request *req, char *line) in evhttp_parse_request_line() argument
1273 req->type = EVHTTP_REQ_GET; in evhttp_parse_request_line()
1275 req->type = EVHTTP_REQ_POST; in evhttp_parse_request_line()
1277 req->type = EVHTTP_REQ_HEAD; in evhttp_parse_request_line()
1280 __func__, method, req, req->remote_host)); in evhttp_parse_request_line()
1285 req->major = 1; in evhttp_parse_request_line()
1286 req->minor = 0; in evhttp_parse_request_line()
1288 req->major = 1; in evhttp_parse_request_line()
1289 req->minor = 1; in evhttp_parse_request_line()
1292 __func__, version, req, req->remote_host)); in evhttp_parse_request_line()
1296 if ((req->uri = strdup(uri)) == NULL) { in evhttp_parse_request_line()
1302 if (strlen(req->uri) > 0 && req->uri[0] != '/') in evhttp_parse_request_line()
1303 req->flags |= EVHTTP_PROXY_REQUEST; in evhttp_parse_request_line()
1435 evhttp_parse_firstline(struct evhttp_request *req, struct evbuffer *buffer) in evhttp_parse_firstline() argument
1444 switch (req->kind) { in evhttp_parse_firstline()
1446 if (evhttp_parse_request_line(req, line) == -1) in evhttp_parse_firstline()
1450 if (evhttp_parse_response_line(req, line) == -1) in evhttp_parse_firstline()
1485 evhttp_parse_headers(struct evhttp_request *req, struct evbuffer* buffer) in evhttp_parse_headers() argument
1490 struct evkeyvalq* headers = req->input_headers; in evhttp_parse_headers()
1531 evhttp_get_body_length(struct evhttp_request *req) in evhttp_get_body_length() argument
1533 struct evkeyvalq *headers = req->input_headers; in evhttp_get_body_length()
1541 req->ntoread = -1; in evhttp_get_body_length()
1550 req->ntoread = -1; in evhttp_get_body_length()
1559 req->ntoread = ntoread; in evhttp_get_body_length()
1563 __func__, req->ntoread, in evhttp_get_body_length()
1564 EVBUFFER_LENGTH(req->evcon->input_buffer))); in evhttp_get_body_length()
1570 evhttp_get_body(struct evhttp_connection *evcon, struct evhttp_request *req) in evhttp_get_body() argument
1575 if (req->kind == EVHTTP_REQUEST && req->type != EVHTTP_REQ_POST) { in evhttp_get_body()
1580 xfer_enc = evhttp_find_header(req->input_headers, "Transfer-Encoding"); in evhttp_get_body()
1582 req->chunked = 1; in evhttp_get_body()
1583 req->ntoread = -1; in evhttp_get_body()
1585 if (evhttp_get_body_length(req) == -1) { in evhttp_get_body()
1591 evhttp_read_body(evcon, req); in evhttp_get_body()
1596 struct evhttp_request *req) in evhttp_read_firstline() argument
1600 res = evhttp_parse_firstline(req, evcon->input_buffer); in evhttp_read_firstline()
1615 evhttp_read_header(evcon, req); in evhttp_read_firstline()
1619 evhttp_read_header(struct evhttp_connection *evcon, struct evhttp_request *req) in evhttp_read_header() argument
1624 res = evhttp_parse_headers(req, evcon->input_buffer); in evhttp_read_header()
1638 switch (req->kind) { in evhttp_read_header()
1642 evhttp_get_body(evcon, req); in evhttp_read_header()
1646 if (req->response_code == HTTP_NOCONTENT || in evhttp_read_header()
1647 req->response_code == HTTP_NOTMODIFIED || in evhttp_read_header()
1648 (req->response_code >= 100 && req->response_code < 200)) { in evhttp_read_header()
1650 __func__, req->response_code)); in evhttp_read_header()
1654 __func__, req->remote_host, fd)); in evhttp_read_header()
1655 evhttp_get_body(evcon, req); in evhttp_read_header()
1800 struct evhttp_request *req, in evhttp_make_request() argument
1804 req->kind = EVHTTP_REQUEST; in evhttp_make_request()
1805 req->type = type; in evhttp_make_request()
1806 if (req->uri != NULL) in evhttp_make_request()
1807 free(req->uri); in evhttp_make_request()
1808 if ((req->uri = strdup(uri)) == NULL) in evhttp_make_request()
1812 if (!req->major && !req->minor) { in evhttp_make_request()
1813 req->major = 1; in evhttp_make_request()
1814 req->minor = 1; in evhttp_make_request()
1817 assert(req->evcon == NULL); in evhttp_make_request()
1818 req->evcon = evcon; in evhttp_make_request()
1819 assert(!(req->flags & EVHTTP_REQ_OWN_CONNECTION)); in evhttp_make_request()
1821 TAILQ_INSERT_TAIL(&evcon->requests, req, next); in evhttp_make_request()
1832 if (TAILQ_FIRST(&evcon->requests) == req) in evhttp_make_request()
1860 struct evhttp_request *req = TAILQ_FIRST(&evcon->requests); in evhttp_send_done() local
1861 TAILQ_REMOVE(&evcon->requests, req, next); in evhttp_send_done()
1867 (req->minor == 0 && in evhttp_send_done()
1868 !evhttp_is_connection_keepalive(req->input_headers))|| in evhttp_send_done()
1869 evhttp_is_connection_close(req->flags, req->input_headers) || in evhttp_send_done()
1870 evhttp_is_connection_close(req->flags, req->output_headers); in evhttp_send_done()
1872 assert(req->flags & EVHTTP_REQ_OWN_CONNECTION); in evhttp_send_done()
1873 evhttp_request_free(req); in evhttp_send_done()
1890 evhttp_send_error(struct evhttp_request *req, int error, const char *reason) in evhttp_send_error() argument
1902 evhttp_add_header(req->output_headers, "Connection", "close"); in evhttp_send_error()
1904 evhttp_response_code(req, error, reason); in evhttp_send_error()
1908 evhttp_send_page(req, buf); in evhttp_send_error()
1917 evhttp_send(struct evhttp_request *req, struct evbuffer *databuf) in evhttp_send() argument
1919 struct evhttp_connection *evcon = req->evcon; in evhttp_send()
1921 assert(TAILQ_FIRST(&evcon->requests) == req); in evhttp_send()
1925 evbuffer_add_buffer(req->output_buffer, databuf); in evhttp_send()
1928 evhttp_make_header(evcon, req); in evhttp_send()
1934 evhttp_send_reply(struct evhttp_request *req, int code, const char *reason, in evhttp_send_reply() argument
1937 evhttp_response_code(req, code, reason); in evhttp_send_reply()
1939 evhttp_send(req, databuf); in evhttp_send_reply()
1943 evhttp_send_reply_start(struct evhttp_request *req, int code, in evhttp_send_reply_start() argument
1946 evhttp_response_code(req, code, reason); in evhttp_send_reply_start()
1947 if (req->major == 1 && req->minor == 1) { in evhttp_send_reply_start()
1949 evhttp_add_header(req->output_headers, "Transfer-Encoding", in evhttp_send_reply_start()
1951 req->chunked = 1; in evhttp_send_reply_start()
1953 evhttp_make_header(req->evcon, req); in evhttp_send_reply_start()
1954 evhttp_write_buffer(req->evcon, NULL, NULL); in evhttp_send_reply_start()
1958 evhttp_send_reply_chunk(struct evhttp_request *req, struct evbuffer *databuf) in evhttp_send_reply_chunk() argument
1960 if (req->chunked) { in evhttp_send_reply_chunk()
1961 evbuffer_add_printf(req->evcon->output_buffer, "%x\r\n", in evhttp_send_reply_chunk()
1964 evbuffer_add_buffer(req->evcon->output_buffer, databuf); in evhttp_send_reply_chunk()
1965 if (req->chunked) { in evhttp_send_reply_chunk()
1966 evbuffer_add(req->evcon->output_buffer, "\r\n", 2); in evhttp_send_reply_chunk()
1968 evhttp_write_buffer(req->evcon, NULL, NULL); in evhttp_send_reply_chunk()
1972 evhttp_send_reply_end(struct evhttp_request *req) in evhttp_send_reply_end() argument
1974 struct evhttp_connection *evcon = req->evcon; in evhttp_send_reply_end()
1976 if (req->chunked) { in evhttp_send_reply_end()
1977 evbuffer_add(req->evcon->output_buffer, "0\r\n\r\n", 5); in evhttp_send_reply_end()
1978 evhttp_write_buffer(req->evcon, evhttp_send_done, NULL); in evhttp_send_reply_end()
1979 req->chunked = 0; in evhttp_send_reply_end()
1991 evhttp_response_code(struct evhttp_request *req, int code, const char *reason) in evhttp_response_code() argument
1993 req->kind = EVHTTP_RESPONSE; in evhttp_response_code()
1994 req->response_code = code; in evhttp_response_code()
1995 if (req->response_code_line != NULL) in evhttp_response_code()
1996 free(req->response_code_line); in evhttp_response_code()
1997 req->response_code_line = strdup(reason); in evhttp_response_code()
2001 evhttp_send_page(struct evhttp_request *req, struct evbuffer *databuf) in evhttp_send_page() argument
2003 if (!req->major || !req->minor) { in evhttp_send_page()
2004 req->major = 1; in evhttp_send_page()
2005 req->minor = 1; in evhttp_send_page()
2008 if (req->kind != EVHTTP_RESPONSE) in evhttp_send_page()
2009 evhttp_response_code(req, 200, "OK"); in evhttp_send_page()
2011 evhttp_clear_headers(req->output_headers); in evhttp_send_page()
2012 evhttp_add_header(req->output_headers, "Content-Type", "text/html"); in evhttp_send_page()
2013 evhttp_add_header(req->output_headers, "Connection", "close"); in evhttp_send_page()
2015 evhttp_send(req, databuf); in evhttp_send_page()
2161 evhttp_dispatch_callback(struct httpcbq *callbacks, struct evhttp_request *req) in evhttp_dispatch_callback() argument
2167 char *p = strchr(req->uri, '?'); in evhttp_dispatch_callback()
2169 offset = (size_t)(p - req->uri); in evhttp_dispatch_callback()
2174 res = strcmp(cb->what, req->uri) == 0; in evhttp_dispatch_callback()
2176 res = ((strncmp(cb->what, req->uri, offset) == 0) && in evhttp_dispatch_callback()
2188 evhttp_handle_request(struct evhttp_request *req, void *arg) in evhttp_handle_request() argument
2193 if (req->uri == NULL) { in evhttp_handle_request()
2194 evhttp_send_error(req, HTTP_BADREQUEST, "Bad Request"); in evhttp_handle_request()
2198 if ((cb = evhttp_dispatch_callback(&http->callbacks, req)) != NULL) { in evhttp_handle_request()
2199 (*cb->cb)(req, cb->cbarg); in evhttp_handle_request()
2205 (*http->gencb)(req, http->gencbarg); in evhttp_handle_request()
2216 char *escaped_html = evhttp_htmlescape(req->uri); in evhttp_handle_request()
2219 evhttp_response_code(req, HTTP_NOTFOUND, "Not Found"); in evhttp_handle_request()
2225 evhttp_send_page(req, buf); in evhttp_handle_request()
2439 struct evhttp_request *req = NULL; in evhttp_request_new() local
2442 if ((req = calloc(1, sizeof(struct evhttp_request))) == NULL) { in evhttp_request_new()
2447 req->kind = EVHTTP_RESPONSE; in evhttp_request_new()
2448 req->input_headers = calloc(1, sizeof(struct evkeyvalq)); in evhttp_request_new()
2449 if (req->input_headers == NULL) { in evhttp_request_new()
2453 TAILQ_INIT(req->input_headers); in evhttp_request_new()
2455 req->output_headers = calloc(1, sizeof(struct evkeyvalq)); in evhttp_request_new()
2456 if (req->output_headers == NULL) { in evhttp_request_new()
2460 TAILQ_INIT(req->output_headers); in evhttp_request_new()
2462 if ((req->input_buffer = evbuffer_new()) == NULL) { in evhttp_request_new()
2467 if ((req->output_buffer = evbuffer_new()) == NULL) { in evhttp_request_new()
2472 req->cb = cb; in evhttp_request_new()
2473 req->cb_arg = arg; in evhttp_request_new()
2475 return (req); in evhttp_request_new()
2478 if (req != NULL) in evhttp_request_new()
2479 evhttp_request_free(req); in evhttp_request_new()
2484 evhttp_request_free(struct evhttp_request *req) in evhttp_request_free() argument
2486 if (req->remote_host != NULL) in evhttp_request_free()
2487 free(req->remote_host); in evhttp_request_free()
2488 if (req->uri != NULL) in evhttp_request_free()
2489 free(req->uri); in evhttp_request_free()
2490 if (req->response_code_line != NULL) in evhttp_request_free()
2491 free(req->response_code_line); in evhttp_request_free()
2493 evhttp_clear_headers(req->input_headers); in evhttp_request_free()
2494 free(req->input_headers); in evhttp_request_free()
2496 evhttp_clear_headers(req->output_headers); in evhttp_request_free()
2497 free(req->output_headers); in evhttp_request_free()
2499 if (req->input_buffer != NULL) in evhttp_request_free()
2500 evbuffer_free(req->input_buffer); in evhttp_request_free()
2502 if (req->output_buffer != NULL) in evhttp_request_free()
2503 evbuffer_free(req->output_buffer); in evhttp_request_free()
2505 free(req); in evhttp_request_free()
2509 evhttp_request_set_chunked_cb(struct evhttp_request *req, in evhttp_request_set_chunked_cb() argument
2512 req->chunk_cb = cb; in evhttp_request_set_chunked_cb()
2520 evhttp_request_uri(struct evhttp_request *req) { in evhttp_request_uri() argument
2521 if (req->uri == NULL) in evhttp_request_uri()
2522 event_debug(("%s: request %p has no uri\n", __func__, req)); in evhttp_request_uri()
2523 return (req->uri); in evhttp_request_uri()
2571 struct evhttp_request *req; in evhttp_associate_new_request_with_connection() local
2572 if ((req = evhttp_request_new(evhttp_handle_request, http)) == NULL) in evhttp_associate_new_request_with_connection()
2575 req->evcon = evcon; /* the request ends up owning the connection */ in evhttp_associate_new_request_with_connection()
2576 req->flags |= EVHTTP_REQ_OWN_CONNECTION; in evhttp_associate_new_request_with_connection()
2578 TAILQ_INSERT_TAIL(&evcon->requests, req, next); in evhttp_associate_new_request_with_connection()
2580 req->kind = EVHTTP_REQUEST; in evhttp_associate_new_request_with_connection()
2582 if ((req->remote_host = strdup(evcon->address)) == NULL) in evhttp_associate_new_request_with_connection()
2584 req->remote_port = evcon->port; in evhttp_associate_new_request_with_connection()