| 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 |