1 /* 2 * Copyright (c) 2021-2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef COMMUNICATIONNETSTACK_CONSTANT_H 17 #define COMMUNICATIONNETSTACK_CONSTANT_H 18 19 #include <cstddef> 20 #include <cstdint> 21 22 #include "curl/curl.h" 23 24 namespace OHOS::NetStack::Http { 25 enum class ResponseCode { 26 OK = 200, 27 CREATED, 28 ACCEPTED, 29 NOT_AUTHORITATIVE, 30 NO_CONTENT, 31 RESET, 32 PARTIAL, 33 MULT_CHOICE = 300, 34 MOVED_PERM, 35 MOVED_TEMP, 36 SEE_OTHER, 37 NOT_MODIFIED, 38 USE_PROXY, 39 BAD_REQUEST = 400, 40 UNAUTHORIZED, 41 PAYMENT_REQUIRED, 42 FORBIDDEN, 43 NOT_FOUND, 44 BAD_METHOD, 45 NOT_ACCEPTABLE, 46 PROXY_AUTH, 47 CLIENT_TIMEOUT, 48 CONFLICT, 49 GONE, 50 LENGTH_REQUIRED, 51 PRECON_FAILED, 52 ENTITY_TOO_LARGE, 53 REQ_TOO_LONG, 54 UNSUPPORTED_TYPE, 55 RANGE_NOT_SATISFIABLE, 56 INTERNAL_ERROR = 500, 57 NOT_IMPLEMENTED, 58 BAD_GATEWAY, 59 UNAVAILABLE, 60 GATEWAY_TIMEOUT, 61 VERSION, 62 }; 63 64 enum HttpErrorCode { 65 HTTP_ERROR_CODE_BASE = 2300000, 66 HTTP_UNSUPPORTED_PROTOCOL = HTTP_ERROR_CODE_BASE + CURLE_UNSUPPORTED_PROTOCOL, 67 HTTP_URL_MALFORMAT = HTTP_ERROR_CODE_BASE + CURLE_URL_MALFORMAT, 68 HTTP_COULDNT_RESOLVE_PROXY = HTTP_ERROR_CODE_BASE + CURLE_COULDNT_RESOLVE_PROXY, 69 HTTP_COULDNT_RESOLVE_HOST = HTTP_ERROR_CODE_BASE + CURLE_COULDNT_RESOLVE_HOST, 70 HTTP_COULDNT_CONNECT = HTTP_ERROR_CODE_BASE + CURLE_COULDNT_CONNECT, 71 HTTP_WEIRD_SERVER_REPLY = HTTP_ERROR_CODE_BASE + CURLE_WEIRD_SERVER_REPLY, 72 HTTP_REMOTE_ACCESS_DENIED = HTTP_ERROR_CODE_BASE + CURLE_REMOTE_ACCESS_DENIED, 73 HTTP_HTTP2_ERROR = HTTP_ERROR_CODE_BASE + CURLE_HTTP2, 74 HTTP_PARTIAL_FILE = HTTP_ERROR_CODE_BASE + CURLE_PARTIAL_FILE, 75 HTTP_WRITE_ERROR = HTTP_ERROR_CODE_BASE + CURLE_WRITE_ERROR, 76 HTTP_UPLOAD_FAILED = HTTP_ERROR_CODE_BASE + CURLE_UPLOAD_FAILED, 77 HTTP_READ_ERROR = HTTP_ERROR_CODE_BASE + CURLE_READ_ERROR, 78 HTTP_OUT_OF_MEMORY = HTTP_ERROR_CODE_BASE + CURLE_OUT_OF_MEMORY, 79 HTTP_OPERATION_TIMEDOUT = HTTP_ERROR_CODE_BASE + CURLE_OPERATION_TIMEDOUT, 80 HTTP_TOO_MANY_REDIRECTS = HTTP_ERROR_CODE_BASE + CURLE_TOO_MANY_REDIRECTS, 81 HTTP_GOT_NOTHING = HTTP_ERROR_CODE_BASE + CURLE_GOT_NOTHING, 82 HTTP_SEND_ERROR = HTTP_ERROR_CODE_BASE + CURLE_SEND_ERROR, 83 HTTP_RECV_ERROR = HTTP_ERROR_CODE_BASE + CURLE_RECV_ERROR, 84 HTTP_SSL_CERTPROBLEM = HTTP_ERROR_CODE_BASE + CURLE_SSL_CERTPROBLEM, 85 HTTP_SSL_CIPHER = HTTP_ERROR_CODE_BASE + CURLE_SSL_CIPHER, 86 HTTP_PEER_FAILED_VERIFICATION = HTTP_ERROR_CODE_BASE + CURLE_PEER_FAILED_VERIFICATION, 87 HTTP_BAD_CONTENT_ENCODING = HTTP_ERROR_CODE_BASE + CURLE_BAD_CONTENT_ENCODING, 88 HTTP_FILESIZE_EXCEEDED = HTTP_ERROR_CODE_BASE + CURLE_FILESIZE_EXCEEDED, 89 HTTP_REMOTE_DISK_FULL = HTTP_ERROR_CODE_BASE + CURLE_REMOTE_DISK_FULL, 90 HTTP_REMOTE_FILE_EXISTS = HTTP_ERROR_CODE_BASE + CURLE_REMOTE_FILE_EXISTS, 91 HTTP_SSL_CACERT_BADFILE = HTTP_ERROR_CODE_BASE + CURLE_SSL_CACERT_BADFILE, 92 HTTP_REMOTE_FILE_NOT_FOUND = HTTP_ERROR_CODE_BASE + CURLE_REMOTE_FILE_NOT_FOUND, 93 HTTP_AUTH_ERROR = HTTP_ERROR_CODE_BASE + CURLE_AUTH_ERROR, 94 HTTP_SSL_PINNEDPUBKEYNOTMATCH = HTTP_ERROR_CODE_BASE + CURLE_SSL_PINNEDPUBKEYNOTMATCH, 95 HTTP_CLEARTEXT_NOT_PERMITTED = 2300997, 96 HTTP_NOT_ALLOWED_HOST = 2300998, 97 HTTP_UNKNOWN_OTHER_ERROR = 2300999 98 }; 99 100 enum class HttpDataType { 101 /** 102 * The returned type is string. 103 */ 104 STRING, 105 /** 106 * The returned type is Object. 107 */ 108 OBJECT = 1, 109 /** 110 * The returned type is ArrayBuffer. 111 */ 112 ARRAY_BUFFER = 2, 113 /** 114 * The returned type is not set. 115 */ 116 NO_DATA_TYPE = 3, 117 }; 118 119 class HttpConstant final { 120 public: 121 /* Http Method */ 122 static const char *const HTTP_METHOD_GET; 123 static const char *const HTTP_METHOD_HEAD; 124 static const char *const HTTP_METHOD_OPTIONS; 125 static const char *const HTTP_METHOD_TRACE; 126 static const char *const HTTP_METHOD_DELETE; 127 static const char *const HTTP_METHOD_POST; 128 static const char *const HTTP_METHOD_PUT; 129 static const char *const HTTP_METHOD_CONNECT; 130 131 /* default options */ 132 static const uint32_t DEFAULT_MAX_LIMIT; 133 static const uint32_t MAX_LIMIT; 134 static const uint32_t DEFAULT_READ_TIMEOUT; 135 static const uint32_t DEFAULT_CONNECT_TIMEOUT; 136 137 static const size_t MAX_JSON_PARSE_SIZE; 138 139 /* options key */ 140 static const char *const PARAM_KEY_METHOD; 141 static const char *const PARAM_KEY_EXTRA_DATA; 142 static const char *const PARAM_KEY_HEADER; 143 static const char *const PARAM_KEY_MAX_LIMIT; 144 static const char *const PARAM_KEY_READ_TIMEOUT; 145 static const char *const PARAM_KEY_DNS_SERVERS; 146 static const char *const PARAM_KEY_RESUME_FROM; 147 static const char *const PARAM_KEY_RESUME_TO; 148 static const char *const PARAM_KEY_CONNECT_TIMEOUT; 149 static const char *const PARAM_KEY_USING_PROTOCOL; 150 static const char *const PARAM_KEY_USING_CACHE; 151 static const char *const PARAM_KEY_EXPECT_DATA_TYPE; 152 static const char *const PARAM_KEY_PRIORITY; 153 static const char *const PARAM_KEY_CA_PATH; 154 static const char *const PARAM_KEY_DOH_URL; 155 156 static const char *const PARAM_KEY_USING_HTTP_PROXY; 157 static const char *const PARAM_KEY_CLIENT_CERT; 158 static const char *const PARAM_KEY_MULTI_FORM_DATA_LIST; 159 static const char *const PARAM_KEY_CERTIFICATE_PINNING; 160 static const char *const PARAM_KEY_REMOTE_VALIDATION; 161 static const char *const PARAM_KEY_TLS_OPTION; 162 static const char *const PARAM_KEY_SERVER_AUTH; 163 static const char *const PARAM_KEY_ADDRESS_FAMILY; 164 165 static const char *const HTTP_PROXY_KEY_HOST; 166 static const char *const HTTP_PROXY_KEY_PORT; 167 static const char *const HTTP_PROXY_KEY_EXCLUSION_LIST; 168 static const char *const HTTP_PROXY_EXCLUSIONS_SEPARATOR; 169 170 static const char *const HTTP_CLIENT_CERT; 171 static const char *const HTTP_CLIENT_CERT_TYPE; 172 static const char *const HTTP_CLIENT_KEY; 173 static const char *const HTTP_CLIENT_KEY_PASSWD; 174 175 static const char *const HTTP_HASH_ALGORITHM; 176 static const char *const HTTP_PUBLIC_KEY_HASH; 177 178 static const char *const HTTP_CERT_TYPE_PEM; 179 static const char *const HTTP_CERT_TYPE_DER; 180 static const char *const HTTP_CERT_TYPE_P12; 181 182 static const char *const TLS_VERSION_1_0; 183 static const char *const TLS_VERSION_1_1; 184 static const char *const TLS_VERSION_1_2; 185 static const char *const TLS_VERSION_1_3; 186 187 static const char *const HTTP_MULTI_FORM_DATA_NAME; 188 static const char *const HTTP_MULTI_FORM_DATA_CONTENT_TYPE; 189 static const char *const HTTP_MULTI_FORM_DATA_REMOTE_FILE_NAME; 190 static const char *const HTTP_MULTI_FORM_DATA_DATA; 191 static const char *const HTTP_MULTI_FORM_DATA_FILE_PATH; 192 193 static const char *const RESPONSE_KEY_RESULT; 194 static const char *const RESPONSE_KEY_RESPONSE_CODE; 195 static const char *const RESPONSE_KEY_HEADER; 196 static const char *const RESPONSE_KEY_COOKIES; 197 static const char *const RESPONSE_KEY_RESULT_TYPE; 198 static const char *const RESPONSE_KEY_SET_COOKIE; 199 static const char *const RESPONSE_KEY_SET_COOKIE_SEPARATOR; 200 201 static const char *const RESPONSE_PERFORMANCE_TIMING; 202 static const char *const RESPONSE_DNS_TIMING; 203 static const char *const RESPONSE_TCP_TIMING; 204 static const char *const RESPONSE_TLS_TIMING; 205 static const char *const RESPONSE_FIRST_SEND_TIMING; 206 static const char *const RESPONSE_FIRST_RECEIVE_TIMING; 207 static const char *const RESPONSE_TOTAL_FINISH_TIMING; 208 static const char *const RESPONSE_REDIRECT_TIMING; 209 static const char *const RESPONSE_HEADER_TIMING; 210 static const char *const RESPONSE_BODY_TIMING; 211 static const char *const RESPONSE_TOTAL_TIMING; 212 213 static const char *const HTTP_URL_PARAM_START; 214 static const char *const HTTP_URL_PARAM_SEPARATOR; 215 static const char *const HTTP_URL_NAME_VALUE_SEPARATOR; 216 static const char *const HTTP_HEADER_SEPARATOR; 217 static const char *const HTTP_HEADER_BLANK_SEPARATOR; 218 static const char *const HTTP_LINE_SEPARATOR; 219 static const char *const HTTP_RESPONSE_HEADER_SEPARATOR; 220 221 static const char *const HTTP_DEFAULT_USER_AGENT; 222 static const char *const HTTP_PREPARE_CA_PATH; 223 224 static const char *const HTTP_CONTENT_TYPE; 225 static const char *const HTTP_CONTENT_TYPE_URL_ENCODE; 226 static const char *const HTTP_CONTENT_TYPE_JSON; 227 static const char *const HTTP_CONTENT_TYPE_OCTET_STREAM; 228 static const char *const HTTP_CONTENT_TYPE_IMAGE; 229 static const char *const HTTP_CONTENT_TYPE_MULTIPART; 230 231 static const char *const HTTP_CONTENT_ENCODING_GZIP; 232 233 static const char *const REQUEST_TIME; 234 static const char *const RESPONSE_TIME; 235 236 static const char *const HTTP_ADDRESS_FAMILY_UNSPEC; 237 static const char *const HTTP_ADDRESS_FAMILY_ONLYV4; 238 static const char *const HTTP_ADDRESS_FAMILY_ONLYV6; 239 }; 240 } // namespace OHOS::NetStack::Http 241 242 #endif /* COMMUNICATIONNETSTACK_CONSTANT_H */ 243