| 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 "chrome/browser/devtools/device/usb/android_usb_device.h" | 5 #include "chrome/browser/devtools/device/usb/android_usb_device.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 | 8 |
| 9 #include "base/barrier_closure.h" | 9 #include "base/barrier_closure.h" |
| 10 #include "base/base64.h" | 10 #include "base/base64.h" |
| (...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 393 if (message->command == AdbMessage::kCommandAUTH && | 393 if (message->command == AdbMessage::kCommandAUTH && |
| 394 message->arg0 == AdbMessage::kAuthSignature) | 394 message->arg0 == AdbMessage::kAuthSignature) |
| 395 append_zero = false; | 395 append_zero = false; |
| 396 if (message->command == AdbMessage::kCommandWRTE) | 396 if (message->command == AdbMessage::kCommandWRTE) |
| 397 append_zero = false; | 397 append_zero = false; |
| 398 | 398 |
| 399 size_t body_length = message->body.length() + (append_zero ? 1 : 0); | 399 size_t body_length = message->body.length() + (append_zero ? 1 : 0); |
| 400 header.push_back(body_length); | 400 header.push_back(body_length); |
| 401 header.push_back(Checksum(message->body)); | 401 header.push_back(Checksum(message->body)); |
| 402 header.push_back(message->command ^ 0xffffffff); | 402 header.push_back(message->command ^ 0xffffffff); |
| 403 scoped_refptr<net::IOBuffer> header_buffer = new net::IOBuffer(kHeaderSize); | 403 scoped_refptr<net::IOBufferWithSize> header_buffer = |
| 404 new net::IOBufferWithSize(kHeaderSize); |
| 404 memcpy(header_buffer.get()->data(), &header[0], kHeaderSize); | 405 memcpy(header_buffer.get()->data(), &header[0], kHeaderSize); |
| 405 outgoing_queue_.push(std::make_pair(header_buffer, kHeaderSize)); | 406 outgoing_queue_.push(header_buffer); |
| 406 | 407 |
| 407 // Queue body. | 408 // Queue body. |
| 408 if (!message->body.empty()) { | 409 if (!message->body.empty()) { |
| 409 scoped_refptr<net::IOBuffer> body_buffer = new net::IOBuffer(body_length); | 410 scoped_refptr<net::IOBufferWithSize> body_buffer = |
| 411 new net::IOBufferWithSize(body_length); |
| 410 memcpy(body_buffer->data(), message->body.data(), message->body.length()); | 412 memcpy(body_buffer->data(), message->body.data(), message->body.length()); |
| 411 if (append_zero) | 413 if (append_zero) |
| 412 body_buffer->data()[body_length - 1] = 0; | 414 body_buffer->data()[body_length - 1] = 0; |
| 413 outgoing_queue_.push(std::make_pair(body_buffer, body_length)); | 415 outgoing_queue_.push(body_buffer); |
| 414 if (zero_mask_ && (body_length & zero_mask_) == 0) { | 416 if (zero_mask_ && (body_length & zero_mask_) == 0) { |
| 415 // Send a zero length packet. | 417 // Send a zero length packet. |
| 416 outgoing_queue_.push(std::make_pair(body_buffer, 0)); | 418 outgoing_queue_.push(new net::IOBufferWithSize(0)); |
| 417 } | 419 } |
| 418 } | 420 } |
| 419 ProcessOutgoing(); | 421 ProcessOutgoing(); |
| 420 } | 422 } |
| 421 | 423 |
| 422 void AndroidUsbDevice::ProcessOutgoing() { | 424 void AndroidUsbDevice::ProcessOutgoing() { |
| 423 DCHECK(message_loop_ == base::MessageLoop::current()); | 425 DCHECK(message_loop_ == base::MessageLoop::current()); |
| 424 | 426 |
| 425 if (outgoing_queue_.empty() || !usb_handle_) | 427 if (outgoing_queue_.empty() || !usb_handle_) |
| 426 return; | 428 return; |
| 427 | 429 |
| 428 BulkMessage message = outgoing_queue_.front(); | 430 BulkMessage message = outgoing_queue_.front(); |
| 429 outgoing_queue_.pop(); | 431 outgoing_queue_.pop(); |
| 430 DumpMessage(true, message.first->data(), message.second); | 432 DumpMessage(true, message->data(), message->size()); |
| 431 usb_handle_->BulkTransfer( | 433 usb_handle_->BulkTransfer( |
| 432 usb_service::USB_DIRECTION_OUTBOUND, outbound_address_, | 434 usb_service::USB_DIRECTION_OUTBOUND, outbound_address_, |
| 433 message.first, message.second, kUsbTimeout, | 435 message, message->size(), kUsbTimeout, |
| 434 base::Bind(&AndroidUsbDevice::OutgoingMessageSent, | 436 base::Bind(&AndroidUsbDevice::OutgoingMessageSent, |
| 435 weak_factory_.GetWeakPtr())); | 437 weak_factory_.GetWeakPtr())); |
| 436 } | 438 } |
| 437 | 439 |
| 438 void AndroidUsbDevice::OutgoingMessageSent(UsbTransferStatus status, | 440 void AndroidUsbDevice::OutgoingMessageSent(UsbTransferStatus status, |
| 439 scoped_refptr<net::IOBuffer> buffer, | 441 scoped_refptr<net::IOBuffer> buffer, |
| 440 size_t result) { | 442 size_t result) { |
| 441 DCHECK(message_loop_ == base::MessageLoop::current()); | 443 DCHECK(message_loop_ == base::MessageLoop::current()); |
| 442 | 444 |
| 443 if (status != usb_service::USB_TRANSFER_COMPLETED) | 445 if (status != usb_service::USB_TRANSFER_COMPLETED) |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 643 BrowserThread::PostTask( | 645 BrowserThread::PostTask( |
| 644 BrowserThread::FILE, FROM_HERE, | 646 BrowserThread::FILE, FROM_HERE, |
| 645 base::Bind(&ReleaseInterface, usb_handle, interface_id_)); | 647 base::Bind(&ReleaseInterface, usb_handle, interface_id_)); |
| 646 } | 648 } |
| 647 | 649 |
| 648 void AndroidUsbDevice::SocketDeleted(uint32 socket_id) { | 650 void AndroidUsbDevice::SocketDeleted(uint32 socket_id) { |
| 649 DCHECK(message_loop_ == base::MessageLoop::current()); | 651 DCHECK(message_loop_ == base::MessageLoop::current()); |
| 650 | 652 |
| 651 sockets_.erase(socket_id); | 653 sockets_.erase(socket_id); |
| 652 } | 654 } |
| OLD | NEW |