Lines Matching refs:req
199 static void http_server_payload_destroyed(struct http_server_request *req)
201 struct http_server_connection *conn = req->conn;
205 i_assert(conn->request_queue_tail == req ||
206 req->state >= HTTP_SERVER_REQUEST_STATE_FINISHED);
222 if (req->response == NULL && stream_errno != 0 &&
229 http_server_request_fail_close(req, 413, "Payload Too Large");
235 http_server_request_fail_close(req, 400, "Bad Request");
243 switch (req->state) {
247 req->state = HTTP_SERVER_REQUEST_STATE_PROCESSING;
249 if (req->response != NULL && req->response->submitted)
250 http_server_request_submit_response(req);
257 if (http_server_request_is_complete(req))
258 http_server_request_ready_to_respond(req);
281 struct http_server_connection *conn, struct http_server_request *req)
284 if (strcmp(req->req.method, "CONNECT") == 0) {
286 http_server_request_fail(req, 505, "Not Implemented");
289 if (req->req.target.format != HTTP_REQUEST_TARGET_FORMAT_AUTHORITY) {
290 http_server_request_fail(req, 400, "Bad Request");
294 (conn->context, req, req->req.target.url);
299 http_server_request_fail(req, 505, "Not Implemented");
302 conn->callbacks->handle_request(conn->context, req);
308 struct http_server_request *req)
318 if (req->req.version_major != 1) {
319 http_server_request_fail(req, 505, "HTTP Version Not Supported");
323 req->state = HTTP_SERVER_REQUEST_STATE_QUEUED;
325 if (req->req.payload != NULL) {
328 conn->incoming_payload = req->req.payload =
329 i_stream_create_timeout(req->req.payload,
335 conn->incoming_payload = req->req.payload =
338 i_stream_add_destroy_callback(req->req.payload,
339 http_server_payload_destroyed, req);
344 old_refcount = req->refcount;
346 http_server_connection_request_callback(conn, req);
352 req->callback_refcount = req->refcount - old_refcount;
354 if (req->req.payload != NULL) {
356 if (req->req.expect_100_continue && !req->payload_halted
357 && req->response == NULL) {
362 if (req->state < HTTP_SERVER_REQUEST_STATE_PAYLOAD_IN)
363 req->state = HTTP_SERVER_REQUEST_STATE_PAYLOAD_IN;
364 payload = req->req.payload;
365 req->req.payload = NULL;
374 if (req->state < HTTP_SERVER_REQUEST_STATE_PROCESSING &&
378 req->state = HTTP_SERVER_REQUEST_STATE_PROCESSING;
379 if (req->response != NULL && req->response->submitted)
380 http_server_request_submit_response(req);
383 i_assert(!payload_destroyed || req->callback_refcount > 0 ||
384 (req->response != NULL && req->response->submitted));
496 struct http_server_request *req;
501 req = conn->request_queue_tail;
502 if (req != NULL &&
503 req->state == HTTP_SERVER_REQUEST_STATE_SUBMITTED_RESPONSE) {
521 http_server_request_fail_close(req,
533 http_server_request_ready_to_respond(req);
543 struct http_server_request *req;
592 req = conn->request_queue_tail;
601 req = http_server_request_new(conn);
609 req->pool, &req->req, &error_code, &error)) > 0) {
615 http_server_request_label(req),
619 http_server_request_ref(req);
620 i_assert(!req->delay_destroy);
621 req->delay_destroy = TRUE;
623 cont = http_server_connection_handle_request(conn, req);
625 req->delay_destroy = FALSE;
629 if (req->destroy_pending)
630 http_server_request_destroy(&req);
632 http_server_request_unref(&req);
636 if (req->req.connection_close)
638 if (req->destroy_pending)
639 http_server_request_destroy(&req);
641 http_server_request_unref(&req);
668 req = http_server_request_new(conn);
691 http_server_request_fail(req, 400, "Bad Request");
697 http_server_request_fail(req, 501, "Not Implemented");
701 http_server_request_fail_close(req, 414, "URI Too Long");
704 http_server_request_fail(req, 417, "Expectation Failed");
708 http_server_request_fail_close(req, 413, "Payload Too Large");
848 struct http_server_request *req;
854 req = conn->request_queue_head;
855 if (req == NULL || req->state == HTTP_SERVER_REQUEST_STATE_NEW) {
861 if (req->state < HTTP_SERVER_REQUEST_STATE_READY_TO_RESPOND) {
862 if (req->state == HTTP_SERVER_REQUEST_STATE_PROCESSING) {
875 if (req->state >= HTTP_SERVER_REQUEST_STATE_QUEUED
877 && req->response == NULL && req->req.version_minor >= 1
878 && req->req.expect_100_continue && !req->payload_halted
879 && !req->sent_100_continue) {
889 req->sent_100_continue = TRUE;
894 i_assert(req->state == HTTP_SERVER_REQUEST_STATE_READY_TO_RESPOND &&
895 req->response != NULL);
901 http_server_request_ref(req);
902 ret = http_server_response_send(req->response);
903 http_server_request_unref(&req);
962 struct http_server_request *req = conn->request_queue_head;
963 struct http_server_response *resp = req->response;
1118 struct http_server_request *req, *req_next;
1142 req = conn->request_queue_head;
1143 while (req != NULL) {
1144 req_next = req->next;
1145 http_server_request_abort(&req, NULL);
1146 req = req_next;