• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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