1 #ifndef AWS_HTTP_H 2 #define AWS_HTTP_H 3 4 /** 5 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 6 * SPDX-License-Identifier: Apache-2.0. 7 */ 8 9 #include <aws/common/logging.h> 10 #include <aws/http/exports.h> 11 #include <aws/io/io.h> 12 13 #define AWS_C_HTTP_PACKAGE_ID 2 14 15 enum aws_http_errors { 16 AWS_ERROR_HTTP_UNKNOWN = AWS_ERROR_ENUM_BEGIN_RANGE(AWS_C_HTTP_PACKAGE_ID), 17 AWS_ERROR_HTTP_HEADER_NOT_FOUND, 18 AWS_ERROR_HTTP_INVALID_HEADER_FIELD, 19 AWS_ERROR_HTTP_INVALID_HEADER_NAME, 20 AWS_ERROR_HTTP_INVALID_HEADER_VALUE, 21 AWS_ERROR_HTTP_INVALID_METHOD, 22 AWS_ERROR_HTTP_INVALID_PATH, 23 AWS_ERROR_HTTP_INVALID_STATUS_CODE, 24 AWS_ERROR_HTTP_MISSING_BODY_STREAM, 25 AWS_ERROR_HTTP_INVALID_BODY_STREAM, 26 AWS_ERROR_HTTP_CONNECTION_CLOSED, 27 AWS_ERROR_HTTP_SWITCHED_PROTOCOLS, 28 AWS_ERROR_HTTP_UNSUPPORTED_PROTOCOL, 29 AWS_ERROR_HTTP_REACTION_REQUIRED, 30 AWS_ERROR_HTTP_DATA_NOT_AVAILABLE, 31 AWS_ERROR_HTTP_OUTGOING_STREAM_LENGTH_INCORRECT, 32 AWS_ERROR_HTTP_CALLBACK_FAILURE, 33 AWS_ERROR_HTTP_WEBSOCKET_UPGRADE_FAILURE, 34 AWS_ERROR_HTTP_WEBSOCKET_CLOSE_FRAME_SENT, 35 AWS_ERROR_HTTP_WEBSOCKET_IS_MIDCHANNEL_HANDLER, 36 AWS_ERROR_HTTP_CONNECTION_MANAGER_INVALID_STATE_FOR_ACQUIRE, 37 AWS_ERROR_HTTP_CONNECTION_MANAGER_VENDED_CONNECTION_UNDERFLOW, 38 AWS_ERROR_HTTP_SERVER_CLOSED, 39 AWS_ERROR_HTTP_PROXY_CONNECT_FAILED, 40 AWS_ERROR_HTTP_CONNECTION_MANAGER_SHUTTING_DOWN, 41 AWS_ERROR_HTTP_CHANNEL_THROUGHPUT_FAILURE, 42 AWS_ERROR_HTTP_PROTOCOL_ERROR, 43 AWS_ERROR_HTTP_STREAM_IDS_EXHAUSTED, 44 AWS_ERROR_HTTP_GOAWAY_RECEIVED, 45 AWS_ERROR_HTTP_RST_STREAM_RECEIVED, 46 AWS_ERROR_HTTP_RST_STREAM_SENT, 47 AWS_ERROR_HTTP_STREAM_NOT_ACTIVATED, 48 AWS_ERROR_HTTP_STREAM_HAS_COMPLETED, 49 AWS_ERROR_HTTP_PROXY_STRATEGY_NTLM_CHALLENGE_TOKEN_MISSING, 50 AWS_ERROR_HTTP_PROXY_STRATEGY_TOKEN_RETRIEVAL_FAILURE, 51 AWS_ERROR_HTTP_PROXY_CONNECT_FAILED_RETRYABLE, 52 AWS_ERROR_HTTP_PROTOCOL_SWITCH_FAILURE, 53 54 AWS_ERROR_HTTP_END_RANGE = AWS_ERROR_ENUM_END_RANGE(AWS_C_HTTP_PACKAGE_ID) 55 }; 56 57 /* Error codes that may be present in HTTP/2 RST_STREAM and GOAWAY frames (RFC-7540 7). */ 58 enum aws_http2_error_code { 59 AWS_HTTP2_ERR_NO_ERROR = 0x00, 60 AWS_HTTP2_ERR_PROTOCOL_ERROR = 0x01, 61 AWS_HTTP2_ERR_INTERNAL_ERROR = 0x02, 62 AWS_HTTP2_ERR_FLOW_CONTROL_ERROR = 0x03, 63 AWS_HTTP2_ERR_SETTINGS_TIMEOUT = 0x04, 64 AWS_HTTP2_ERR_STREAM_CLOSED = 0x05, 65 AWS_HTTP2_ERR_FRAME_SIZE_ERROR = 0x06, 66 AWS_HTTP2_ERR_REFUSED_STREAM = 0x07, 67 AWS_HTTP2_ERR_CANCEL = 0x08, 68 AWS_HTTP2_ERR_COMPRESSION_ERROR = 0x09, 69 AWS_HTTP2_ERR_CONNECT_ERROR = 0x0A, 70 AWS_HTTP2_ERR_ENHANCE_YOUR_CALM = 0x0B, 71 AWS_HTTP2_ERR_INADEQUATE_SECURITY = 0x0C, 72 AWS_HTTP2_ERR_HTTP_1_1_REQUIRED = 0x0D, 73 AWS_HTTP2_ERR_COUNT, 74 }; 75 76 enum aws_http_log_subject { 77 AWS_LS_HTTP_GENERAL = AWS_LOG_SUBJECT_BEGIN_RANGE(AWS_C_HTTP_PACKAGE_ID), 78 AWS_LS_HTTP_CONNECTION, 79 AWS_LS_HTTP_ENCODER, 80 AWS_LS_HTTP_DECODER, 81 AWS_LS_HTTP_SERVER, 82 AWS_LS_HTTP_STREAM, 83 AWS_LS_HTTP_CONNECTION_MANAGER, 84 AWS_LS_HTTP_WEBSOCKET, 85 AWS_LS_HTTP_WEBSOCKET_SETUP, 86 AWS_LS_HTTP_PROXY_NEGOTIATION, 87 }; 88 89 enum aws_http_version { 90 AWS_HTTP_VERSION_UNKNOWN, /* Invalid version. */ 91 AWS_HTTP_VERSION_1_0, 92 AWS_HTTP_VERSION_1_1, 93 AWS_HTTP_VERSION_2, 94 AWS_HTTP_VERSION_COUNT, 95 }; 96 97 AWS_EXTERN_C_BEGIN 98 99 /** 100 * Initializes internal datastructures used by aws-c-http. 101 * Must be called before using any functionality in aws-c-http. 102 */ 103 AWS_HTTP_API 104 void aws_http_library_init(struct aws_allocator *alloc); 105 106 /** 107 * Clean up internal datastructures used by aws-c-http. 108 * Must not be called until application is done using functionality in aws-c-http. 109 */ 110 AWS_HTTP_API 111 void aws_http_library_clean_up(void); 112 113 /** 114 * Returns the description of common status codes. 115 * Ex: 404 -> "Not Found" 116 * An empty string is returned if the status code is not recognized. 117 */ 118 AWS_HTTP_API 119 const char *aws_http_status_text(int status_code); 120 121 /** 122 * Shortcuts for common HTTP request methods 123 */ 124 AWS_HTTP_API 125 extern const struct aws_byte_cursor aws_http_method_get; 126 AWS_HTTP_API 127 extern const struct aws_byte_cursor aws_http_method_head; 128 AWS_HTTP_API 129 extern const struct aws_byte_cursor aws_http_method_post; 130 AWS_HTTP_API 131 extern const struct aws_byte_cursor aws_http_method_put; 132 AWS_HTTP_API 133 extern const struct aws_byte_cursor aws_http_method_delete; 134 AWS_HTTP_API 135 extern const struct aws_byte_cursor aws_http_method_connect; 136 AWS_HTTP_API 137 extern const struct aws_byte_cursor aws_http_method_options; 138 139 AWS_HTTP_API extern const struct aws_byte_cursor aws_http_header_method; 140 AWS_HTTP_API extern const struct aws_byte_cursor aws_http_header_scheme; 141 AWS_HTTP_API extern const struct aws_byte_cursor aws_http_header_authority; 142 AWS_HTTP_API extern const struct aws_byte_cursor aws_http_header_path; 143 AWS_HTTP_API extern const struct aws_byte_cursor aws_http_header_status; 144 145 AWS_HTTP_API extern const struct aws_byte_cursor aws_http_scheme_http; 146 AWS_HTTP_API extern const struct aws_byte_cursor aws_http_scheme_https; 147 148 AWS_EXTERN_C_END 149 150 #endif /* AWS_HTTP_H */ 151