• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 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 DEVICE_BLUETOOTH_BLUETOOTH_SOCKET_CHROMEOS_H_
6 #define DEVICE_BLUETOOTH_BLUETOOTH_SOCKET_CHROMEOS_H_
7 
8 #include <string>
9 
10 #include "base/basictypes.h"
11 #include "base/memory/ref_counted.h"
12 #include "chromeos/chromeos_export.h"
13 #include "device/bluetooth/bluetooth_socket.h"
14 
15 namespace dbus {
16 
17 class FileDescriptor;
18 
19 }  // namespace dbus
20 
21 namespace net {
22 
23 class DrainableIOBuffer;
24 class GrowableIOBuffer;
25 
26 }  // namespace net
27 
28 namespace chromeos {
29 
30 // The BluetoothSocketChromeOS class implements BluetoothSocket for the
31 // Chrome OS platform.
32 class CHROMEOS_EXPORT BluetoothSocketChromeOS
33     : public device::BluetoothSocket {
34  public:
35   // BluetoothSocket override.
36   virtual bool Receive(net::GrowableIOBuffer* buffer) OVERRIDE;
37   virtual bool Send(net::DrainableIOBuffer* buffer) OVERRIDE;
38   virtual std::string GetLastErrorMessage() const OVERRIDE;
39 
40   // Create an instance of a BluetoothSocket from the passed file descriptor
41   // received over D-Bus in |fd|, the descriptor will be taken from that object
42   // and ownership passed to the returned object.
43   static scoped_refptr<device::BluetoothSocket> Create(
44       dbus::FileDescriptor* fd);
45 
46  protected:
47   virtual ~BluetoothSocketChromeOS();
48 
49  private:
50   BluetoothSocketChromeOS(int fd);
51 
52   // The different socket types have different reading patterns; l2cap sockets
53   // have to be read with boundaries between datagrams preserved while rfcomm
54   // sockets do not.
55   enum SocketType {
56     L2CAP,
57     RFCOMM
58   };
59 
60   // File descriptor and socket type of the socket.
61   const int fd_;
62   SocketType socket_type_;
63 
64   // Last error message, set during Receive() and Send() and retrieved using
65   // GetLastErrorMessage().
66   std::string error_message_;
67 
68   DISALLOW_COPY_AND_ASSIGN(BluetoothSocketChromeOS);
69 };
70 
71 }  // namespace chromeos
72 
73 #endif  // DEVICE_BLUETOOTH_BLUETOOTH_SOCKET_CHROMEOS_H_
74