OLD | NEW |
1 // Copyright 2014 The Crashpad Authors. All rights reserved. | 1 // Copyright 2014 The Crashpad Authors. All rights reserved. |
2 // | 2 // |
3 // Licensed under the Apache License, Version 2.0 (the "License"); | 3 // Licensed under the Apache License, Version 2.0 (the "License"); |
4 // you may not use this file except in compliance with 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 | 5 // You may obtain a copy of the License at |
6 // | 6 // |
7 // http://www.apache.org/licenses/LICENSE-2.0 | 7 // http://www.apache.org/licenses/LICENSE-2.0 |
8 // | 8 // |
9 // Unless required by applicable law or agreed to in writing, software | 9 // Unless required by applicable law or agreed to in writing, software |
10 // distributed under the License is distributed on an "AS IS" BASIS, | 10 // distributed under the License is distributed on an "AS IS" BASIS, |
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
12 // See the License for the specific language governing permissions and | 12 // See the License for the specific language governing permissions and |
13 // limitations under the License. | 13 // limitations under the License. |
14 | 14 |
15 #ifndef CRASHPAD_UTIL_NET_HTTP_BODY_H_ | 15 #ifndef CRASHPAD_UTIL_NET_HTTP_BODY_H_ |
16 #define CRASHPAD_UTIL_NET_HTTP_BODY_H_ | 16 #define CRASHPAD_UTIL_NET_HTTP_BODY_H_ |
17 | 17 |
18 #include <stdint.h> | 18 #include <stdint.h> |
19 #include <sys/types.h> | 19 #include <sys/types.h> |
20 | 20 |
21 #include <string> | 21 #include <string> |
22 #include <vector> | 22 #include <vector> |
23 | 23 |
24 #include "base/basictypes.h" | 24 #include "base/basictypes.h" |
25 #include "base/files/file_path.h" | 25 #include "base/files/file_path.h" |
| 26 #include "util/file/file_io.h" |
26 | 27 |
27 namespace crashpad { | 28 namespace crashpad { |
28 | 29 |
29 //! \brief An interface to a stream that can be used for an HTTP request body. | 30 //! \brief An interface to a stream that can be used for an HTTP request body. |
30 class HTTPBodyStream { | 31 class HTTPBodyStream { |
31 public: | 32 public: |
32 virtual ~HTTPBodyStream() {} | 33 virtual ~HTTPBodyStream() {} |
33 | 34 |
34 //! \brief Copies up to \a max_len bytes into the user-supplied buffer. | 35 //! \brief Copies up to \a max_len bytes into the user-supplied buffer. |
35 //! | 36 //! |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
76 //! | 77 //! |
77 //! \param[in] path The file from which this HTTPBodyStream will read. | 78 //! \param[in] path The file from which this HTTPBodyStream will read. |
78 explicit FileHTTPBodyStream(const base::FilePath& path); | 79 explicit FileHTTPBodyStream(const base::FilePath& path); |
79 | 80 |
80 ~FileHTTPBodyStream() override; | 81 ~FileHTTPBodyStream() override; |
81 | 82 |
82 // HTTPBodyStream: | 83 // HTTPBodyStream: |
83 ssize_t GetBytesBuffer(uint8_t* buffer, size_t max_len) override; | 84 ssize_t GetBytesBuffer(uint8_t* buffer, size_t max_len) override; |
84 | 85 |
85 private: | 86 private: |
86 enum InvalidFD { | 87 enum FileState { |
87 kUnopenedFile = -1, | 88 kUnopenedFile, |
88 kFileOpenError = -2, | 89 kFileOpenError, |
89 kClosedAtEOF = -3, | 90 kClosedAtEOF, |
| 91 kReading, |
90 }; | 92 }; |
91 | 93 |
92 base::FilePath path_; | 94 base::FilePath path_; |
93 | 95 ScopedFileHandle file_; |
94 // If |fd_| is greater than or equal to zero, it is an opened descriptor | 96 FileState file_state_; |
95 // from which an instance of this class is reading. If |fd_| is less than | |
96 // zero, the value corresponds to an InvalidFD value. | |
97 int fd_; | |
98 | 97 |
99 DISALLOW_COPY_AND_ASSIGN(FileHTTPBodyStream); | 98 DISALLOW_COPY_AND_ASSIGN(FileHTTPBodyStream); |
100 }; | 99 }; |
101 | 100 |
102 //! \brief An implementation of HTTPBodyStream that combines an array of | 101 //! \brief An implementation of HTTPBodyStream that combines an array of |
103 //! several other HTTPBodyStream objects into a single, unified stream. | 102 //! several other HTTPBodyStream objects into a single, unified stream. |
104 class CompositeHTTPBodyStream : public HTTPBodyStream { | 103 class CompositeHTTPBodyStream : public HTTPBodyStream { |
105 public: | 104 public: |
106 using PartsList = std::vector<HTTPBodyStream*>; | 105 using PartsList = std::vector<HTTPBodyStream*>; |
107 | 106 |
(...skipping 13 matching lines...) Expand all Loading... |
121 private: | 120 private: |
122 PartsList parts_; | 121 PartsList parts_; |
123 PartsList::iterator current_part_; | 122 PartsList::iterator current_part_; |
124 | 123 |
125 DISALLOW_COPY_AND_ASSIGN(CompositeHTTPBodyStream); | 124 DISALLOW_COPY_AND_ASSIGN(CompositeHTTPBodyStream); |
126 }; | 125 }; |
127 | 126 |
128 } // namespace crashpad | 127 } // namespace crashpad |
129 | 128 |
130 #endif // CRASHPAD_UTIL_NET_HTTP_BODY_H_ | 129 #endif // CRASHPAD_UTIL_NET_HTTP_BODY_H_ |
OLD | NEW |