Index: util/net/http_transport.h |
diff --git a/util/net/http_transport.h b/util/net/http_transport.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..554821535fad50ef6a22180848fb11d23ce74d33 |
--- /dev/null |
+++ b/util/net/http_transport.h |
@@ -0,0 +1,102 @@ |
+// Copyright 2014 The Crashpad Authors. All rights reserved. |
+// |
+// 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. |
+ |
+#ifndef CRASHPAD_UTIL_NET_HTTP_TRANSPORT_H_ |
+#define CRASHPAD_UTIL_NET_HTTP_TRANSPORT_H_ |
+ |
+#include <string> |
+ |
+#include "base/basictypes.h" |
+#include "base/memory/scoped_ptr.h" |
+#include "util/net/http_headers.h" |
+ |
+namespace crashpad { |
+ |
+class HTTPBodyStream; |
+ |
+//! \brief HTTPTransport executes a HTTP request using the specified URL, HTTP |
+//! method, headers, and body. This class can only issue a synchronous |
+//! HTTP request. |
+//! |
+//! This class cannot be instantiated directly. A concrete subclass must be |
+//! instantiated instead, which provides an implementation to execute the |
+//! request that is appropriate for the host operating system. |
+class HTTPTransport { |
+ public: |
+ virtual ~HTTPTransport(); |
+ |
+ //! \brief Instantiates a concrete HTTPTransport class for the current |
+ //! operating system. |
+ //! |
+ //! \return A new caller-owned HTTPTransport object. |
+ static scoped_ptr<HTTPTransport> Create(); |
+ |
+ //! \brief Sets URL to which the request will be made. |
+ //! |
+ //! \param[in] url The request URL. |
+ void SetURL(const std::string& url); |
+ |
+ //! \brief Sets the HTTP method to execute. E.g., GET, POST, etc. The default |
+ //! method is `"POST"`. |
+ //! |
+ //! \param[in] http_method The HTTP method. |
+ void SetMethod(const std::string& http_method); |
+ |
+ //! \brief Sets a HTTP header-value pair. |
+ //! |
+ //! \param[in] header The HTTP header name. Any previous value set at this |
+ //! name will be overwritten. |
+ //! \param[in] value The value to set for the header. |
+ void SetHeader(const std::string& header, const std::string& value); |
+ |
+ //! \brief Sets the stream object from which to generate the HTTP body. |
+ //! |
+ //! \param[in] stream A HTTPBodyStream, of which this class will take |
+ //! ownership. |
+ void SetBodyStream(scoped_ptr<HTTPBodyStream> stream); |
+ |
+ //! \brief Sets the timeout for the HTTP request. The default is 15 seconds. |
+ //! |
+ //! \param[in] timeout The request timeout, in seconds. |
+ void SetTimeout(double timeout); |
+ |
+ //! \brief Performs the HTTP request with the configured parameters and waits |
+ //! for the execution to complete. |
+ //! |
+ //! \return Whether or not the request was successful, defined as returning |
+ //! a HTTP status 200 (OK) code. |
+ virtual bool ExecuteSynchronously() = 0; |
+ |
+ protected: |
+ HTTPTransport(); |
+ |
+ const std::string& url() const { return url_; } |
+ const std::string& method() const { return method_; } |
+ const HTTPHeaders& headers() const { return headers_; } |
+ HTTPBodyStream* body_stream() const { return body_stream_.get(); } |
+ double timeout() const { return timeout_; } |
+ |
+ private: |
+ std::string url_; |
+ std::string method_; |
+ HTTPHeaders headers_; |
+ scoped_ptr<HTTPBodyStream> body_stream_; |
+ double timeout_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(HTTPTransport); |
+}; |
+ |
+} // namespace crashpad |
+ |
+#endif // CRASHPAD_UTIL_NET_HTTP_TRANSPORT_H_ |