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_NOT_ALLOWED_HOST = 2300998, 96 HTTP_UNKNOWN_OTHER_ERROR = 2300999 97 }; 98 99 enum class HttpDataType { 100 /** 101 * The returned type is string. 102 */ 103 STRING, 104 /** 105 * The returned type is Object. 106 */ 107 OBJECT = 1, 108 /** 109 * The returned type is ArrayBuffer. 110 */ 111 ARRAY_BUFFER = 2, 112 /** 113 * The returned type is not set. 114 */ 115 NO_DATA_TYPE = 3, 116 }; 117 118 class HttpConstant final { 119 public: 120 /* Http Method */ 121 static const char *const HTTP_METHOD_GET; 122 static const char *const HTTP_METHOD_HEAD; 123 static const char *const HTTP_METHOD_OPTIONS; 124 static const char *const HTTP_METHOD_TRACE; 125 static const char *const HTTP_METHOD_DELETE; 126 static const char *const HTTP_METHOD_POST; 127 static const char *const HTTP_METHOD_PUT; 128 static const char *const HTTP_METHOD_CONNECT; 129 130 /* default options */ 131 static const uint32_t DEFAULT_MAX_LIMIT; 132 static const uint32_t MAX_LIMIT; 133 static const uint32_t DEFAULT_READ_TIMEOUT; 134 static const uint32_t DEFAULT_CONNECT_TIMEOUT; 135 136 static const size_t MAX_JSON_PARSE_SIZE; 137 138 /* options key */ 139 static const char *const PARAM_KEY_METHOD; 140 static const char *const PARAM_KEY_EXTRA_DATA; 141 static const char *const PARAM_KEY_HEADER; 142 static const char *const PARAM_KEY_MAX_LIMIT; 143 static const char *const PARAM_KEY_READ_TIMEOUT; 144 static const char *const PARAM_KEY_DNS_SERVERS; 145 static const char *const PARAM_KEY_RESUME_FROM; 146 static const char *const PARAM_KEY_RESUME_TO; 147 static const char *const PARAM_KEY_CONNECT_TIMEOUT; 148 static const char *const PARAM_KEY_USING_PROTOCOL; 149 static const char *const PARAM_KEY_USING_CACHE; 150 static const char *const PARAM_KEY_EXPECT_DATA_TYPE; 151 static const char *const PARAM_KEY_PRIORITY; 152 static const char *const PARAM_KEY_CA_PATH; 153 static const char *const PARAM_KEY_DOH_URL; 154 155 static const char *const PARAM_KEY_USING_HTTP_PROXY; 156 static const char *const PARAM_KEY_CLIENT_CERT; 157 static const char *const PARAM_KEY_MULTI_FORM_DATA_LIST; 158 static const char *const PARAM_KEY_CERTIFICATE_PINNING; 159 160 static const char *const HTTP_PROXY_KEY_HOST; 161 static const char *const HTTP_PROXY_KEY_PORT; 162 static const char *const HTTP_PROXY_KEY_EXCLUSION_LIST; 163 static const char *const HTTP_PROXY_EXCLUSIONS_SEPARATOR; 164 165 static const char *const HTTP_CLIENT_CERT; 166 static const char *const HTTP_CLIENT_CERT_TYPE; 167 static const char *const HTTP_CLIENT_KEY; 168 static const char *const HTTP_CLIENT_KEY_PASSWD; 169 170 static const char *const HTTP_HASH_ALGORITHM; 171 static const char *const HTTP_PUBLIC_KEY_HASH; 172 173 static const char *const HTTP_CERT_TYPE_PEM; 174 static const char *const HTTP_CERT_TYPE_DER; 175 static const char *const HTTP_CERT_TYPE_P12; 176 177 static const char *const HTTP_MULTI_FORM_DATA_NAME; 178 static const char *const HTTP_MULTI_FORM_DATA_CONTENT_TYPE; 179 static const char *const HTTP_MULTI_FORM_DATA_REMOTE_FILE_NAME; 180 static const char *const HTTP_MULTI_FORM_DATA_DATA; 181 static const char *const HTTP_MULTI_FORM_DATA_FILE_PATH; 182 183 static const char *const RESPONSE_KEY_RESULT; 184 static const char *const RESPONSE_KEY_RESPONSE_CODE; 185 static const char *const RESPONSE_KEY_HEADER; 186 static const char *const RESPONSE_KEY_COOKIES; 187 static const char *const RESPONSE_KEY_RESULT_TYPE; 188 static const char *const RESPONSE_KEY_SET_COOKIE; 189 static const char *const RESPONSE_KEY_SET_COOKIE_SEPARATOR; 190 191 static const char *const RESPONSE_PERFORMANCE_TIMING; 192 static const char *const RESPONSE_DNS_TIMING; 193 static const char *const RESPONSE_TCP_TIMING; 194 static const char *const RESPONSE_TLS_TIMING; 195 static const char *const RESPONSE_FIRST_SEND_TIMING; 196 static const char *const RESPONSE_FIRST_RECEIVE_TIMING; 197 static const char *const RESPONSE_TOTAL_FINISH_TIMING; 198 static const char *const RESPONSE_REDIRECT_TIMING; 199 static const char *const RESPONSE_HEADER_TIMING; 200 static const char *const RESPONSE_BODY_TIMING; 201 static const char *const RESPONSE_TOTAL_TIMING; 202 203 static const char *const HTTP_URL_PARAM_START; 204 static const char *const HTTP_URL_PARAM_SEPARATOR; 205 static const char *const HTTP_URL_NAME_VALUE_SEPARATOR; 206 static const char *const HTTP_HEADER_SEPARATOR; 207 static const char *const HTTP_HEADER_BLANK_SEPARATOR; 208 static const char *const HTTP_LINE_SEPARATOR; 209 static const char *const HTTP_RESPONSE_HEADER_SEPARATOR; 210 211 static const char *const HTTP_DEFAULT_USER_AGENT; 212 static const char *const HTTP_PREPARE_CA_PATH; 213 214 static const char *const HTTP_CONTENT_TYPE; 215 static const char *const HTTP_CONTENT_TYPE_URL_ENCODE; 216 static const char *const HTTP_CONTENT_TYPE_JSON; 217 static const char *const HTTP_CONTENT_TYPE_OCTET_STREAM; 218 static const char *const HTTP_CONTENT_TYPE_IMAGE; 219 static const char *const HTTP_CONTENT_TYPE_MULTIPART; 220 221 static const char *const HTTP_CONTENT_ENCODING_GZIP; 222 223 static const char *const REQUEST_TIME; 224 static const char *const RESPONSE_TIME; 225 }; 226 } // namespace OHOS::NetStack::Http 227 228 #endif /* COMMUNICATIONNETSTACK_CONSTANT_H */ 229