Index: util/net/http_multipart_builder.h |
diff --git a/util/net/http_multipart_builder.h b/util/net/http_multipart_builder.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d558820954fbc5c2366993e0d00042c3e61f73b8 |
--- /dev/null |
+++ b/util/net/http_multipart_builder.h |
@@ -0,0 +1,89 @@ |
+// 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_MULTIPART_BUILDER_H_ |
+#define CRASHPAD_UTIL_NET_HTTP_MULTIPART_BUILDER_H_ |
+ |
+#include <map> |
+#include <string> |
+ |
+#include "base/basictypes.h" |
+#include "base/files/file_path.h" |
+#include "base/memory/scoped_ptr.h" |
+ |
+namespace crashpad { |
+ |
+class HTTPBodyStream; |
+ |
+//! \brief This class is used to build a MIME multipart message, conforming to |
+//! RFC 2046, for use as a HTTP request body. |
+class HTTPMultipartBuilder { |
+ public: |
+ HTTPMultipartBuilder(); |
+ ~HTTPMultipartBuilder(); |
+ |
+ //! \brief Sets a `Content-Disposition: form-data` key-value pair. |
+ //! |
+ //! \param[in] key The key of the form data, specified as the `name` in the |
+ //! multipart message. Any data previously set on this class with this |
+ //! key will be overwritten. |
+ //! \param[in] value The value to set at the \a key. |
+ void SetFormData(const std::string& key, const std::string& value); |
+ |
+ //! \brief Specifies the file at \a path to have its contents uploaded as |
+ //! multipart data, available at `name` of \a upload_file_name. |
+ //! |
+ //! \param[in] key The key of the form data, specified as the `name` in the |
+ //! multipart message. Any data previously set on this class with this |
+ //! key will be overwritten. |
+ //! \param[in] upload_file_name The `filename` to specify for this multipart |
+ //! data attachment. |
+ //! \param[in] path The path of the file whose contents will be uploaded. |
+ //! \param[in] content_type The `Content-Type` to specify for the attachment. |
+ //! If this is empty, `"application/octet-stream"` will be used. |
+ void SetFileAttachment(const std::string& key, |
+ const std::string& upload_file_name, |
+ const base::FilePath& path, |
+ const std::string& content_type); |
+ |
+ //! \brief Generates the HTTPBodyStream for the data currently supplied to |
+ //! the builder. |
+ //! |
+ //! \return A caller-owned HTTPBodyStream object. |
+ scoped_ptr<HTTPBodyStream> GetBodyStream(); |
+ |
+ //! \brief Gets the boundary that will be used in GetBodyStream(). |
+ std::string boundary() const { return boundary_; } |
+ |
+ private: |
+ struct FileAttachment { |
+ std::string filename; |
+ std::string content_type; |
+ base::FilePath path; |
+ }; |
+ |
+ // Removes elements from both data maps at the specified |key|, to ensure |
+ // uniqueness across the entire HTTP body. |
+ void EraseKey(const std::string& key); |
+ |
+ std::string boundary_; |
+ std::map<std::string, std::string> form_data_; |
+ std::map<std::string, FileAttachment> file_attachments_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(HTTPMultipartBuilder); |
+}; |
+ |
+} // namespace crashpad |
+ |
+#endif // CRASHPAD_UTIL_NET_HTTP_MULTIPART_BUILDER_H_ |