OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #ifndef DEVICE_BLUETOOTH_BLUETOOTH_SOCKET_WIN_H_ | 5 #ifndef DEVICE_BLUETOOTH_BLUETOOTH_SOCKET_WIN_H_ |
6 #define DEVICE_BLUETOOTH_BLUETOOTH_SOCKET_WIN_H_ | 6 #define DEVICE_BLUETOOTH_BLUETOOTH_SOCKET_WIN_H_ |
7 | 7 |
8 #include <WinSock2.h> | 8 #include <WinSock2.h> |
9 | 9 |
10 #include <string> | 10 #include <string> |
11 | 11 |
12 #include "base/memory/ref_counted.h" | 12 #include "base/memory/ref_counted.h" |
13 #include "device/bluetooth/bluetooth_service_record_win.h" | 13 #include "device/bluetooth/bluetooth_service_record_win.h" |
14 #include "device/bluetooth/bluetooth_socket.h" | 14 #include "device/bluetooth/bluetooth_socket.h" |
15 #include "device/bluetooth/bluetooth_socket_net.h" | 15 #include "device/bluetooth/bluetooth_socket_net.h" |
| 16 #include "device/bluetooth/bluetooth_uuid.h" |
16 #include "net/base/ip_endpoint.h" | 17 #include "net/base/ip_endpoint.h" |
17 #include "net/socket/tcp_socket.h" | 18 #include "net/socket/tcp_socket.h" |
18 | 19 |
19 namespace device { | 20 namespace device { |
20 | 21 |
21 class BluetoothServiceRecord; | 22 class BluetoothAdapter; |
| 23 class BluetoothDeviceWin; |
22 | 24 |
23 // The BluetoothSocketWin class implements BluetoothSocket for the Microsoft | 25 // The BluetoothSocketWin class implements BluetoothSocket for the Microsoft |
24 // Windows platform. | 26 // Windows platform. |
25 class BluetoothSocketWin : public BluetoothSocketNet { | 27 class BluetoothSocketWin : public BluetoothSocketNet { |
26 public: | 28 public: |
27 typedef base::Callback<void(scoped_refptr<BluetoothSocketWin>, | |
28 const net::IPEndPoint&)> OnNewConnectionCallback; | |
29 | |
30 static scoped_refptr<BluetoothSocketWin> CreateBluetoothSocket( | 29 static scoped_refptr<BluetoothSocketWin> CreateBluetoothSocket( |
31 scoped_refptr<base::SequencedTaskRunner> ui_task_runner, | 30 scoped_refptr<base::SequencedTaskRunner> ui_task_runner, |
32 scoped_refptr<BluetoothSocketThread> socket_thread, | 31 scoped_refptr<BluetoothSocketThread> socket_thread, |
33 net::NetLog* net_log, | 32 net::NetLog* net_log, |
34 const net::NetLog::Source& source); | 33 const net::NetLog::Source& source); |
35 | 34 |
36 // Starts a service with the given uuid, name and rfcomm_channel. | 35 // Connect to the peer device and calls |success_callback| when the |
37 // |success_callback| is invoked when the underlying socket is created | |
38 // and the service is published successfully. Otherwise, |error_callback| is | |
39 // called with an error message. |new_connection_callback| is invoked when | |
40 // an incoming connection is accepted by the underlying socket. | |
41 void StartService( | |
42 const BluetoothUUID& uuid, | |
43 const std::string& name, | |
44 int rfcomm_channel, | |
45 const base::Closure& success_callback, | |
46 const ErrorCompletionCallback& error_callback, | |
47 const OnNewConnectionCallback& new_connection_callback); | |
48 | |
49 // connection has been established successfully. If an error occurs, calls | 36 // connection has been established successfully. If an error occurs, calls |
50 // |error_callback| with a system error message. | 37 // |error_callback| with a system error message. |
51 void Connect(const BluetoothServiceRecord& service_record, | 38 void Connect(const BluetoothDeviceWin* device, |
| 39 const BluetoothUUID& uuid, |
52 const base::Closure& success_callback, | 40 const base::Closure& success_callback, |
53 const ErrorCompletionCallback& error_callback); | 41 const ErrorCompletionCallback& error_callback); |
54 | 42 |
| 43 // Listens using this socket using an RFCOMM service published as UUID |uuid| |
| 44 // with Channel |channel|. |success_callback| will be called if the service |
| 45 // is successfully registered, |error_callback| on failure with a message |
| 46 // explaining the cause. |
| 47 void Listen(scoped_refptr<BluetoothAdapter> adapter, |
| 48 const BluetoothUUID& uuid, |
| 49 int rfcomm_channel, |
| 50 const base::Closure& success_callback, |
| 51 const ErrorCompletionCallback& error_callback); |
| 52 |
55 // BluetoothSocketNet: | 53 // BluetoothSocketNet: |
56 void ResetData(); | 54 void ResetData(); |
57 | 55 |
58 // BluetoothSocket: | 56 // BluetoothSocket: |
59 virtual void Accept(const AcceptCompletionCallback& success_callback, | 57 virtual void Accept(const AcceptCompletionCallback& success_callback, |
60 const ErrorCompletionCallback& error_callback) OVERRIDE; | 58 const ErrorCompletionCallback& error_callback) OVERRIDE; |
61 | 59 |
62 | |
63 protected: | 60 protected: |
64 virtual ~BluetoothSocketWin(); | 61 virtual ~BluetoothSocketWin(); |
65 | 62 |
66 private: | 63 private: |
67 struct ServiceRegData; | 64 struct ServiceRegData; |
68 | 65 |
69 BluetoothSocketWin(scoped_refptr<base::SequencedTaskRunner> ui_task_runner, | 66 BluetoothSocketWin(scoped_refptr<base::SequencedTaskRunner> ui_task_runner, |
70 scoped_refptr<BluetoothSocketThread> socket_thread, | 67 scoped_refptr<BluetoothSocketThread> socket_thread, |
71 net::NetLog* net_log, | 68 net::NetLog* net_log, |
72 const net::NetLog::Source& source); | 69 const net::NetLog::Source& source); |
73 | 70 |
74 | 71 |
75 void DoConnect(const base::Closure& success_callback, | 72 void DoConnect(const base::Closure& success_callback, |
76 const ErrorCompletionCallback& error_callback); | 73 const ErrorCompletionCallback& error_callback); |
77 void DoStartService(const BluetoothUUID& uuid, | 74 void DoListen(const BluetoothUUID& uuid, |
78 const std::string& name, | |
79 int rfcomm_channel, | 75 int rfcomm_channel, |
80 const base::Closure& success_callback, | 76 const base::Closure& success_callback, |
81 const ErrorCompletionCallback& error_callback, | 77 const ErrorCompletionCallback& error_callback); |
82 const OnNewConnectionCallback& new_connection_callback); | 78 void DoAccept(const AcceptCompletionCallback& success_callback, |
83 void DoAccept(); | 79 const ErrorCompletionCallback& error_callback); |
84 void OnAcceptOnSocketThread(int accept_result); | 80 void OnAcceptOnSocketThread(const AcceptCompletionCallback& success_callback, |
| 81 const ErrorCompletionCallback& error_callback, |
| 82 int accept_result); |
85 void OnAcceptOnUI(scoped_ptr<net::TCPSocket> accept_socket, | 83 void OnAcceptOnUI(scoped_ptr<net::TCPSocket> accept_socket, |
86 const net::IPEndPoint& peer_address); | 84 const net::IPEndPoint& peer_address, |
| 85 const AcceptCompletionCallback& success_callback, |
| 86 const ErrorCompletionCallback& error_callback); |
87 | 87 |
88 std::string device_address_; | 88 std::string device_address_; |
89 bool supports_rfcomm_; | 89 bool supports_rfcomm_; |
90 uint8 rfcomm_channel_; | 90 uint8 rfcomm_channel_; |
91 BTH_ADDR bth_addr_; | 91 BTH_ADDR bth_addr_; |
92 | 92 |
| 93 // Data members below are only used when listening. |
| 94 scoped_refptr<device::BluetoothAdapter> adapter_; |
93 scoped_ptr<ServiceRegData> service_reg_data_; | 95 scoped_ptr<ServiceRegData> service_reg_data_; |
94 scoped_ptr<net::TCPSocket> accept_socket_; | 96 scoped_ptr<net::TCPSocket> accept_socket_; |
95 net::IPEndPoint accept_address_; | 97 net::IPEndPoint accept_address_; |
96 OnNewConnectionCallback on_new_connection_callback_; | |
97 | 98 |
98 DISALLOW_COPY_AND_ASSIGN(BluetoothSocketWin); | 99 DISALLOW_COPY_AND_ASSIGN(BluetoothSocketWin); |
99 }; | 100 }; |
100 | 101 |
101 } // namespace device | 102 } // namespace device |
102 | 103 |
103 #endif // DEVICE_BLUETOOTH_BLUETOOTH_SOCKET_WIN_H_ | 104 #endif // DEVICE_BLUETOOTH_BLUETOOTH_SOCKET_WIN_H_ |
OLD | NEW |