Lines Matching full:client
42 struct http_client_ctx *client) in handle_http1_static_resource() argument
80 ret = http_server_sendall(client, http_response, in handle_http1_static_resource()
86 ret = http_server_sendall(client, data, len); in handle_http1_static_resource()
110 ret = http_server_sendall(client, http_response, \
119 static int http1_send_headers(struct http_client_ctx *client, enum http_status status, in http1_send_headers() argument
141 ret = http_server_sendall(client, http_response, in http1_send_headers()
163 ret = http_server_sendall(client, http_response, in http1_send_headers()
170 ret = http_server_sendall(client, hdr->value, strlen(hdr->value)); in http1_send_headers()
176 ret = http_server_sendall(client, crlf, 2); in http1_send_headers()
194 ret = http_server_sendall(client, http_response, in http1_send_headers()
203 ret = http_server_sendall(client, crlf, 2); in http1_send_headers()
212 static int http1_dynamic_response(struct http_client_ctx *client, struct http_response_ctx *rsp, in http1_dynamic_response() argument
218 if (client->http1_headers_sent && (rsp->header_count > 0 || rsp->status != 0)) { in http1_dynamic_response()
223 if (!client->http1_headers_sent) { in http1_dynamic_response()
229 ret = http1_send_headers(client, rsp->status, rsp->headers, rsp->header_count, in http1_dynamic_response()
235 client->http1_headers_sent = true; in http1_dynamic_response()
241 ret = http_server_sendall(client, tmp, ret); in http1_dynamic_response()
246 ret = http_server_sendall(client, rsp->body, rsp->body_len); in http1_dynamic_response()
251 (void)http_server_sendall(client, crlf, 2); in http1_dynamic_response()
258 struct http_client_ctx *client) in dynamic_get_del_req() argument
267 ptr = &client->url_buffer[dynamic_detail->common.path_len]; in dynamic_get_del_req()
273 populate_request_ctx(&request_ctx, ptr, len, &client->header_capture_ctx); in dynamic_get_del_req()
275 ret = dynamic_detail->cb(client, status, &request_ctx, &response_ctx, in dynamic_get_del_req()
281 ret = http1_dynamic_response(client, &response_ctx, dynamic_detail); in dynamic_get_del_req()
292 ret = http_server_sendall(client, final_chunk, in dynamic_get_del_req()
302 struct http_client_ctx *client) in dynamic_post_put_req() argument
305 char *ptr = client->cursor; in dynamic_post_put_req()
314 if (client->parser_state == HTTP1_MESSAGE_COMPLETE_STATE) { in dynamic_post_put_req()
321 populate_request_ctx(&request_ctx, ptr, client->data_len, &client->header_capture_ctx); in dynamic_post_put_req()
323 ret = dynamic_detail->cb(client, status, &request_ctx, &response_ctx, in dynamic_post_put_req()
332 client->header_capture_ctx.status = HTTP_HEADER_STATUS_NONE; in dynamic_post_put_req()
338 ret = http1_dynamic_response(client, &response_ctx, dynamic_detail); in dynamic_post_put_req()
347 populate_request_ctx(&request_ctx, ptr, 0, &client->header_capture_ctx); in dynamic_post_put_req()
349 ret = dynamic_detail->cb(client, status, &request_ctx, &response_ctx, in dynamic_post_put_req()
355 ret = http1_dynamic_response(client, &response_ctx, dynamic_detail); in dynamic_post_put_req()
362 if (client->parser_state == HTTP1_MESSAGE_COMPLETE_STATE) { in dynamic_post_put_req()
363 if (!client->http1_headers_sent) { in dynamic_post_put_req()
366 ret = http1_dynamic_response(client, &response_ctx, dynamic_detail); in dynamic_post_put_req()
372 ret = http_server_sendall(client, final_chunk, in dynamic_post_put_req()
387 struct http_client_ctx *client) in handle_http1_static_fs_resource() argument
409 ret = http_server_sendall(client, not_allowed_response, in handle_http1_static_fs_resource()
418 len = strlen(client->url_buffer); in handle_http1_static_fs_resource()
423 http_server_get_content_type_from_extension(client->url_buffer, content_type, in handle_http1_static_fs_resource()
426 client->url_buffer); in handle_http1_static_fs_resource()
433 ret = http_server_sendall(client, not_found_response, in handle_http1_static_fs_resource()
454 ret = http_server_sendall(client, http_response, len); in handle_http1_static_fs_resource()
468 ret = http_server_sendall(client, http_response, len); in handle_http1_static_fs_resource()
474 ret = http_server_sendall(client, "\r\n\r\n", 4); in handle_http1_static_fs_resource()
486 struct http_client_ctx *client) in handle_http1_dynamic_resource() argument
497 if (!(BIT(client->method) & user_method)) { in handle_http1_dynamic_resource()
501 if (dynamic_detail->holder != NULL && dynamic_detail->holder != client) { in handle_http1_dynamic_resource()
502 ret = http_server_sendall(client, conflict_response, in handle_http1_dynamic_resource()
509 return enter_http_done_state(client); in handle_http1_dynamic_resource()
512 dynamic_detail->holder = client; in handle_http1_dynamic_resource()
514 switch (client->method) { in handle_http1_dynamic_resource()
533 if (user_method & BIT(client->method)) { in handle_http1_dynamic_resource()
534 return dynamic_get_del_req(dynamic_detail, client); in handle_http1_dynamic_resource()
542 if (user_method & BIT(client->method)) { in handle_http1_dynamic_resource()
543 return dynamic_post_put_req(dynamic_detail, client); in handle_http1_dynamic_resource()
551 http_method_str(client->method), in handle_http1_dynamic_resource()
552 client->method); in handle_http1_dynamic_resource()
775 int enter_http1_request(struct http_client_ctx *client) in enter_http1_request() argument
777 client->server_state = HTTP_SERVER_REQUEST_STATE; in enter_http1_request()
779 http_parser_init(&client->parser, HTTP_REQUEST); in enter_http1_request()
780 http_parser_settings_init(&client->parser_settings); in enter_http1_request()
782 client->parser_settings.on_header_field = on_header_field; in enter_http1_request()
783 client->parser_settings.on_header_value = on_header_value; in enter_http1_request()
784 client->parser_settings.on_headers_complete = on_headers_complete; in enter_http1_request()
785 client->parser_settings.on_url = on_url; in enter_http1_request()
786 client->parser_settings.on_body = on_body; in enter_http1_request()
787 client->parser_settings.on_message_complete = on_message_complete; in enter_http1_request()
788 client->parser_state = HTTP1_INIT_HEADER_STATE; in enter_http1_request()
789 client->http1_headers_sent = false; in enter_http1_request()
792 client->header_capture_ctx.store_next_value = false; in enter_http1_request()
795 memset(client->header_buffer, 0, sizeof(client->header_buffer)); in enter_http1_request()
796 memset(client->url_buffer, 0, sizeof(client->url_buffer)); in enter_http1_request()
801 int handle_http1_request(struct http_client_ctx *client) in handle_http1_request() argument
805 bool skip_headers = (client->parser_state < HTTP1_RECEIVING_DATA_STATE); in handle_http1_request()
810 client->http1_frag_data_len = 0; in handle_http1_request()
812 parsed = http_parser_execute(&client->parser, &client->parser_settings, in handle_http1_request()
813 client->cursor, client->data_len); in handle_http1_request()
815 if (parsed > client->data_len) { in handle_http1_request()
820 if (client->parser.http_errno != HPE_OK) { in handle_http1_request()
821 LOG_ERR("HTTP/1 parsing error, %d", client->parser.http_errno); in handle_http1_request()
825 if (client->parser_state < HTTP1_RECEIVED_HEADER_STATE) { in handle_http1_request()
826 client->cursor += parsed; in handle_http1_request()
827 client->data_len -= parsed; in handle_http1_request()
832 client->method = client->parser.method; in handle_http1_request()
833 client->has_upgrade_header = client->parser.upgrade; in handle_http1_request()
836 LOG_DBG("Requested URL: %s", client->url_buffer); in handle_http1_request()
840 if (parsed < client->http1_frag_data_len) { in handle_http1_request()
844 frag_headers_len = parsed - client->http1_frag_data_len; in handle_http1_request()
847 client->cursor += frag_headers_len; in handle_http1_request()
848 client->data_len -= frag_headers_len; in handle_http1_request()
851 if (client->has_upgrade_header) { in handle_http1_request()
860 if (client->websocket_upgrade) { in handle_http1_request()
862 detail = get_resource_detail(client->url_buffer, in handle_http1_request()
868 client->current_detail = detail; in handle_http1_request()
869 return handle_http1_to_websocket_upgrade(client); in handle_http1_request()
875 if (client->http2_upgrade) { in handle_http1_request()
876 return handle_http1_to_http2_upgrade(client); in handle_http1_request()
880 ret = http_server_sendall(client, upgrade_required, in handle_http1_request()
887 ret = http_server_sendall(client, needed_upgrade, in handle_http1_request()
894 ret = http_server_sendall(client, upgrade_msg, in handle_http1_request()
902 detail = get_resource_detail(client->url_buffer, &path_len, false); in handle_http1_request()
909 client); in handle_http1_request()
916 (struct http_resource_detail_static_fs *)detail, client); in handle_http1_request()
924 client); in handle_http1_request()
931 ret = http_server_sendall(client, not_found_response, in handle_http1_request()
939 client->cursor += parsed; in handle_http1_request()
940 client->data_len -= parsed; in handle_http1_request()
942 if (client->parser_state == HTTP1_MESSAGE_COMPLETE_STATE) { in handle_http1_request()
943 if ((client->parser.flags & F_CONNECTION_CLOSE) == 0) { in handle_http1_request()
944 LOG_DBG("Waiting for another request, client %p", client); in handle_http1_request()
945 client->server_state = HTTP_SERVER_PREFACE_STATE; in handle_http1_request()
947 LOG_DBG("Connection closed, client %p", client); in handle_http1_request()
948 enter_http_done_state(client); in handle_http1_request()