11e934351Sopenharmony_ci/*
21e934351Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
31e934351Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
41e934351Sopenharmony_ci * you may not use this file except in compliance with the License.
51e934351Sopenharmony_ci * You may obtain a copy of the License at
61e934351Sopenharmony_ci *
71e934351Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
81e934351Sopenharmony_ci *
91e934351Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
101e934351Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
111e934351Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
121e934351Sopenharmony_ci * See the License for the specific language governing permissions and
131e934351Sopenharmony_ci * limitations under the License.
141e934351Sopenharmony_ci */
151e934351Sopenharmony_ci
161e934351Sopenharmony_ci#ifndef HTTP_CONSTANT_H
171e934351Sopenharmony_ci#define HTTP_CONSTANT_H
181e934351Sopenharmony_ci
191e934351Sopenharmony_ci#include <cstddef>
201e934351Sopenharmony_ci#include <cstdint>
211e934351Sopenharmony_ci
221e934351Sopenharmony_ci#include "curl/curl.h"
231e934351Sopenharmony_ci
241e934351Sopenharmony_cinamespace OHOS::NetStack::Http {
251e934351Sopenharmony_ciconstexpr const uint32_t MAX_LIMIT = 100 * 1024 * 1024;
261e934351Sopenharmony_ciconstexpr const uint32_t DEFAULT_MAX_LIMIT = 5 * 1024 * 1024;
271e934351Sopenharmony_ciconstexpr const uint32_t DEFAULT_READ_TIMEOUT = 60000;
281e934351Sopenharmony_ciconstexpr const uint32_t DEFAULT_CONNECT_TIMEOUT = 60000;
291e934351Sopenharmony_ciconstexpr const size_t MAX_JSON_PARSE_SIZE = 65536;
301e934351Sopenharmony_ciconstexpr const uint32_t MIN_PRIORITY = 1;
311e934351Sopenharmony_ciconstexpr const uint32_t MAX_PRIORITY = 1000;
321e934351Sopenharmony_ciconstexpr const int64_t MIN_RESUM_NUMBER = 1;
331e934351Sopenharmony_ciconstexpr const int64_t MAX_RESUM_NUMBER = 4294967296;
341e934351Sopenharmony_ciconstexpr const size_t MAP_TUPLE_SIZE = 2;
351e934351Sopenharmony_ci
361e934351Sopenharmony_ciconstexpr const char *HTTP_METHOD_GET = "GET";
371e934351Sopenharmony_ciconstexpr const char *HTTP_METHOD_HEAD = "HEAD";
381e934351Sopenharmony_ciconstexpr const char *HTTP_METHOD_OPTIONS = "OPTIONS";
391e934351Sopenharmony_ciconstexpr const char *HTTP_METHOD_TRACE = "TRACE";
401e934351Sopenharmony_ciconstexpr const char *HTTP_METHOD_DELETE = "DELETE";
411e934351Sopenharmony_ciconstexpr const char *HTTP_METHOD_POST = "POST";
421e934351Sopenharmony_ciconstexpr const char *HTTP_METHOD_PUT = "PUT";
431e934351Sopenharmony_ciconstexpr const char *HTTP_METHOD_CONNECT = "CONNECT";
441e934351Sopenharmony_ciconstexpr const char *HTTP_LINE_SEPARATOR = "\r\n";
451e934351Sopenharmony_ciconstexpr const char *HTTP_HEADER_SEPARATOR = ":";
461e934351Sopenharmony_ciconstexpr const char *RESPONSE_KEY_RESULT = "result";
471e934351Sopenharmony_ciconstexpr const char *RESPONSE_KEY_RESPONSE_CODE = "responseCode";
481e934351Sopenharmony_ciconstexpr const char *RESPONSE_KEY_HEADER = "header";
491e934351Sopenharmony_ciconstexpr const char *RESPONSE_KEY_COOKIES = "cookies";
501e934351Sopenharmony_ciconstexpr const char *RESPONSE_KEY_RESULT_TYPE = "resultType";
511e934351Sopenharmony_ciconstexpr const char *REQUEST_TIME = "requestTime";
521e934351Sopenharmony_ciconstexpr const char *RESPONSE_TIME = "responseTime";
531e934351Sopenharmony_ciconstexpr const char *HTTP_HEADER_BLANK_SEPARATOR = ";";
541e934351Sopenharmony_ciconstexpr const char *HTTP_RESPONSE_HEADER_SEPARATOR = "\r\n\r\n";
551e934351Sopenharmony_ciconstexpr const char *HTTP_URL_PARAM_START = "?";
561e934351Sopenharmony_ciconstexpr const char *HTTP_URL_PARAM_SEPARATOR = "&";
571e934351Sopenharmony_ciconstexpr const char *HTTP_URL_NAME_VALUE_SEPARATOR = "=";
581e934351Sopenharmony_ciconstexpr const char *HTTP_PROXY_EXCLUSIONS_SEPARATOR = ",";
591e934351Sopenharmony_ci// cache constant
601e934351Sopenharmony_ciconstexpr const int DECIMAL = 10;
611e934351Sopenharmony_ciconstexpr const char *SPLIT = ", ";
621e934351Sopenharmony_ciconstexpr const char EQUAL = '=';
631e934351Sopenharmony_ci
641e934351Sopenharmony_ciconstexpr const char *HTTP_DEFAULT_USER_AGENT = "libcurl-agent/1.0";
651e934351Sopenharmony_ciconstexpr const char *RESPONSE_KEY_SET_COOKIE = "set-cookie";
661e934351Sopenharmony_ciconstexpr const char *NO_CACHE = "no-cache";
671e934351Sopenharmony_ciconstexpr const char *NO_STORE = "no-store";
681e934351Sopenharmony_ciconstexpr const char *NO_TRANSFORM = "no-transform";
691e934351Sopenharmony_ciconstexpr const char *ONLY_IF_CACHED = "only-if-cached";
701e934351Sopenharmony_ciconstexpr const char *MAX_AGE = "max-age";
711e934351Sopenharmony_ciconstexpr const char *MAX_STALE = "max-stale";
721e934351Sopenharmony_ciconstexpr const char *MIN_FRESH = "min-fresh";
731e934351Sopenharmony_ciconstexpr const char *CACHE_CONTROL = "cache-control";
741e934351Sopenharmony_ciconstexpr const char *IF_MODIFIED_SINCE = "if-modified-since";
751e934351Sopenharmony_ciconstexpr const char *IF_NONE_MATCH = "if-none-match";
761e934351Sopenharmony_ciconstexpr const char *MUST_REVALIDATE = "must-revalidate";
771e934351Sopenharmony_ciconstexpr const char *PUBLIC = "public";
781e934351Sopenharmony_ciconstexpr const char *PRIVATE = "private";
791e934351Sopenharmony_ciconstexpr const char *PROXY_REVALIDATE = "proxy-revalidate";
801e934351Sopenharmony_ciconstexpr const char *S_MAXAGE = "s-maxage";
811e934351Sopenharmony_ciconstexpr const char *EXPIRES = "expires";
821e934351Sopenharmony_ciconstexpr const char *LAST_MODIFIED = "last-modified";
831e934351Sopenharmony_ciconstexpr const char *ETAG = "etag";
841e934351Sopenharmony_ciconstexpr const char *AGE = "age";
851e934351Sopenharmony_ciconstexpr const char *DATE = "date";
861e934351Sopenharmony_ciconstexpr const int INVALID_TIME = -1;
871e934351Sopenharmony_ciconstexpr const char *HTTP_PREPARE_CA_PATH = "/etc/security/certificates";
881e934351Sopenharmony_ci
891e934351Sopenharmony_ciconstexpr const char *HTTP_CONTENT_TYPE = "content-type";
901e934351Sopenharmony_ciconstexpr const char *HTTP_CONTENT_TYPE_URL_ENCODE = "application/x-www-form-urlencoded";
911e934351Sopenharmony_ciconstexpr const char *HTTP_CONTENT_TYPE_JSON = "application/json";
921e934351Sopenharmony_ciconstexpr const char *HTTP_CONTENT_TYPE_OCTET_STREAM = "application/octet-stream";
931e934351Sopenharmony_ciconstexpr const char *HTTP_CONTENT_TYPE_IMAGE = "image";
941e934351Sopenharmony_ciconstexpr const char *HTTP_CONTENT_TYPE_MULTIPART = "multipart/form-data";
951e934351Sopenharmony_ci
961e934351Sopenharmony_ci// events
971e934351Sopenharmony_ciconstexpr const char *ON_HEADER_RECEIVE = "headerReceive";
981e934351Sopenharmony_ciconstexpr const char *ON_DATA_RECEIVE = "dataReceive";
991e934351Sopenharmony_ciconstexpr const char *ON_DATA_END = "dataEnd";
1001e934351Sopenharmony_ciconstexpr const char *ON_DATA_RECEIVE_PROGRESS = "dataReceiveProgress";
1011e934351Sopenharmony_ciconstexpr const char *ON_HEADERS_RECEIVE = "headersReceive";
1021e934351Sopenharmony_ci
1031e934351Sopenharmony_ci
1041e934351Sopenharmony_ciconstexpr const char *RESPONSE_PERFORMANCE_TIMING = "performanceTiming";
1051e934351Sopenharmony_ciconstexpr const char *RESPONSE_DNS_TIMING = "dnsTiming";
1061e934351Sopenharmony_ciconstexpr const char *RESPONSE_TCP_TIMING = "tcpTiming";
1071e934351Sopenharmony_ciconstexpr const char *RESPONSE_TLS_TIMING = "tlsTiming";
1081e934351Sopenharmony_ciconstexpr const char *RESPONSE_FIRST_SEND_TIMING = "firstSendTiming";
1091e934351Sopenharmony_ciconstexpr const char *RESPONSE_FIRST_RECEIVE_TIMING = "firstReceiveTiming";
1101e934351Sopenharmony_ciconstexpr const char *RESPONSE_TOTAL_FINISH_TIMING = "totalFinishTiming";
1111e934351Sopenharmony_ciconstexpr const char *RESPONSE_REDIRECT_TIMING = "redirectTiming";
1121e934351Sopenharmony_ciconstexpr const char *RESPONSE_HEADER_TIMING = "responseHeaderTiming";
1131e934351Sopenharmony_ciconstexpr const char *RESPONSE_BODY_TIMING = "responseBodyTiming";
1141e934351Sopenharmony_ciconstexpr const char *RESPONSE_TOTAL_TIMING = "totalTiming";
1151e934351Sopenharmony_ci
1161e934351Sopenharmony_cienum class ResponseCode {
1171e934351Sopenharmony_ci    OK = 200,
1181e934351Sopenharmony_ci    CREATED,
1191e934351Sopenharmony_ci    ACCEPTED,
1201e934351Sopenharmony_ci    NOT_AUTHORITATIVE,
1211e934351Sopenharmony_ci    NO_CONTENT,
1221e934351Sopenharmony_ci    RESET,
1231e934351Sopenharmony_ci    PARTIAL,
1241e934351Sopenharmony_ci    MULT_CHOICE = 300,
1251e934351Sopenharmony_ci    MOVED_PERM,
1261e934351Sopenharmony_ci    MOVED_TEMP,
1271e934351Sopenharmony_ci    SEE_OTHER,
1281e934351Sopenharmony_ci    NOT_MODIFIED,
1291e934351Sopenharmony_ci    USE_PROXY,
1301e934351Sopenharmony_ci    BAD_REQUEST = 400,
1311e934351Sopenharmony_ci    UNAUTHORIZED,
1321e934351Sopenharmony_ci    PAYMENT_REQUIRED,
1331e934351Sopenharmony_ci    FORBIDDEN,
1341e934351Sopenharmony_ci    NOT_FOUND,
1351e934351Sopenharmony_ci    BAD_METHOD,
1361e934351Sopenharmony_ci    NOT_ACCEPTABLE,
1371e934351Sopenharmony_ci    PROXY_AUTH,
1381e934351Sopenharmony_ci    CLIENT_TIMEOUT,
1391e934351Sopenharmony_ci    CONFLICT,
1401e934351Sopenharmony_ci    GONE,
1411e934351Sopenharmony_ci    LENGTH_REQUIRED,
1421e934351Sopenharmony_ci    PRECON_FAILED,
1431e934351Sopenharmony_ci    ENTITY_TOO_LARGE,
1441e934351Sopenharmony_ci    REQ_TOO_LONG,
1451e934351Sopenharmony_ci    UNSUPPORTED_TYPE,
1461e934351Sopenharmony_ci    INTERNAL_ERROR = 500,
1471e934351Sopenharmony_ci    NOT_IMPLEMENTED,
1481e934351Sopenharmony_ci    BAD_GATEWAY,
1491e934351Sopenharmony_ci    UNAVAILABLE,
1501e934351Sopenharmony_ci    GATEWAY_TIMEOUT,
1511e934351Sopenharmony_ci    VERSION,
1521e934351Sopenharmony_ci};
1531e934351Sopenharmony_ci
1541e934351Sopenharmony_cienum class HttpErrorCode {
1551e934351Sopenharmony_ci    HTTP_ERROR_CODE_BASE = 2300000,
1561e934351Sopenharmony_ci    HTTP_UNSUPPORTED_PROTOCOL = HTTP_ERROR_CODE_BASE + CURLE_UNSUPPORTED_PROTOCOL,
1571e934351Sopenharmony_ci    HTTP_URL_MALFORMAT = HTTP_ERROR_CODE_BASE + CURLE_URL_MALFORMAT,
1581e934351Sopenharmony_ci    HTTP_COULDNT_RESOLVE_PROXY = HTTP_ERROR_CODE_BASE + CURLE_COULDNT_RESOLVE_PROXY,
1591e934351Sopenharmony_ci    HTTP_COULDNT_RESOLVE_HOST = HTTP_ERROR_CODE_BASE + CURLE_COULDNT_RESOLVE_HOST,
1601e934351Sopenharmony_ci    HTTP_COULDNT_CONNECT = HTTP_ERROR_CODE_BASE + CURLE_COULDNT_CONNECT,
1611e934351Sopenharmony_ci    HTTP_WEIRD_SERVER_REPLY = HTTP_ERROR_CODE_BASE + CURLE_WEIRD_SERVER_REPLY,
1621e934351Sopenharmony_ci    HTTP_REMOTE_ACCESS_DENIED = HTTP_ERROR_CODE_BASE + CURLE_REMOTE_ACCESS_DENIED,
1631e934351Sopenharmony_ci    HTTP_HTTP2_ERROR = HTTP_ERROR_CODE_BASE + CURLE_HTTP2,
1641e934351Sopenharmony_ci    HTTP_PARTIAL_FILE = HTTP_ERROR_CODE_BASE + CURLE_PARTIAL_FILE,
1651e934351Sopenharmony_ci    HTTP_WRITE_ERROR = HTTP_ERROR_CODE_BASE + CURLE_WRITE_ERROR,
1661e934351Sopenharmony_ci    HTTP_UPLOAD_FAILED = HTTP_ERROR_CODE_BASE + CURLE_UPLOAD_FAILED,
1671e934351Sopenharmony_ci    HTTP_READ_ERROR = HTTP_ERROR_CODE_BASE + CURLE_READ_ERROR,
1681e934351Sopenharmony_ci    HTTP_OUT_OF_MEMORY = HTTP_ERROR_CODE_BASE + CURLE_OUT_OF_MEMORY,
1691e934351Sopenharmony_ci    HTTP_OPERATION_TIMEDOUT = HTTP_ERROR_CODE_BASE + CURLE_OPERATION_TIMEDOUT,
1701e934351Sopenharmony_ci    HTTP_TOO_MANY_REDIRECTS = HTTP_ERROR_CODE_BASE + CURLE_TOO_MANY_REDIRECTS,
1711e934351Sopenharmony_ci    HTTP_GOT_NOTHING = HTTP_ERROR_CODE_BASE + CURLE_GOT_NOTHING,
1721e934351Sopenharmony_ci    HTTP_SEND_ERROR = HTTP_ERROR_CODE_BASE + CURLE_SEND_ERROR,
1731e934351Sopenharmony_ci    HTTP_RECV_ERROR = HTTP_ERROR_CODE_BASE + CURLE_RECV_ERROR,
1741e934351Sopenharmony_ci    HTTP_SSL_CERTPROBLEM = HTTP_ERROR_CODE_BASE + CURLE_SSL_CERTPROBLEM,
1751e934351Sopenharmony_ci    HTTP_SSL_CIPHER = HTTP_ERROR_CODE_BASE + CURLE_SSL_CIPHER,
1761e934351Sopenharmony_ci    HTTP_PEER_FAILED_VERIFICATION = HTTP_ERROR_CODE_BASE + CURLE_PEER_FAILED_VERIFICATION,
1771e934351Sopenharmony_ci    HTTP_BAD_CONTENT_ENCODING = HTTP_ERROR_CODE_BASE + CURLE_BAD_CONTENT_ENCODING,
1781e934351Sopenharmony_ci    HTTP_FILESIZE_EXCEEDED = HTTP_ERROR_CODE_BASE + CURLE_FILESIZE_EXCEEDED,
1791e934351Sopenharmony_ci    HTTP_REMOTE_DISK_FULL = HTTP_ERROR_CODE_BASE + CURLE_REMOTE_DISK_FULL,
1801e934351Sopenharmony_ci    HTTP_REMOTE_FILE_EXISTS = HTTP_ERROR_CODE_BASE + CURLE_REMOTE_FILE_EXISTS,
1811e934351Sopenharmony_ci    HTTP_SSL_CACERT_BADFILE = HTTP_ERROR_CODE_BASE + CURLE_SSL_CACERT_BADFILE,
1821e934351Sopenharmony_ci    HTTP_REMOTE_FILE_NOT_FOUND = HTTP_ERROR_CODE_BASE + CURLE_REMOTE_FILE_NOT_FOUND,
1831e934351Sopenharmony_ci    HTTP_AUTH_ERROR = HTTP_ERROR_CODE_BASE + CURLE_AUTH_ERROR,
1841e934351Sopenharmony_ci    HTTP_UNKNOWN_OTHER_ERROR = 2300999
1851e934351Sopenharmony_ci};
1861e934351Sopenharmony_ci
1871e934351Sopenharmony_cienum class HttpDataType {
1881e934351Sopenharmony_ci    /**
1891e934351Sopenharmony_ci     * The returned type is string.
1901e934351Sopenharmony_ci     */
1911e934351Sopenharmony_ci    STRING,
1921e934351Sopenharmony_ci    /**
1931e934351Sopenharmony_ci     * The returned type is Object.
1941e934351Sopenharmony_ci     */
1951e934351Sopenharmony_ci    OBJECT = 1,
1961e934351Sopenharmony_ci    /**
1971e934351Sopenharmony_ci     * The returned type is ArrayBuffer.
1981e934351Sopenharmony_ci     */
1991e934351Sopenharmony_ci    ARRAY_BUFFER = 2,
2001e934351Sopenharmony_ci    /**
2011e934351Sopenharmony_ci     * The returned type is not set.
2021e934351Sopenharmony_ci     */
2031e934351Sopenharmony_ci    NO_DATA_TYPE = 3,
2041e934351Sopenharmony_ci};
2051e934351Sopenharmony_ci} // namespace OHOS::NetStack::Http
2061e934351Sopenharmony_ci
2071e934351Sopenharmony_ci#endif /* HTTP_CONSTANT_H */
208