Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2594)

Unified Diff: device/bluetooth/bluetooth_socket_experimental_chromeos.cc

Issue 14487002: Bluetooth: Profile support for Chrome OS (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: device/bluetooth/bluetooth_socket_experimental_chromeos.cc
diff --git a/device/bluetooth/bluetooth_socket_experimental_chromeos.cc b/device/bluetooth/bluetooth_socket_experimental_chromeos.cc
new file mode 100644
index 0000000000000000000000000000000000000000..bc59db7a71f83672503a44f0dc96b81acfb79484
--- /dev/null
+++ b/device/bluetooth/bluetooth_socket_experimental_chromeos.cc
@@ -0,0 +1,77 @@
+// Copyright (c) 2013 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 "device/bluetooth/bluetooth_socket_experimental_chromeos.h"
+
+#include <errno.h>
+#include <unistd.h>
+
+#include <string>
+
+#include "base/logging.h"
+#include "base/memory/ref_counted.h"
+#include "base/safe_strerror_posix.h"
+#include "dbus/file_descriptor.h"
+#include "device/bluetooth/bluetooth_socket.h"
+#include "net/base/io_buffer.h"
+
+namespace chromeos {
+
+BluetoothSocketExperimentalChromeOS::BluetoothSocketExperimentalChromeOS(
+ int fd)
+ : fd_(fd) {
+}
+
+BluetoothSocketExperimentalChromeOS::~BluetoothSocketExperimentalChromeOS() {
+ close(fd_);
+}
+
+bool BluetoothSocketExperimentalChromeOS::Receive(
+ net::GrowableIOBuffer *buffer) {
+ buffer->SetCapacity(1024);
+ ssize_t bytes_read;
+ do {
+ if (buffer->RemainingCapacity() == 0)
+ buffer->SetCapacity(buffer->capacity() * 2);
+ bytes_read = read(fd_, buffer, buffer->RemainingCapacity());
+ if (bytes_read > 0)
+ buffer->set_offset(buffer->offset() + bytes_read);
+ } while (bytes_read > 0);
+
+ if (bytes_read < 0 && errno != EAGAIN && errno != EWOULDBLOCK) {
+ error_message_ = safe_strerror(errno);
+ return false;
+ }
+ return true;
+}
+
+bool BluetoothSocketExperimentalChromeOS::Send(
+ net::DrainableIOBuffer *buffer) {
+ ssize_t bytes_written;
+ do {
+ bytes_written = write(fd_, buffer, buffer->BytesRemaining());
+ if (bytes_written > 0)
+ buffer->DidConsume(bytes_written);
+ } while (buffer->BytesRemaining() > 0 && bytes_written > 0);
+
+ if (bytes_written < 0 && errno != EAGAIN && errno != EWOULDBLOCK) {
+ error_message_ = safe_strerror(errno);
+ return false;
+ }
+ return true;
+}
+
+std::string BluetoothSocketExperimentalChromeOS::GetLastErrorMessage() const {
+ return error_message_;
+}
+
+// static
+scoped_refptr<device::BluetoothSocket>
+BluetoothSocketExperimentalChromeOS::Create(dbus::FileDescriptor* fd) {
+ BluetoothSocketExperimentalChromeOS* bluetooth_socket =
+ new BluetoothSocketExperimentalChromeOS(fd->TakeValue());;
+ return scoped_refptr<BluetoothSocketExperimentalChromeOS>(bluetooth_socket);
+}
+
+} // namespace chromeos

Powered by Google App Engine
This is Rietveld 408576698