Chromium Code Reviews| Index: chrome/browser/chromeos/bluetooth/bluetooth_socket.cc |
| diff --git a/chrome/browser/chromeos/bluetooth/bluetooth_socket.cc b/chrome/browser/chromeos/bluetooth/bluetooth_socket.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..7a5cc56baab856851ca3dc87657469176a34e4be |
| --- /dev/null |
| +++ b/chrome/browser/chromeos/bluetooth/bluetooth_socket.cc |
| @@ -0,0 +1,57 @@ |
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "chrome/browser/chromeos/bluetooth/bluetooth_socket.h" |
| + |
| +#include <vector> |
| + |
| +#include <bluetooth/bluetooth.h> |
| +#include <bluetooth/rfcomm.h> |
| +#include <errno.h> |
| +#include <sys/socket.h> |
| +#include <sys/types.h> |
| + |
| +#include "chrome/browser/chromeos/bluetooth/bluetooth_service_record.h" |
| +#include "chrome/browser/chromeos/bluetooth/bluetooth_utils.h" |
| + |
| +namespace chromeos { |
| + |
| +// static |
|
keybuk
2012/04/19 23:30:11
usually these go at the end of the file rather tha
bryeung
2012/04/20 00:17:56
Done.
|
| +scoped_refptr<BluetoothSocket> BluetoothSocket::CreateBluetoothSocket( |
| + const BluetoothServiceRecord& service_record) { |
| + BluetoothSocket* bluetooth_socket = NULL; |
| + if (service_record.SupportsRfcomm()) { |
| + int socket_fd = socket( |
| + AF_BLUETOOTH, SOCK_STREAM | SOCK_NONBLOCK, BTPROTO_RFCOMM); |
| + struct sockaddr_rc socket_address = { 0 }; |
| + socket_address.rc_family = AF_BLUETOOTH; |
| + socket_address.rc_channel = service_record.rfcomm_channel(); |
| + bdaddr_t bluetooth_address; |
| + bluetooth_utils::str2ba(service_record.address(), &bluetooth_address); |
| + |
| + int status = connect(socket_fd, (struct sockaddr *)&socket_address, |
| + sizeof(socket_address)); |
| + if (status == 0 || errno == EINPROGRESS) |
| + bluetooth_socket = new BluetoothSocket(service_record.address(), |
| + socket_fd); |
| + else |
| + close(socket_fd); |
| + } else { |
| + // TODO(bryeung): add support for L2CAP sockets as well. |
| + return NULL; |
| + } |
| + |
| + return scoped_refptr<BluetoothSocket>(bluetooth_socket); |
| +} |
| + |
| +BluetoothSocket::BluetoothSocket(const std::string& address, int fd) |
| + : address_(address), |
| + fd_(fd) { |
| +} |
| + |
| +BluetoothSocket::~BluetoothSocket() { |
| + close(fd_); |
| +} |
| + |
| +} // namespace chromeos |