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 |