1// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_TEST_CHROMEDRIVER_NET_ADB_CLIENT_SOCKET_H_
6#define CHROME_TEST_CHROMEDRIVER_NET_ADB_CLIENT_SOCKET_H_
7
8#include "base/callback.h"
9#include "net/base/io_buffer.h"
10#include "net/socket/stream_socket.h"
11
12class AdbClientSocket {
13 public:
14  typedef base::Callback<void(int, const std::string&)> CommandCallback;
15  typedef base::Callback<void(int result,
16                              net::StreamSocket*)> SocketCallback;
17
18  static void AdbQuery(int port,
19                       const std::string& query,
20                       const CommandCallback& callback);
21
22  static void TransportQuery(int port,
23                             const std::string& serial,
24                             const std::string& socket_name,
25                             const SocketCallback& callback);
26
27  static void HttpQuery(int port,
28                        const std::string& serial,
29                        const std::string& socket_name,
30                        const std::string& request,
31                        const CommandCallback& callback);
32
33  static void HttpQuery(int port,
34                        const std::string& serial,
35                        const std::string& socket_name,
36                        const std::string& request,
37                        const SocketCallback& callback);
38
39  explicit AdbClientSocket(int port);
40  ~AdbClientSocket();
41
42 protected:
43  void Connect(const net::CompletionCallback& callback);
44
45  void SendCommand(const std::string& command,
46                   bool is_void,
47                   const CommandCallback& callback);
48
49  scoped_ptr<net::StreamSocket> socket_;
50
51 private:
52  void ReadResponse(const CommandCallback& callback, bool is_void, int result);
53
54  void OnResponseHeader(const CommandCallback& callback,
55                        bool is_void,
56                        scoped_refptr<net::IOBuffer> response_buffer,
57                        int result);
58
59  void OnResponseData(const CommandCallback& callback,
60                      const std::string& response,
61                      scoped_refptr<net::IOBuffer> response_buffer,
62                      int bytes_left,
63                      int result);
64
65  std::string host_;
66  int port_;
67
68  DISALLOW_COPY_AND_ASSIGN(AdbClientSocket);
69};
70
71#endif  // CHROME_TEST_CHROMEDRIVER_NET_ADB_CLIENT_SOCKET_H_
72