OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "extensions/browser/api/cast_channel/cast_framer.h" | 5 #include "extensions/browser/api/cast_channel/cast_framer.h" |
6 | 6 |
7 #include <stdlib.h> | 7 #include <stdlib.h> |
8 | 8 |
9 #include <limits> | 9 #include <limits> |
10 | 10 |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 return 0; | 112 return 0; |
113 } | 113 } |
114 } | 114 } |
115 | 115 |
116 std::unique_ptr<CastMessage> MessageFramer::Ingest(size_t num_bytes, | 116 std::unique_ptr<CastMessage> MessageFramer::Ingest(size_t num_bytes, |
117 size_t* message_length, | 117 size_t* message_length, |
118 ChannelError* error) { | 118 ChannelError* error) { |
119 DCHECK(error); | 119 DCHECK(error); |
120 DCHECK(message_length); | 120 DCHECK(message_length); |
121 if (error_) { | 121 if (error_) { |
122 *error = CHANNEL_ERROR_INVALID_MESSAGE; | 122 *error = ChannelError::INVALID_MESSAGE; |
123 return nullptr; | 123 return nullptr; |
124 } | 124 } |
125 | 125 |
126 DCHECK_EQ(base::checked_cast<int32_t>(message_bytes_received_), | 126 DCHECK_EQ(base::checked_cast<int32_t>(message_bytes_received_), |
127 input_buffer_->offset()); | 127 input_buffer_->offset()); |
128 CHECK_LE(num_bytes, BytesRequested()); | 128 CHECK_LE(num_bytes, BytesRequested()); |
129 message_bytes_received_ += num_bytes; | 129 message_bytes_received_ += num_bytes; |
130 *error = CHANNEL_ERROR_NONE; | 130 *error = ChannelError::NONE; |
131 *message_length = 0; | 131 *message_length = 0; |
132 switch (current_element_) { | 132 switch (current_element_) { |
133 case HEADER: | 133 case HEADER: |
134 if (BytesRequested() == 0) { | 134 if (BytesRequested() == 0) { |
135 MessageHeader header; | 135 MessageHeader header; |
136 MessageHeader::Deserialize(input_buffer_->StartOfBuffer(), &header); | 136 MessageHeader::Deserialize(input_buffer_->StartOfBuffer(), &header); |
137 if (header.message_size > MessageHeader::max_message_size()) { | 137 if (header.message_size > MessageHeader::max_message_size()) { |
138 VLOG(1) << "Error parsing header (message size too large)."; | 138 VLOG(1) << "Error parsing header (message size too large)."; |
139 *error = CHANNEL_ERROR_INVALID_MESSAGE; | 139 *error = ChannelError::INVALID_MESSAGE; |
140 error_ = true; | 140 error_ = true; |
141 return nullptr; | 141 return nullptr; |
142 } | 142 } |
143 current_element_ = BODY; | 143 current_element_ = BODY; |
144 body_size_ = header.message_size; | 144 body_size_ = header.message_size; |
145 } | 145 } |
146 break; | 146 break; |
147 case BODY: | 147 case BODY: |
148 if (BytesRequested() == 0) { | 148 if (BytesRequested() == 0) { |
149 std::unique_ptr<CastMessage> parsed_message(new CastMessage); | 149 std::unique_ptr<CastMessage> parsed_message(new CastMessage); |
150 if (!parsed_message->ParseFromArray( | 150 if (!parsed_message->ParseFromArray( |
151 input_buffer_->StartOfBuffer() + MessageHeader::header_size(), | 151 input_buffer_->StartOfBuffer() + MessageHeader::header_size(), |
152 body_size_)) { | 152 body_size_)) { |
153 VLOG(1) << "Error parsing packet body."; | 153 VLOG(1) << "Error parsing packet body."; |
154 *error = CHANNEL_ERROR_INVALID_MESSAGE; | 154 *error = ChannelError::INVALID_MESSAGE; |
155 error_ = true; | 155 error_ = true; |
156 return nullptr; | 156 return nullptr; |
157 } | 157 } |
158 *message_length = body_size_; | 158 *message_length = body_size_; |
159 Reset(); | 159 Reset(); |
160 return parsed_message; | 160 return parsed_message; |
161 } | 161 } |
162 break; | 162 break; |
163 default: | 163 default: |
164 NOTREACHED() << "Unhandled packet element type."; | 164 NOTREACHED() << "Unhandled packet element type."; |
165 return nullptr; | 165 return nullptr; |
166 } | 166 } |
167 | 167 |
168 input_buffer_->set_offset(message_bytes_received_); | 168 input_buffer_->set_offset(message_bytes_received_); |
169 return nullptr; | 169 return nullptr; |
170 } | 170 } |
171 | 171 |
172 void MessageFramer::Reset() { | 172 void MessageFramer::Reset() { |
173 current_element_ = HEADER; | 173 current_element_ = HEADER; |
174 message_bytes_received_ = 0; | 174 message_bytes_received_ = 0; |
175 body_size_ = 0; | 175 body_size_ = 0; |
176 input_buffer_->set_offset(0); | 176 input_buffer_->set_offset(0); |
177 } | 177 } |
178 | 178 |
179 } // namespace cast_channel | 179 } // namespace cast_channel |
180 } // namespace api | 180 } // namespace api |
181 } // namespace extensions | 181 } // namespace extensions |
OLD | NEW |