Chromium Code Reviews| 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..00ce49b0ca1435a126723d2ef6847f9aafa84f0c |
| --- /dev/null |
| +++ b/util/net/http_multipart_builder.h |
| @@ -0,0 +1,82 @@ |
| +// 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 "base/basictypes.h" |
| +#include "base/files/file_path.h" |
| +#include "base/memory/scoped_ptr.h" |
| + |
| +#include <map> |
|
Mark Mentovai
2014/10/28 22:34:28
C++ system headers should precede project-local he
Robert Sesek
2014/10/29 19:52:01
Done.
|
| +#include <string> |
| + |
| +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. |
| + //! \param[in] value The value to set at the \a key. This will overwrite any |
| + //! previously set value with the specified key. |
| + void SetFormData(const std::string& key, const std::string& value); |
|
Mark Mentovai
2014/10/28 22:34:28
|key| in this method and [the key, see below] in S
Robert Sesek
2014/10/29 19:52:01
Right, I was playing both sides of this coin by en
|
| + |
| + //! \brief Specifies the file at \a path to have its contents uploaded as |
| + //! multipart data, available at `name` of \a upload_file_name. |
|
Mark Mentovai
2014/10/28 22:34:28
I think this should be a 3-argument call: (const s
Robert Sesek
2014/10/29 19:52:01
Done.
|
| + //! |
| + //! \param[in] upload_file_name The name to give this multipart data. If a |
| + //! \a path has already been supplied at this name, a subsequent call |
| + //! will overwrite the path with the newly specified one. This is used |
| + //! as the `name` in the multipart message. |
| + //! \param[in] path The path of the files whose contents will be uploaded. |
| + void SetFileAttachment(const std::string& upload_file_name, |
| + const base::FilePath& path); |
| + |
| + //! \brief Generates the HTTPBodyStream for the data currently supplied to |
| + //! the builder. |
| + //! |
| + //! \return A caller-owned HTTPBodyStream object. |
| + scoped_ptr<HTTPBodyStream> GetBodyStream(); |
| + |
| + private: |
| + // Generates a random string suitable for use as a multipart boundary. |
| + static std::string GenerateBoundaryString(); |
|
Mark Mentovai
2014/10/28 22:34:28
Is there even a reason to expose these private sta
Robert Sesek
2014/10/29 19:52:01
No, moved to anon.
|
| + |
| + // Escapes the specified name to be suitable for the name field of a |
| + // form-data part. |
| + static std::string EncodeFieldName(const std::string& name); |
| + |
| + // Returns a string, formatted with a multipart boundary and a field name, |
| + // after which the contents of the part at |name| can be appended. |
| + static std::string GetFormDataBoundary(const std::string& boundary, |
| + const std::string& name); |
| + |
| + std::map<std::string, std::string> form_data_; |
| + std::map<std::string, base::FilePath> file_attachments_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(HTTPMultipartBuilder); |
| +}; |
| + |
| +} // namespace crashpad |
| + |
| +#endif // CRASHPAD_UTIL_NET_HTTP_MULTIPART_BUILDER_H_ |