OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "chromeos/binder/command_stream.h" | 5 #include "chromeos/binder/command_stream.h" |
6 | 6 |
7 #include <linux/android/binder.h> | 7 #include <linux/android/binder.h> |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 | 10 |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 case BR_ERROR: { | 104 case BR_ERROR: { |
105 int32_t error = 0; | 105 int32_t error = 0; |
106 if (!reader->Read(&error, sizeof(error))) { | 106 if (!reader->Read(&error, sizeof(error))) { |
107 LOG(ERROR) << "Failed to read error code."; | 107 LOG(ERROR) << "Failed to read error code."; |
108 return false; | 108 return false; |
109 } | 109 } |
110 break; | 110 break; |
111 } | 111 } |
112 case BR_OK: | 112 case BR_OK: |
113 break; | 113 break; |
114 case BR_TRANSACTION: | 114 case BR_TRANSACTION: { |
115 NOTIMPLEMENTED(); | 115 TransactionDataFromDriver data( |
| 116 base::Bind(&CommandStream::FreeTransactionBuffer, |
| 117 weak_ptr_factory_.GetWeakPtr())); |
| 118 if (!reader->Read(data.mutable_data(), sizeof(*data.mutable_data()))) { |
| 119 LOG(ERROR) << "Failed to read transaction data."; |
| 120 return false; |
| 121 } |
| 122 if (!incoming_command_handler_->OnTransaction(data)) { |
| 123 LOG(ERROR) << "Failed to handle transaction."; |
| 124 return false; |
| 125 } |
116 break; | 126 break; |
| 127 } |
117 case BR_REPLY: { | 128 case BR_REPLY: { |
118 scoped_ptr<TransactionDataFromDriver> data(new TransactionDataFromDriver( | 129 scoped_ptr<TransactionDataFromDriver> data(new TransactionDataFromDriver( |
119 base::Bind(&CommandStream::FreeTransactionBuffer, | 130 base::Bind(&CommandStream::FreeTransactionBuffer, |
120 weak_ptr_factory_.GetWeakPtr()))); | 131 weak_ptr_factory_.GetWeakPtr()))); |
121 binder_transaction_data* data_struct = data->mutable_data(); | 132 binder_transaction_data* data_struct = data->mutable_data(); |
122 if (!reader->Read(data_struct, sizeof(*data_struct))) { | 133 if (!reader->Read(data_struct, sizeof(*data_struct))) { |
123 LOG(ERROR) << "Failed to read transaction data."; | 134 LOG(ERROR) << "Failed to read transaction data."; |
124 return false; | 135 return false; |
125 } | 136 } |
126 incoming_command_handler_->OnReply(std::move(data)); | 137 incoming_command_handler_->OnReply(std::move(data)); |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
194 } | 205 } |
195 return true; | 206 return true; |
196 } | 207 } |
197 | 208 |
198 void CommandStream::FreeTransactionBuffer(const void* ptr) { | 209 void CommandStream::FreeTransactionBuffer(const void* ptr) { |
199 DCHECK(thread_checker_.CalledOnValidThread()); | 210 DCHECK(thread_checker_.CalledOnValidThread()); |
200 AppendOutgoingCommand(BC_FREE_BUFFER, &ptr, sizeof(ptr)); | 211 AppendOutgoingCommand(BC_FREE_BUFFER, &ptr, sizeof(ptr)); |
201 } | 212 } |
202 | 213 |
203 } // namespace binder | 214 } // namespace binder |
OLD | NEW |