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