Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(36)

Side by Side Diff: chrome/browser/devtools/device/usb/android_usb_device.cc

Issue 1542413002: Switch to standard integer types in chrome/browser/, part 1 of 4. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 27 matching lines...) Expand all
38 namespace { 38 namespace {
39 39
40 const size_t kHeaderSize = 24; 40 const size_t kHeaderSize = 24;
41 41
42 const int kAdbClass = 0xff; 42 const int kAdbClass = 0xff;
43 const int kAdbSubclass = 0x42; 43 const int kAdbSubclass = 0x42;
44 const int kAdbProtocol = 0x1; 44 const int kAdbProtocol = 0x1;
45 45
46 const int kUsbTimeout = 0; 46 const int kUsbTimeout = 0;
47 47
48 const uint32 kMaxPayload = 4096; 48 const uint32_t kMaxPayload = 4096;
49 const uint32 kVersion = 0x01000000; 49 const uint32_t kVersion = 0x01000000;
50 50
51 static const char kHostConnectMessage[] = "host::"; 51 static const char kHostConnectMessage[] = "host::";
52 52
53 using content::BrowserThread; 53 using content::BrowserThread;
54 54
55 typedef std::vector<scoped_refptr<UsbDevice> > UsbDevices; 55 typedef std::vector<scoped_refptr<UsbDevice> > UsbDevices;
56 typedef std::set<scoped_refptr<UsbDevice> > UsbDeviceSet; 56 typedef std::set<scoped_refptr<UsbDevice> > UsbDeviceSet;
57 57
58 // Stores android wrappers around claimed usb devices on caller thread. 58 // Stores android wrappers around claimed usb devices on caller thread.
59 base::LazyInstance<std::vector<AndroidUsbDevice*> >::Leaky g_devices = 59 base::LazyInstance<std::vector<AndroidUsbDevice*> >::Leaky g_devices =
(...skipping 21 matching lines...) Expand all
81 ++device_count; 81 ++device_count;
82 } 82 }
83 } 83 }
84 } 84 }
85 } 85 }
86 86
87 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 87 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
88 base::Bind(callback, device_count)); 88 base::Bind(callback, device_count));
89 } 89 }
90 90
91 uint32 Checksum(const std::string& data) { 91 uint32_t Checksum(const std::string& data) {
92 unsigned char* x = (unsigned char*)data.data(); 92 unsigned char* x = (unsigned char*)data.data();
93 int count = data.length(); 93 int count = data.length();
94 uint32 sum = 0; 94 uint32_t sum = 0;
95 while (count-- > 0) 95 while (count-- > 0)
96 sum += *x++; 96 sum += *x++;
97 return sum; 97 return sum;
98 } 98 }
99 99
100 void DumpMessage(bool outgoing, const char* data, size_t length) { 100 void DumpMessage(bool outgoing, const char* data, size_t length) {
101 #if 0 101 #if 0
102 std::string result = ""; 102 std::string result = "";
103 if (length == kHeaderSize) { 103 if (length == kHeaderSize) {
104 for (size_t i = 0; i < 24; ++i) { 104 for (size_t i = 0; i < 24; ++i) {
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 caller_task_runner->PostTask(FROM_HERE, 283 caller_task_runner->PostTask(FROM_HERE,
284 base::Bind(callback, AndroidUsbDevices())); 284 base::Bind(callback, AndroidUsbDevices()));
285 } else { 285 } else {
286 service->GetDevices( 286 service->GetDevices(
287 base::Bind(&OpenAndroidDevices, rsa_key, callback, caller_task_runner)); 287 base::Bind(&OpenAndroidDevices, rsa_key, callback, caller_task_runner));
288 } 288 }
289 } 289 }
290 290
291 } // namespace 291 } // namespace
292 292
293 AdbMessage::AdbMessage(uint32 command, 293 AdbMessage::AdbMessage(uint32_t command,
294 uint32 arg0, 294 uint32_t arg0,
295 uint32 arg1, 295 uint32_t arg1,
296 const std::string& body) 296 const std::string& body)
297 : command(command), arg0(arg0), arg1(arg1), body(body) { 297 : command(command), arg0(arg0), arg1(arg1), body(body) {}
298 }
299 298
300 AdbMessage::~AdbMessage() { 299 AdbMessage::~AdbMessage() {
301 } 300 }
302 301
303 // static 302 // static
304 void AndroidUsbDevice::CountDevices(const base::Callback<void(int)>& callback) { 303 void AndroidUsbDevice::CountDevices(const base::Callback<void(int)>& callback) {
305 UsbService* service = device::DeviceClient::Get()->GetUsbService(); 304 UsbService* service = device::DeviceClient::Get()->GetUsbService();
306 if (service != NULL) { 305 if (service != NULL) {
307 service->GetDevices(base::Bind(&CountAndroidDevices, callback)); 306 service->GetDevices(base::Bind(&CountAndroidDevices, callback));
308 } else { 307 } else {
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 task_runner_ = base::ThreadTaskRunnerHandle::Get(); 354 task_runner_ = base::ThreadTaskRunnerHandle::Get();
356 Queue(make_scoped_ptr(new AdbMessage(AdbMessage::kCommandCNXN, kVersion, 355 Queue(make_scoped_ptr(new AdbMessage(AdbMessage::kCommandCNXN, kVersion,
357 kMaxPayload, kHostConnectMessage))); 356 kMaxPayload, kHostConnectMessage)));
358 ReadHeader(); 357 ReadHeader();
359 } 358 }
360 359
361 net::StreamSocket* AndroidUsbDevice::CreateSocket(const std::string& command) { 360 net::StreamSocket* AndroidUsbDevice::CreateSocket(const std::string& command) {
362 if (!usb_handle_.get()) 361 if (!usb_handle_.get())
363 return NULL; 362 return NULL;
364 363
365 uint32 socket_id = ++last_socket_id_; 364 uint32_t socket_id = ++last_socket_id_;
366 sockets_[socket_id] = new AndroidUsbSocket(this, socket_id, command, 365 sockets_[socket_id] = new AndroidUsbSocket(this, socket_id, command,
367 base::Bind(&AndroidUsbDevice::SocketDeleted, this, socket_id)); 366 base::Bind(&AndroidUsbDevice::SocketDeleted, this, socket_id));
368 return sockets_[socket_id]; 367 return sockets_[socket_id];
369 } 368 }
370 369
371 void AndroidUsbDevice::Send(uint32 command, 370 void AndroidUsbDevice::Send(uint32_t command,
372 uint32 arg0, 371 uint32_t arg0,
373 uint32 arg1, 372 uint32_t arg1,
374 const std::string& body) { 373 const std::string& body) {
375 scoped_ptr<AdbMessage> message(new AdbMessage(command, arg0, arg1, body)); 374 scoped_ptr<AdbMessage> message(new AdbMessage(command, arg0, arg1, body));
376 // Delay open request if not yet connected. 375 // Delay open request if not yet connected.
377 if (!is_connected_) { 376 if (!is_connected_) {
378 pending_messages_.push_back(message.release()); 377 pending_messages_.push_back(message.release());
379 return; 378 return;
380 } 379 }
381 Queue(message.Pass()); 380 Queue(message.Pass());
382 } 381 }
383 382
384 AndroidUsbDevice::~AndroidUsbDevice() { 383 AndroidUsbDevice::~AndroidUsbDevice() {
385 DCHECK(task_runner_->BelongsToCurrentThread()); 384 DCHECK(task_runner_->BelongsToCurrentThread());
386 Terminate(); 385 Terminate();
387 } 386 }
388 387
389 void AndroidUsbDevice::Queue(scoped_ptr<AdbMessage> message) { 388 void AndroidUsbDevice::Queue(scoped_ptr<AdbMessage> message) {
390 DCHECK(task_runner_->BelongsToCurrentThread()); 389 DCHECK(task_runner_->BelongsToCurrentThread());
391 390
392 // Queue header. 391 // Queue header.
393 std::vector<uint32> header; 392 std::vector<uint32_t> header;
394 header.push_back(message->command); 393 header.push_back(message->command);
395 header.push_back(message->arg0); 394 header.push_back(message->arg0);
396 header.push_back(message->arg1); 395 header.push_back(message->arg1);
397 bool append_zero = true; 396 bool append_zero = true;
398 if (message->body.empty()) 397 if (message->body.empty())
399 append_zero = false; 398 append_zero = false;
400 if (message->command == AdbMessage::kCommandAUTH && 399 if (message->command == AdbMessage::kCommandAUTH &&
401 message->arg0 == AdbMessage::kAuthSignature) 400 message->arg0 == AdbMessage::kAuthSignature)
402 append_zero = false; 401 append_zero = false;
403 if (message->command == AdbMessage::kCommandWRTE) 402 if (message->command == AdbMessage::kCommandWRTE)
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 base::Bind(&AndroidUsbDevice::ReadHeader, this)); 479 base::Bind(&AndroidUsbDevice::ReadHeader, this));
481 return; 480 return;
482 } 481 }
483 482
484 if (status != device::USB_TRANSFER_COMPLETED || result != kHeaderSize) { 483 if (status != device::USB_TRANSFER_COMPLETED || result != kHeaderSize) {
485 TransferError(status); 484 TransferError(status);
486 return; 485 return;
487 } 486 }
488 487
489 DumpMessage(false, buffer->data(), result); 488 DumpMessage(false, buffer->data(), result);
490 std::vector<uint32> header(6); 489 std::vector<uint32_t> header(6);
491 memcpy(&header[0], buffer->data(), result); 490 memcpy(&header[0], buffer->data(), result);
492 scoped_ptr<AdbMessage> message( 491 scoped_ptr<AdbMessage> message(
493 new AdbMessage(header[0], header[1], header[2], "")); 492 new AdbMessage(header[0], header[1], header[2], ""));
494 uint32 data_length = header[3]; 493 uint32_t data_length = header[3];
495 uint32 data_check = header[4]; 494 uint32_t data_check = header[4];
496 uint32 magic = header[5]; 495 uint32_t magic = header[5];
497 if ((message->command ^ 0xffffffff) != magic) { 496 if ((message->command ^ 0xffffffff) != magic) {
498 TransferError(device::USB_TRANSFER_ERROR); 497 TransferError(device::USB_TRANSFER_ERROR);
499 return; 498 return;
500 } 499 }
501 500
502 if (data_length == 0) { 501 if (data_length == 0) {
503 task_runner_->PostTask(FROM_HERE, 502 task_runner_->PostTask(FROM_HERE,
504 base::Bind(&AndroidUsbDevice::HandleIncoming, this, 503 base::Bind(&AndroidUsbDevice::HandleIncoming, this,
505 base::Passed(&message))); 504 base::Passed(&message)));
506 } else { 505 } else {
507 task_runner_->PostTask( 506 task_runner_->PostTask(
508 FROM_HERE, base::Bind(&AndroidUsbDevice::ReadBody, this, 507 FROM_HERE, base::Bind(&AndroidUsbDevice::ReadBody, this,
509 base::Passed(&message), data_length, data_check)); 508 base::Passed(&message), data_length, data_check));
510 } 509 }
511 } 510 }
512 511
513 void AndroidUsbDevice::ReadBody(scoped_ptr<AdbMessage> message, 512 void AndroidUsbDevice::ReadBody(scoped_ptr<AdbMessage> message,
514 uint32 data_length, 513 uint32_t data_length,
515 uint32 data_check) { 514 uint32_t data_check) {
516 DCHECK(task_runner_->BelongsToCurrentThread()); 515 DCHECK(task_runner_->BelongsToCurrentThread());
517 516
518 if (!usb_handle_.get()) { 517 if (!usb_handle_.get()) {
519 return; 518 return;
520 } 519 }
521 520
522 scoped_refptr<net::IOBuffer> buffer = 521 scoped_refptr<net::IOBuffer> buffer =
523 new net::IOBuffer(static_cast<size_t>(data_length)); 522 new net::IOBuffer(static_cast<size_t>(data_length));
524 usb_handle_->GenericTransfer( 523 usb_handle_->GenericTransfer(
525 device::USB_DIRECTION_INBOUND, inbound_address_, buffer, data_length, 524 device::USB_DIRECTION_INBOUND, inbound_address_, buffer, data_length,
526 kUsbTimeout, 525 kUsbTimeout,
527 base::Bind(&AndroidUsbDevice::ParseBody, weak_factory_.GetWeakPtr(), 526 base::Bind(&AndroidUsbDevice::ParseBody, weak_factory_.GetWeakPtr(),
528 base::Passed(&message), data_length, data_check)); 527 base::Passed(&message), data_length, data_check));
529 } 528 }
530 529
531 void AndroidUsbDevice::ParseBody(scoped_ptr<AdbMessage> message, 530 void AndroidUsbDevice::ParseBody(scoped_ptr<AdbMessage> message,
532 uint32 data_length, 531 uint32_t data_length,
533 uint32 data_check, 532 uint32_t data_check,
534 UsbTransferStatus status, 533 UsbTransferStatus status,
535 scoped_refptr<net::IOBuffer> buffer, 534 scoped_refptr<net::IOBuffer> buffer,
536 size_t result) { 535 size_t result) {
537 DCHECK(task_runner_->BelongsToCurrentThread()); 536 DCHECK(task_runner_->BelongsToCurrentThread());
538 537
539 if (status == device::USB_TRANSFER_TIMEOUT) { 538 if (status == device::USB_TRANSFER_TIMEOUT) {
540 task_runner_->PostTask( 539 task_runner_->PostTask(
541 FROM_HERE, base::Bind(&AndroidUsbDevice::ReadBody, this, 540 FROM_HERE, base::Bind(&AndroidUsbDevice::ReadBody, this,
542 base::Passed(&message), data_length, data_check)); 541 base::Passed(&message), data_length, data_check));
543 return; 542 return;
544 } 543 }
545 544
546 if (status != device::USB_TRANSFER_COMPLETED || 545 if (status != device::USB_TRANSFER_COMPLETED ||
547 static_cast<uint32>(result) != data_length) { 546 static_cast<uint32_t>(result) != data_length) {
548 TransferError(status); 547 TransferError(status);
549 return; 548 return;
550 } 549 }
551 550
552 DumpMessage(false, buffer->data(), data_length); 551 DumpMessage(false, buffer->data(), data_length);
553 message->body = std::string(buffer->data(), result); 552 message->body = std::string(buffer->data(), result);
554 if (Checksum(message->body) != data_check) { 553 if (Checksum(message->body) != data_check) {
555 TransferError(device::USB_TRANSFER_ERROR); 554 TransferError(device::USB_TRANSFER_ERROR);
556 return; 555 return;
557 } 556 }
558 557
559 task_runner_->PostTask(FROM_HERE, 558 task_runner_->PostTask(FROM_HERE,
560 base::Bind(&AndroidUsbDevice::HandleIncoming, this, 559 base::Bind(&AndroidUsbDevice::HandleIncoming, this,
561 base::Passed(&message))); 560 base::Passed(&message)));
562 } 561 }
563 562
564 void AndroidUsbDevice::HandleIncoming(scoped_ptr<AdbMessage> message) { 563 void AndroidUsbDevice::HandleIncoming(scoped_ptr<AdbMessage> message) {
565 DCHECK(task_runner_->BelongsToCurrentThread()); 564 DCHECK(task_runner_->BelongsToCurrentThread());
566 565
567 switch (message->command) { 566 switch (message->command) {
568 case AdbMessage::kCommandAUTH: 567 case AdbMessage::kCommandAUTH:
569 { 568 {
570 DCHECK_EQ(message->arg0, static_cast<uint32>(AdbMessage::kAuthToken)); 569 DCHECK_EQ(message->arg0, static_cast<uint32_t>(AdbMessage::kAuthToken));
571 if (signature_sent_) { 570 if (signature_sent_) {
572 Queue(make_scoped_ptr(new AdbMessage( 571 Queue(make_scoped_ptr(new AdbMessage(
573 AdbMessage::kCommandAUTH, 572 AdbMessage::kCommandAUTH,
574 AdbMessage::kAuthRSAPublicKey, 0, 573 AdbMessage::kAuthRSAPublicKey, 0,
575 AndroidRSAPublicKey(rsa_key_.get())))); 574 AndroidRSAPublicKey(rsa_key_.get()))));
576 } else { 575 } else {
577 signature_sent_ = true; 576 signature_sent_ = true;
578 std::string signature = AndroidRSASign(rsa_key_.get(), message->body); 577 std::string signature = AndroidRSASign(rsa_key_.get(), message->body);
579 if (!signature.empty()) { 578 if (!signature.empty()) {
580 Queue(make_scoped_ptr(new AdbMessage(AdbMessage::kCommandAUTH, 579 Queue(make_scoped_ptr(new AdbMessage(AdbMessage::kCommandAUTH,
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
654 it != sockets.end(); ++it) { 653 it != sockets.end(); ++it) {
655 it->second->Terminated(true); 654 it->second->Terminated(true);
656 } 655 }
657 DCHECK(sockets_.empty()); 656 DCHECK(sockets_.empty());
658 657
659 BrowserThread::PostTask( 658 BrowserThread::PostTask(
660 BrowserThread::UI, FROM_HERE, 659 BrowserThread::UI, FROM_HERE,
661 base::Bind(&ReleaseInterface, usb_handle, interface_id_)); 660 base::Bind(&ReleaseInterface, usb_handle, interface_id_));
662 } 661 }
663 662
664 void AndroidUsbDevice::SocketDeleted(uint32 socket_id) { 663 void AndroidUsbDevice::SocketDeleted(uint32_t socket_id) {
665 DCHECK(task_runner_->BelongsToCurrentThread()); 664 DCHECK(task_runner_->BelongsToCurrentThread());
666 665
667 sockets_.erase(socket_id); 666 sockets_.erase(socket_id);
668 } 667 }
OLDNEW
« no previous file with comments | « chrome/browser/devtools/device/usb/android_usb_device.h ('k') | chrome/browser/devtools/device/usb/android_usb_socket.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698