1010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// found in the LICENSE file. 4010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 5010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef CHROME_BROWSER_DEVTOOLS_DEVICE_USB_ANDROID_USB_SOCKET_H_ 6010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define CHROME_BROWSER_DEVTOOLS_DEVICE_USB_ANDROID_USB_SOCKET_H_ 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <deque> 9010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 10010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/memory/ref_counted.h" 11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/threading/non_thread_safe.h" 12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/devtools/device/usb/android_usb_device.h" 13010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "net/base/ip_endpoint.h" 14010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "net/base/net_errors.h" 15010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "net/socket/stream_socket.h" 16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace base { 18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class MessageLoop; 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass AdbMessage; 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class AndroidUsbSocket : public net::StreamSocket, 24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) public base::NonThreadSafe { 25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) public: 26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) AndroidUsbSocket(scoped_refptr<AndroidUsbDevice> device, 27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) uint32 socket_id, 28010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const std::string& command, 29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::Callback<void(uint32)> delete_callback); 30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual ~AndroidUsbSocket(); 31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) void HandleIncoming(scoped_refptr<AdbMessage> message); 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void Terminated(bool closed_by_device); 3503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 3603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // net::StreamSocket implementation. 3703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) virtual int Read(net::IOBuffer* buf, int buf_len, 38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const net::CompletionCallback& callback) OVERRIDE; 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual int Write(net::IOBuffer* buf, int buf_len, 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const net::CompletionCallback& callback) OVERRIDE; 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual int SetReceiveBufferSize(int32 size) OVERRIDE; 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual int SetSendBufferSize(int32 size) OVERRIDE; 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual int Connect(const net::CompletionCallback& callback) OVERRIDE; 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void Disconnect() OVERRIDE; 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual bool IsConnected() const OVERRIDE; 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual bool IsConnectedAndIdle() const OVERRIDE; 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual int GetPeerAddress(net::IPEndPoint* address) const OVERRIDE; 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual int GetLocalAddress(net::IPEndPoint* address) const OVERRIDE; 49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual const net::BoundNetLog& NetLog() const OVERRIDE; 50010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void SetSubresourceSpeculation() OVERRIDE; 51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void SetOmniboxSpeculation() OVERRIDE; 52010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual bool WasEverUsed() const OVERRIDE; 53010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual bool UsingTCPFastOpen() const OVERRIDE; 54010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual bool WasNpnNegotiated() const OVERRIDE; 55010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual net::NextProto GetNegotiatedProtocol() const OVERRIDE; 56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual bool GetSSLInfo(net::SSLInfo* ssl_info) OVERRIDE; 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci class IORequest { 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci IORequest(net::IOBuffer* buffer, 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int length, 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const net::CompletionCallback& callback); 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ~IORequest(); 65010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_refptr<net::IOBuffer> buffer; 67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) int length; 68f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) net::CompletionCallback callback; 6903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) }; 7003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 7103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) void RespondToReaders(bool diconnect); 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void RespondToWriters(); 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<AndroidUsbDevice> device_; 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string command_; 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Callback<void(uint32)> delete_callback_; 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci uint32 local_id_; 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci uint32 remote_id_; 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::BoundNetLog net_log_; 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool is_connected_; 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string read_buffer_; 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::CompletionCallback connect_callback_; 83010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::deque<IORequest> read_requests_; 84010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) std::deque<IORequest> write_requests_; 85010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 86010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AndroidUsbSocket); 87010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}; 88010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 89010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif // CHROME_BROWSER_DEVTOOLS_DEVICE_USB_ANDROID_USB_SOCKET_H_ 90010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)