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

Side by Side Diff: net/winhttp_adapter.h

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/winhttp.cc ('k') | net/winhttp_adapter.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 2010 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 #ifndef OMAHA_NET_WINHTTP_ADAPTER_H_
17 #define OMAHA_NET_WINHTTP_ADAPTER_H_
18
19 #include <windows.h>
20 #include "base/basictypes.h"
21 #include "base/scoped_ptr.h"
22 #include "omaha/base/scoped_any.h"
23 #include "omaha/base/synchronized.h"
24 #include "omaha/net/winhttp.h"
25
26 namespace omaha {
27
28 // Provides a sync-async adapter between the caller and the asynchronous
29 // WinHttp client. Solves the issue of reliably canceling of WinHttp calls by
30 // closing the handles and avoding the race condition between handle closing
31 // and the incoming WinHttp call.
32 // The class manages the connection and the request handles. It registers a
33 // callback for all WinHttp status notifications. Once an asynchrous WinHttp
34 // call is made, the code blocks waiting for the corresponding notification
35 // to arrive, handle the completion result, and then return to the caller.
36 // WinHttp is guaranteed to send a notification callback for all asynchronous
37 // request calls that have succeeded.
38 // TODO(omaha): consider eliminating this class and implementing the same
39 // functionality in the WinHttp class. Most likely, another class is needed
40 // to manage the WinHttp session handle.
41 class WinHttpAdapter {
42 public:
43 WinHttpAdapter();
44
45 HRESULT Initialize();
46
47 HRESULT Connect(HINTERNET session_handle, const TCHAR* server, int port);
48
49 HRESULT OpenRequest(const TCHAR* verb,
50 const TCHAR* uri,
51 const TCHAR* version,
52 const TCHAR* referrer,
53 const TCHAR** accept_types,
54 uint32 flags);
55
56 HRESULT AddRequestHeaders(const TCHAR* headers,
57 int length,
58 uint32 modifiers);
59
60 HRESULT SendRequest(const TCHAR* headers,
61 DWORD headers_length,
62 const void* optional_data,
63 DWORD optional_data_length,
64 DWORD content_length);
65
66 HRESULT SetCredentials(uint32 auth_targets,
67 uint32 auth_scheme,
68 const TCHAR* user_name,
69 const TCHAR* password);
70
71 HRESULT ReceiveResponse();
72
73 HRESULT QueryAuthSchemes(uint32* supported_schemes,
74 uint32* first_scheme,
75 uint32* auth_target);
76
77 HRESULT QueryRequestHeadersInt(uint32 info_level,
78 const TCHAR* name,
79 int* value,
80 DWORD* index);
81
82 HRESULT QueryRequestHeadersString(uint32 info_level,
83 const TCHAR* name,
84 CString* value,
85 DWORD* index);
86
87 HRESULT QueryDataAvailable(DWORD* num_bytes);
88
89 HRESULT ReadData(void* buffer, DWORD buffer_length, DWORD* bytes_read);
90
91 HRESULT SetRequestOptionInt(uint32 option, int value);
92
93 HRESULT SetRequestOption(uint32 option,
94 const void* buffer,
95 DWORD buffer_length);
96
97 void CloseHandles();
98
99 HRESULT CrackUrl(const TCHAR* url,
100 uint32 flags,
101 CString* scheme,
102 CString* server,
103 int* port,
104 CString* url_path,
105 CString* extra_info) {
106 return http_client_->CrackUrl(
107 url, flags, scheme, server, port, url_path, extra_info);
108 }
109
110 CString server_name() const { return server_name_; }
111 CString server_ip() const { return server_ip_; }
112
113 private:
114
115 HRESULT AsyncCallBegin(DWORD async_call_type);
116 HRESULT AsyncCallEnd(DWORD async_call_type);
117
118 void StatusCallback(HINTERNET handle,
119 uint32 status,
120 void* info,
121 uint32 info_len);
122
123 static void __stdcall WinHttpStatusCallback(HINTERNET handle,
124 uint32 context,
125 uint32 status,
126 void* info,
127 uint32 info_len);
128
129 scoped_ptr<HttpClient> http_client_;
130
131 HINTERNET connection_handle_;
132 HINTERNET request_handle_;
133
134 CString server_name_;
135 CString server_ip_;
136
137 DWORD async_call_type_;
138 bool async_call_is_error_;
139 WINHTTP_ASYNC_RESULT async_call_result_;
140 DWORD async_bytes_available_;
141 DWORD async_bytes_read_;
142 scoped_event async_completion_event_;
143
144 LLock lock_;
145
146 DISALLOW_COPY_AND_ASSIGN(WinHttpAdapter);
147 };
148
149 } // namespace omaha
150
151 #endif // OMAHA_NET_WINHTTP_ADAPTER_H_
152
OLDNEW
« no previous file with comments | « net/winhttp.cc ('k') | net/winhttp_adapter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698