1 /*
2 * Copyright (c) 2023-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 #include <iostream>
17 #include <vector>
18 #include <algorithm>
19 #include <cctype>
20
21 #include "http_client_request.h"
22 #include "http_client_constant.h"
23 #include "netstack_common_utils.h"
24 #include "netstack_log.h"
25
26 namespace OHOS {
27 namespace NetStack {
28 namespace HttpClient {
29 static constexpr const uint32_t HTTP_MIN_PRIORITY = 1;
30 static constexpr const uint32_t HTTP_DEFAULT_PRIORITY = 500;
31 static constexpr const uint32_t HTTP_MAX_PRIORITY = 1000;
32 static constexpr const uint32_t HTTP_DEFAULT_RANGE = 0;
33
HttpClientRequest()34 HttpClientRequest::HttpClientRequest()
35 : method_(HttpConstant::HTTP_METHOD_GET),
36 timeout_(HttpConstant::DEFAULT_READ_TIMEOUT),
37 connectTimeout_(HttpConstant::DEFAULT_CONNECT_TIMEOUT),
38 protocol_(HttpProtocol::HTTP_NONE),
39 proxyType_(HttpProxyType::NOT_USE),
40 priority_(HTTP_DEFAULT_PRIORITY),
41 resumeFrom_(HTTP_DEFAULT_RANGE),
42 resumeTo_(HTTP_DEFAULT_RANGE)
43 {
44 }
45
SetURL(const std::string & url)46 void HttpClientRequest::SetURL(const std::string &url)
47 {
48 url_ = url;
49 }
50
SetHeader(const std::string & key,const std::string & val)51 void HttpClientRequest::SetHeader(const std::string &key, const std::string &val)
52 {
53 headers_[CommonUtils::ToLower(key)] = val;
54 }
55
MethodForGet(const std::string & method)56 bool HttpClientRequest::MethodForGet(const std::string &method)
57 {
58 return (method == HttpConstant::HTTP_METHOD_HEAD || method == HttpConstant::HTTP_METHOD_OPTIONS ||
59 method == HttpConstant::HTTP_METHOD_DELETE || method == HttpConstant::HTTP_METHOD_TRACE ||
60 method == HttpConstant::HTTP_METHOD_GET || method == HttpConstant::HTTP_METHOD_CONNECT);
61 }
62
MethodForPost(const std::string & method)63 bool HttpClientRequest::MethodForPost(const std::string &method)
64 {
65 return (method == HttpConstant::HTTP_METHOD_POST || method == HttpConstant::HTTP_METHOD_PUT);
66 }
67
SetMethod(const std::string & method)68 void HttpClientRequest::SetMethod(const std::string &method)
69 {
70 if (!MethodForGet(method) && !MethodForPost(method) && !method.empty()) {
71 NETSTACK_LOGE("HttpClientRequest::SetMethod method %{public}s not supported", method.c_str());
72 return;
73 }
74
75 method_ = method;
76 }
77
SetBody(const void * data,size_t length)78 void HttpClientRequest::SetBody(const void *data, size_t length)
79 {
80 body_.append(static_cast<const char *>(data), length);
81 }
82
SetTimeout(unsigned int timeout)83 void HttpClientRequest::SetTimeout(unsigned int timeout)
84 {
85 timeout_ = timeout;
86 }
87
SetConnectTimeout(unsigned int timeout)88 void HttpClientRequest::SetConnectTimeout(unsigned int timeout)
89 {
90 connectTimeout_ = timeout;
91 }
92
SetHttpProtocol(HttpProtocol protocol)93 void HttpClientRequest::SetHttpProtocol(HttpProtocol protocol)
94 {
95 protocol_ = protocol;
96 }
97
SetHttpProxyType(HttpProxyType type)98 void HttpClientRequest::SetHttpProxyType(HttpProxyType type)
99 {
100 proxyType_ = type;
101 }
102
SetCaPath(const std::string & path)103 void HttpClientRequest::SetCaPath(const std::string &path)
104 {
105 if (path.empty()) {
106 NETSTACK_LOGE("HttpClientRequest::SetCaPath path is empty");
107 return;
108 }
109 caPath_ = path;
110 }
111
SetPriority(unsigned int priority)112 void HttpClientRequest::SetPriority(unsigned int priority)
113 {
114 if (priority < HTTP_MIN_PRIORITY || priority > HTTP_MAX_PRIORITY) {
115 NETSTACK_LOGE("HttpClientRequest::SetPriority priority %{public}d is invalid", priority);
116 return;
117 }
118 priority_ = priority;
119 }
120
GetURL() const121 const std::string &HttpClientRequest::GetURL() const
122 {
123 return url_;
124 }
125
GetMethod() const126 const std::string &HttpClientRequest::GetMethod() const
127 {
128 return method_;
129 }
130
GetBody() const131 const std::string &HttpClientRequest::GetBody() const
132 {
133 return body_;
134 }
135
GetHeaders() const136 const std::map<std::string, std::string> &HttpClientRequest::GetHeaders() const
137 {
138 return headers_;
139 }
140
GetTimeout()141 unsigned int HttpClientRequest::GetTimeout()
142 {
143 return timeout_;
144 }
145
GetConnectTimeout()146 unsigned int HttpClientRequest::GetConnectTimeout()
147 {
148 return connectTimeout_;
149 }
150
GetHttpProtocol()151 HttpProtocol HttpClientRequest::GetHttpProtocol()
152 {
153 return protocol_;
154 }
155
GetHttpProxyType()156 HttpProxyType HttpClientRequest::GetHttpProxyType()
157 {
158 return proxyType_;
159 }
160
GetCaPath()161 const std::string &HttpClientRequest::GetCaPath()
162 {
163 return caPath_;
164 }
165
GetPriority() const166 uint32_t HttpClientRequest::GetPriority() const
167 {
168 return priority_;
169 }
170
SetHttpProxy(const HttpProxy & proxy)171 void HttpClientRequest::SetHttpProxy(const HttpProxy &proxy)
172 {
173 proxy_ = proxy;
174 }
175
GetHttpProxy() const176 const HttpProxy &HttpClientRequest::GetHttpProxy() const
177 {
178 return proxy_;
179 }
180
SetRequestTime(const std::string & time)181 void HttpClientRequest::SetRequestTime(const std::string &time)
182 {
183 requestTime_ = time;
184 }
185
GetRequestTime() const186 const std::string &HttpClientRequest::GetRequestTime() const
187 {
188 return requestTime_;
189 }
190
SetResumeFrom(int64_t resumeFrom)191 void HttpClientRequest::SetResumeFrom(int64_t resumeFrom)
192 {
193 if (resumeFrom >= MIN_RESUM_NUMBER && resumeFrom <= MAX_RESUM_NUMBER) {
194 resumeFrom_ = resumeFrom;
195 }
196 }
197
SetResumeTo(int64_t resumeTo)198 void HttpClientRequest::SetResumeTo(int64_t resumeTo)
199 {
200 if (resumeTo >= MIN_RESUM_NUMBER && resumeTo <= MAX_RESUM_NUMBER) {
201 resumeTo_ = resumeTo;
202 }
203 }
204
GetResumeFrom() const205 int64_t HttpClientRequest::GetResumeFrom() const
206 {
207 return resumeFrom_;
208 }
209
GetResumeTo() const210 int64_t HttpClientRequest::GetResumeTo() const
211 {
212 return resumeTo_;
213 }
214
SetClientCert(const HttpClientCert & clientCert)215 void HttpClientRequest::SetClientCert(const HttpClientCert &clientCert)
216 {
217 clientCert_ = clientCert;
218 }
219
GetClientCert() const220 const HttpClientCert &HttpClientRequest::GetClientCert() const
221 {
222 return clientCert_;
223 }
224
SetAddressFamily(const std::string & addressFamily)225 void HttpClientRequest::SetAddressFamily(const std::string &addressFamily)
226 {
227 addressFamily_ = addressFamily;
228 }
229
GetAddressFamily() const230 const std::string &HttpClientRequest::GetAddressFamily() const
231 {
232 return addressFamily_;
233 }
234 } // namespace HttpClient
235 } // namespace NetStack
236 } // namespace OHOS
237