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
HttpClientRequest()33 HttpClientRequest::HttpClientRequest()
34 : method_(HttpConstant::HTTP_METHOD_GET),
35 timeout_(HttpConstant::DEFAULT_READ_TIMEOUT),
36 connectTimeout_(HttpConstant::DEFAULT_CONNECT_TIMEOUT),
37 protocol_(HttpProtocol::HTTP_NONE),
38 proxyType_(HttpProxyType::NOT_USE),
39 priority_(HTTP_DEFAULT_PRIORITY)
40 {
41 }
42
SetURL(const std::string & url)43 void HttpClientRequest::SetURL(const std::string &url)
44 {
45 url_ = url;
46 }
47
SetHeader(const std::string & key,const std::string & val)48 void HttpClientRequest::SetHeader(const std::string &key, const std::string &val)
49 {
50 headers_[CommonUtils::ToLower(key)] = val;
51 }
52
MethodForGet(const std::string & method)53 bool HttpClientRequest::MethodForGet(const std::string &method)
54 {
55 return (method == HttpConstant::HTTP_METHOD_HEAD || method == HttpConstant::HTTP_METHOD_OPTIONS ||
56 method == HttpConstant::HTTP_METHOD_DELETE || method == HttpConstant::HTTP_METHOD_TRACE ||
57 method == HttpConstant::HTTP_METHOD_GET || method == HttpConstant::HTTP_METHOD_CONNECT);
58 }
59
MethodForPost(const std::string & method)60 bool HttpClientRequest::MethodForPost(const std::string &method)
61 {
62 return (method == HttpConstant::HTTP_METHOD_POST || method == HttpConstant::HTTP_METHOD_PUT);
63 }
64
SetMethod(const std::string & method)65 void HttpClientRequest::SetMethod(const std::string &method)
66 {
67 if (!MethodForGet(method) && !MethodForPost(method) && !method.empty()) {
68 NETSTACK_LOGE("HttpClientRequest::SetMethod method %{public}s not supported", method.c_str());
69 return;
70 }
71
72 method_ = method;
73 }
74
SetBody(const void * data,size_t length)75 void HttpClientRequest::SetBody(const void *data, size_t length)
76 {
77 body_.append(static_cast<const char *>(data), length);
78 }
79
SetTimeout(unsigned int timeout)80 void HttpClientRequest::SetTimeout(unsigned int timeout)
81 {
82 timeout_ = timeout;
83 }
84
SetConnectTimeout(unsigned int timeout)85 void HttpClientRequest::SetConnectTimeout(unsigned int timeout)
86 {
87 connectTimeout_ = timeout;
88 }
89
SetHttpProtocol(HttpProtocol protocol)90 void HttpClientRequest::SetHttpProtocol(HttpProtocol protocol)
91 {
92 protocol_ = protocol;
93 }
94
SetHttpProxyType(HttpProxyType type)95 void HttpClientRequest::SetHttpProxyType(HttpProxyType type)
96 {
97 proxyType_ = type;
98 }
99
SetCaPath(const std::string & path)100 void HttpClientRequest::SetCaPath(const std::string &path)
101 {
102 if (path.empty()) {
103 NETSTACK_LOGE("HttpClientRequest::SetCaPath path is empty");
104 return;
105 }
106 caPath_ = path;
107 }
108
SetPriority(unsigned int priority)109 void HttpClientRequest::SetPriority(unsigned int priority)
110 {
111 if (priority < HTTP_MIN_PRIORITY || priority > HTTP_MAX_PRIORITY) {
112 NETSTACK_LOGE("HttpClientRequest::SetPriority priority %{public}d is invalid", priority);
113 return;
114 }
115 priority_ = priority;
116 }
117
GetURL() const118 const std::string &HttpClientRequest::GetURL() const
119 {
120 return url_;
121 }
122
GetMethod() const123 const std::string &HttpClientRequest::GetMethod() const
124 {
125 return method_;
126 }
127
GetBody() const128 const std::string &HttpClientRequest::GetBody() const
129 {
130 return body_;
131 }
132
GetHeaders() const133 const std::map<std::string, std::string> &HttpClientRequest::GetHeaders() const
134 {
135 return headers_;
136 }
137
GetTimeout()138 unsigned int HttpClientRequest::GetTimeout()
139 {
140 return timeout_;
141 }
142
GetConnectTimeout()143 unsigned int HttpClientRequest::GetConnectTimeout()
144 {
145 return connectTimeout_;
146 }
147
GetHttpProtocol()148 HttpProtocol HttpClientRequest::GetHttpProtocol()
149 {
150 return protocol_;
151 }
152
GetHttpProxyType()153 HttpProxyType HttpClientRequest::GetHttpProxyType()
154 {
155 return proxyType_;
156 }
157
GetCaPath()158 const std::string &HttpClientRequest::GetCaPath()
159 {
160 return caPath_;
161 }
162
GetPriority() const163 uint32_t HttpClientRequest::GetPriority() const
164 {
165 return priority_;
166 }
167
SetHttpProxy(const HttpProxy & proxy)168 void HttpClientRequest::SetHttpProxy(const HttpProxy &proxy)
169 {
170 proxy_ = proxy;
171 }
172
GetHttpProxy() const173 const HttpProxy &HttpClientRequest::GetHttpProxy() const
174 {
175 return proxy_;
176 }
177
SetRequestTime(const std::string & time)178 void HttpClientRequest::SetRequestTime(const std::string &time)
179 {
180 requestTime_ = time;
181 }
182
GetRequestTime() const183 const std::string &HttpClientRequest::GetRequestTime() const
184 {
185 return requestTime_;
186 }
187 } // namespace HttpClient
188 } // namespace NetStack
189 } // namespace OHOS
190