| Index: net/network_request.h
|
| diff --git a/net/network_request.h b/net/network_request.h
|
| deleted file mode 100644
|
| index 678bcf012de7dc192b0034066deda02621c95952..0000000000000000000000000000000000000000
|
| --- a/net/network_request.h
|
| +++ /dev/null
|
| @@ -1,209 +0,0 @@
|
| -// Copyright 2007-2010 Google Inc.
|
| -//
|
| -// Licensed under the Apache License, Version 2.0 (the "License");
|
| -// you may not use this file except in compliance with the License.
|
| -// You may obtain a copy of the License at
|
| -//
|
| -// http://www.apache.org/licenses/LICENSE-2.0
|
| -//
|
| -// Unless required by applicable law or agreed to in writing, software
|
| -// distributed under the License is distributed on an "AS IS" BASIS,
|
| -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| -// See the License for the specific language governing permissions and
|
| -// limitations under the License.
|
| -// ========================================================================
|
| -
|
| -//
|
| -// TODO(omaha): implement a way to get the last network error.
|
| -//
|
| -// TODO(omaha): might have to do some working regarding the cookie handling.
|
| -// WinHttp keeps a per session cookie cache. We are currently tearing down
|
| -// the session after each request, so cookies are lost. Normally we don't
|
| -// need cookies at Omaha except for CUP.
|
| -
|
| -#ifndef OMAHA_NET_NETWORK_REQUEST_H__
|
| -#define OMAHA_NET_NETWORK_REQUEST_H__
|
| -
|
| -#include <windows.h>
|
| -#include <winhttp.h>
|
| -#include <atlstr.h>
|
| -#include <vector>
|
| -#include "base/basictypes.h"
|
| -#include "base/scoped_ptr.h"
|
| -#include "omaha/base/string.h"
|
| -#include "omaha/base/time.h"
|
| -#include "omaha/net/network_config.h"
|
| -
|
| -namespace omaha {
|
| -
|
| -namespace detail {
|
| -
|
| -class NetworkRequestImpl;
|
| -
|
| -} // namespace detail
|
| -
|
| -class NetworkRequestCallback {
|
| - public:
|
| - virtual ~NetworkRequestCallback() {}
|
| -
|
| - // Notifies download begins. This gives the callee a chance to initialize its
|
| - // download state, such as resetting the download progress.
|
| - virtual void OnRequestBegin() = 0;
|
| -
|
| - // Indicates the progress of the NetworkRequest.
|
| - //
|
| - // bytes - Current number of bytes transferred, relative to the expected
|
| - // maximum indicated by the bytes_total.
|
| - // bytes_total - The expected total number of bytes to transfer. This is
|
| - // usually the content length value or 0 if the content length
|
| - // is not available.
|
| - // status - WinHttp status codes regarding the progress of the request.
|
| - // status_text - Additional information, when available.
|
| - virtual void OnProgress(int bytes, int bytes_total,
|
| - int status, const TCHAR* status_text) = 0;
|
| -
|
| - virtual void OnRequestRetryScheduled(time64 next_retry_time) = 0;
|
| -};
|
| -
|
| -class HttpRequestInterface;
|
| -
|
| -// NetworkRequest is the main interface to the net module. The semantics of
|
| -// the interface is defined as transferring bytes from a url, with an optional
|
| -// request body, to a destination specified as a memory buffer or a file.
|
| -// NetworkRequest encapsulates the retry logic for a request, the fall back to
|
| -// different network configurations, and ultimately the fallback to different
|
| -// network mechanisms. The calls are blocking calls. One instance of the class
|
| -// is responsible for one request only.
|
| -// The client of NetworkRequest is responsible for configuring the network
|
| -// fallbacks. This gives the caller a lot of flexibility over the fallbacks but
|
| -// it requires more work to properly set the fallback chain.
|
| -class NetworkRequest {
|
| - public:
|
| - explicit NetworkRequest(const NetworkConfig::Session& network_session);
|
| - ~NetworkRequest();
|
| -
|
| - // Cancels the request. Cancel can be called from a different thread.
|
| - // Calling Cancel makes the control return to the caller of Post or Get
|
| - // methods. The object can't be reused once it is canceled.
|
| - HRESULT Cancel();
|
| -
|
| - // Closes the request and releases the request resources, such as handles or
|
| - // interface pointers. Unlike Cancel, the request object can be reused
|
| - // after closing.
|
| - HRESULT Close();
|
| -
|
| - // Adds an instance of HttpRequestInterface at the end of the fallback
|
| - // chain of http requests. This class takes ownership of the http_request
|
| - // object.
|
| - void AddHttpRequest(HttpRequestInterface* http_request);
|
| -
|
| - // Post, Get, and DownloadFile return S_OK if the request completed
|
| - // successfully and the response is available to the caller. For errors,
|
| - // the status code can be checked.
|
| - //
|
| - // Posts a buffer to a url.
|
| - HRESULT Post(const CString& url,
|
| - const void* buffer,
|
| - size_t length,
|
| - std::vector<uint8>* response);
|
| -
|
| - // Posts an UTF-8 string to a url.
|
| - HRESULT PostUtf8String(const CString& url,
|
| - const CStringA& request,
|
| - std::vector<uint8>* response) {
|
| - const uint8* buffer = reinterpret_cast<const uint8*>(request.GetString());
|
| - size_t length = request.GetLength();
|
| - return Post(url, buffer, length, response);
|
| - }
|
| -
|
| - // Posts a Unicode string to a url.
|
| - HRESULT PostString(const CString& url,
|
| - const CString& request,
|
| - std::vector<uint8>* response) {
|
| - return PostUtf8String(url, WideToUtf8(request), response);
|
| - }
|
| -
|
| - // Gets a url.
|
| - HRESULT Get(const CString& url, std::vector<uint8>* response);
|
| -
|
| - // Downloads a url to a file.
|
| - HRESULT DownloadFile(const CString& url, const CString& filename);
|
| -
|
| - // Enables a separate thread to temporarily stops the network downloading.
|
| - // The downloading thread will be blocked inside NetworkRequest::Post/Get
|
| - // infinitely by an event until Resume/Cancel/Close is called.
|
| - HRESULT Pause();
|
| -
|
| - // Enables a separate thread to resume current network request if it is in
|
| - // pause state.
|
| - HRESULT Resume();
|
| -
|
| - // Adds a request header. The header with the same name is only added once.
|
| - // The method is only good enough for what Omaha needs and it is not good
|
| - // for general purpose header manipulation, which is quite sophisticated.
|
| - void AddHeader(const TCHAR* name, const TCHAR* value);
|
| -
|
| - // Queries a response header. This is the companion for the AddHeader
|
| - // method above.
|
| - HRESULT QueryHeadersString(uint32 info_level,
|
| - const TCHAR* name,
|
| - CString* value);
|
| -
|
| - // Returns the http status code if available.
|
| - int http_status_code() const;
|
| -
|
| - // Returns the response headers, separated by \r\n.
|
| - CString response_headers() const;
|
| -
|
| - // Returns a trace of the request for logging purposes.
|
| - CString trace() const;
|
| -
|
| - void set_proxy_auth_config(const ProxyAuthConfig& proxy_auth_config);
|
| -
|
| - // Sets the number of retries for the request. The retry mechanism uses
|
| - // exponential backoff to decrease the rate of the retries.
|
| - void set_num_retries(int num_retries);
|
| -
|
| - void set_time_between_retries(int time_between_retries_ms);
|
| -
|
| - // Sets an external observer for the request. The ownership of the callback
|
| - // remains with the caller. The current implementation provides callback
|
| - // notification for DownloadFile only.
|
| - void set_callback(NetworkRequestCallback* callback);
|
| -
|
| - // Sets the priority of the request. Currently, only BITS requests support
|
| - // prioritization of requests.
|
| - void set_low_priority(bool low_priority);
|
| -
|
| - // Overrides detecting the network configuration and uses the configuration
|
| - // specified. If parameter is NULL, it defaults to detecting the configuration
|
| - // automatically.
|
| - void set_proxy_configuration(const ProxyConfig* proxy_configuration);
|
| -
|
| - void set_preserve_protocol(bool preserve_protocol);
|
| -
|
| - private:
|
| - // Uses pimpl idiom to minimize dependencies on implementation details.
|
| - scoped_ptr<detail::NetworkRequestImpl> impl_;
|
| - DISALLOW_EVIL_CONSTRUCTORS(NetworkRequest);
|
| -};
|
| -
|
| -
|
| -// Posts a request, falling back from http to https if the http request failed.
|
| -// Returns S_OK if the request is successfully sent. Returns the error
|
| -// corresponding to the http request in case of errors.
|
| -HRESULT PostRequest(NetworkRequest* network_request,
|
| - bool fallback_to_https,
|
| - const CString& url,
|
| - const CString& request_string,
|
| - std::vector<uint8>* response);
|
| -
|
| -// Gets a request.
|
| -HRESULT GetRequest(NetworkRequest* network_request,
|
| - const CString& url,
|
| - std::vector<uint8>* response);
|
| -
|
| -} // namespace omaha
|
| -
|
| -#endif // OMAHA_NET_NETWORK_REQUEST_H__
|
| -
|
|
|