Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / device / bluetooth / bluetooth_socket.h
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
3 // found in the LICENSE file.
4
5 #ifndef DEVICE_BLUETOOTH_BLUETOOTH_SOCKET_H_
6 #define DEVICE_BLUETOOTH_BLUETOOTH_SOCKET_H_
7
8 #include <string>
9
10 #include "base/callback.h"
11 #include "base/memory/ref_counted.h"
12
13 namespace net {
14 class IOBuffer;
15 }  // namespace net
16
17 namespace device {
18
19 // BluetoothSocket represents a socket to a specific service on a
20 // BluetoothDevice.  BluetoothSocket objects are ref counted and may outlive
21 // both the BluetoothDevice and BluetoothAdapter that were involved in their
22 // creation.  In terms of threading, platform specific implementations may
23 // differ slightly, but platform independent consumers must guarantee calling
24 // various instance methods on the same thread as the thread used at
25 // construction time -- platform specific implementation are resonsible for
26 // marshalling calls to a different thread if required.
27 class BluetoothSocket : public base::RefCountedThreadSafe<BluetoothSocket> {
28  public:
29   enum ErrorReason { kSystemError, kIOPending, kDisconnected };
30
31   typedef base::Callback<void(int)> SendCompletionCallback;
32   typedef base::Callback<void(int, scoped_refptr<net::IOBuffer> io_buffer)>
33       ReceiveCompletionCallback;
34   typedef base::Callback<void(const std::string& error_message)>
35       ErrorCompletionCallback;
36   typedef base::Callback<void(ErrorReason, const std::string& error_message)>
37       ReceiveErrorCompletionCallback;
38
39   // Destroys resources associated with the socket. After calling this method,
40   // it is illegal to call any method on this socket instance (except for the
41   // desctrutor via Release).
42   virtual void Close() = 0;
43
44   // Gracefully disconnects the socket and calls |callback| upon completion.
45   // There is no failure case, as this is a best effort operation.
46   virtual void Disconnect(const base::Closure& success_callback) = 0;
47
48   // Receives data from the socket and calls |success_callback| when data is
49   // available. |buffer_size| specifies the maximum number of bytes that can be
50   // received. If an error occurs, calls |error_callback| with a reason and an
51   // error message.
52   virtual void Receive(
53       int buffer_size,
54       const ReceiveCompletionCallback& success_callback,
55       const ReceiveErrorCompletionCallback& error_callback) = 0;
56
57   // Sends |buffer| to the socket and calls |success_callback| when data has
58   // been successfully sent. |buffer_size| is the number of bytes contained in
59   // |buffer|. If an error occurs, calls |error_callback| with an error message.
60   virtual void Send(scoped_refptr<net::IOBuffer> buffer,
61                     int buffer_size,
62                     const SendCompletionCallback& success_callback,
63                     const ErrorCompletionCallback& error_callback) = 0;
64
65  protected:
66   friend class base::RefCountedThreadSafe<BluetoothSocket>;
67   virtual ~BluetoothSocket();
68 };
69
70 }  // namespace device
71
72 #endif  // DEVICE_BLUETOOTH_BLUETOOTH_SOCKET_H_