Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(171)

Side by Side Diff: net/http_client.cc

Issue 624713003: Keep only base/extractor.[cc|h]. (Closed) Base URL: https://chromium.googlesource.com/external/omaha.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/http_client.h ('k') | net/http_client_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2007-2009 Google Inc.
2 //
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 //
17 // The code below is not thread safe.
18
19 #include "omaha/net/http_client.h"
20
21 #include "omaha/base/debug.h"
22 #include "omaha/base/safe_format.h"
23
24 namespace omaha {
25
26 HttpClient::Factory* HttpClient::factory_ = NULL;
27
28 HttpClient::Factory& HttpClient::GetFactory() {
29 if (!factory_) {
30 factory_ = new Factory();
31 }
32 return *factory_;
33 }
34
35 void HttpClient::DeleteFactory() {
36 delete factory_;
37 factory_ = NULL;
38 }
39
40 HttpClient* CreateHttpClient() {
41 HttpClient* http_client =
42 HttpClient::GetFactory().CreateObject(HttpClient::WINHTTP);
43 if (!http_client) {
44 http_client = HttpClient::GetFactory().CreateObject(HttpClient::WININET);
45 }
46 return http_client;
47 }
48
49 CString HttpClient::BuildRequestHeader(const TCHAR* name, const TCHAR* value) {
50 ASSERT1(name && *name);
51 ASSERT1(value && *value);
52 CString header;
53 SafeCStringFormat(&header, _T("%s: %s\r\n"), name, value);
54 return header;
55 }
56
57 HttpClient::StatusCodeClass HttpClient::GetStatusCodeClass(int status_code) {
58 ASSERT1(!status_code ||
59 (HTTP_STATUS_FIRST <= status_code && status_code <= HTTP_STATUS_LAST));
60 return static_cast<StatusCodeClass>(status_code / 100 * 100);
61 }
62
63 HRESULT HttpClient::QueryHeadersString(HINTERNET request_handle,
64 uint32 info_level,
65 const TCHAR* name,
66 CString* value,
67 DWORD* index) {
68 ASSERT1(value);
69
70 DWORD num_bytes = 0;
71 HRESULT hr = QueryHeaders(request_handle,
72 info_level,
73 name,
74 NULL,
75 &num_bytes,
76 index);
77 if (hr != HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)) {
78 return hr;
79 }
80 CString val;
81 hr = QueryHeaders(request_handle,
82 info_level,
83 name,
84 val.GetBuffer(num_bytes/sizeof(TCHAR)),
85 &num_bytes,
86 index);
87 if (FAILED(hr)) {
88 return hr;
89 }
90 ASSERT1(num_bytes);
91 val.ReleaseBufferSetLength(num_bytes/sizeof(TCHAR));
92 *value = val;
93 return S_OK;
94 }
95
96 HRESULT HttpClient::QueryHeadersInt(HINTERNET request_handle,
97 uint32 info_level,
98 const TCHAR* name,
99 int* value,
100 DWORD* index) {
101 ASSERT1(value);
102 info_level |= WINHTTP_QUERY_FLAG_NUMBER;
103 DWORD value_size = sizeof(*value);
104 HRESULT hr = QueryHeaders(request_handle,
105 info_level,
106 name,
107 value,
108 &value_size,
109 index);
110 if (FAILED(hr)) {
111 return hr;
112 }
113 ASSERT1(value_size == sizeof(*value));
114 return S_OK;
115 }
116
117 HRESULT HttpClient::QueryOptionString(HINTERNET handle,
118 uint32 option,
119 CString* value) {
120 ASSERT1(value);
121 DWORD num_bytes = 0;
122 HRESULT hr = QueryOption(handle, option, NULL, &num_bytes);
123 DWORD last_error = ::GetLastError();
124 if (hr != HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)) {
125 return hr;
126 }
127 ASSERT1(num_bytes);
128 CString val;
129 hr = QueryOption(handle, option, val.GetBuffer(num_bytes), &num_bytes);
130 if (FAILED(hr)) {
131 return hr;
132 }
133 ASSERT1(num_bytes);
134 val.ReleaseBufferSetLength(num_bytes/sizeof(TCHAR));
135 *value = val;
136 return S_OK;
137 }
138
139 HRESULT HttpClient::QueryOptionInt(HINTERNET handle,
140 uint32 option,
141 int* value) {
142 ASSERT1(value);
143 DWORD val = 0;
144 DWORD num_bytes = sizeof(val);
145 HRESULT hr = QueryOption(handle, option, &val, &num_bytes);
146 if (FAILED(hr)) {
147 return hr;
148 }
149 ASSERT1(num_bytes == sizeof(val));
150 *value = val;
151 return S_OK;
152 }
153
154 HRESULT HttpClient::SetOptionString(HINTERNET handle,
155 uint32 option,
156 const TCHAR* value) {
157 ASSERT1(value);
158 const void* buffer = value;
159 DWORD buffer_length = _tcslen(value) * sizeof(TCHAR);
160 return SetOption(handle, option, buffer, buffer_length);
161 }
162
163 HRESULT HttpClient::SetOptionInt(HINTERNET handle, uint32 option, int value) {
164 DWORD val = value;
165 return SetOption(handle, option, &val, sizeof(val));
166 }
167
168 } // namespace omaha
169
OLDNEW
« no previous file with comments | « net/http_client.h ('k') | net/http_client_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698