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

Unified Diff: device/bluetooth/bluetooth_socket_win.cc

Issue 236203018: win: Implement Bluetooth server. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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_win.cc
diff --git a/device/bluetooth/bluetooth_socket_win.cc b/device/bluetooth/bluetooth_socket_win.cc
index 9b1e953fb6ddb709705726698625c3232bccd08a..41bae5a3f20450da8bcae813fdaa0a1dcf289282 100644
--- a/device/bluetooth/bluetooth_socket_win.cc
+++ b/device/bluetooth/bluetooth_socket_win.cc
@@ -71,6 +71,22 @@ scoped_refptr<BluetoothSocketWin> BluetoothSocketWin::CreateBluetoothSocket(
return result;
}
+// static
+scoped_refptr<BluetoothSocketWin> BluetoothSocketWin::CreateBluetoothSocket(
+ scoped_ptr<net::TCPSocket> existing,
+ scoped_refptr<base::SequencedTaskRunner> ui_task_runner,
+ scoped_refptr<BluetoothSocketThreadWin> socket_thread,
+ net::NetLog* net_log,
+ const net::NetLog::Source& source) {
+ DCHECK(ui_task_runner->RunsTasksOnCurrentThread());
+
+ scoped_refptr<BluetoothSocketWin> result(
+ new BluetoothSocketWin(ui_task_runner, socket_thread, net_log, source));
+ result->tcp_socket_ = existing.Pass();
+
+ return result;
+}
+
BluetoothSocketWin::BluetoothSocketWin(
scoped_refptr<base::SequencedTaskRunner> ui_task_runner,
scoped_refptr<BluetoothSocketThreadWin> socket_thread,
@@ -159,6 +175,15 @@ void BluetoothSocketWin::Send(scoped_refptr<net::IOBuffer> buffer,
&BluetoothSocketWin::PostErrorCompletion, this, error_callback)));
}
+void BluetoothSocketWin::Accept(
+ const BluetoothSocketWin::OnAcceptCallback& on_accept_callback) {
+ DCHECK(on_accept_callback_.is_null());
+ on_accept_callback_ = on_accept_callback;
+ socket_thread_->task_runner()->PostTask(
+ FROM_HERE,
+ base::Bind(&BluetoothSocketWin::DoAccept, this));
+}
+
void BluetoothSocketWin::DoClose() {
DCHECK(socket_thread_->task_runner()->RunsTasksOnCurrentThread());
base::ThreadRestrictions::AssertIOAllowed();
@@ -399,4 +424,45 @@ void BluetoothSocketWin::PostSendCompletion(
ui_task_runner_->PostTask(FROM_HERE, base::Bind(callback, bytes_written));
}
+void BluetoothSocketWin::DoAccept() {
+ DCHECK(socket_thread_->task_runner()->RunsTasksOnCurrentThread());
+ int result = tcp_socket_->Accept(
+ &accept_socket_,
+ &accept_address_,
+ base::Bind(&BluetoothSocketWin::OnAcceptOnSocketThread, this));
+ if (result != net::OK && result != net::ERR_IO_PENDING)
+ LOG(WARNING) << "Failed to accept, net err=" << result;
+}
+
+void BluetoothSocketWin::OnAcceptOnSocketThread(int accept_result) {
+ DCHECK(socket_thread_->task_runner()->RunsTasksOnCurrentThread());
+ if (accept_result != net::OK) {
+ LOG(WARNING) << "OnAccept error, net err=" << accept_result;
+ return;
+ }
+
+ ui_task_runner_->PostTask(
+ FROM_HERE,
+ base::Bind(&BluetoothSocketWin::OnAcceptOnUI,
+ this,
+ base::Passed(&accept_socket_),
+ accept_address_));
+ DoAccept();
+}
+
+void BluetoothSocketWin::OnAcceptOnUI(
+ scoped_ptr<net::TCPSocket> accept_socket,
+ const net::IPEndPoint& peer_address) {
+ DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
+
+ on_accept_callback_.Run(
+ CreateBluetoothSocket(
+ accept_socket.Pass(),
+ ui_task_runner_,
+ socket_thread_,
+ net_log_,
+ source_),
+ peer_address);
+}
+
} // namespace device

Powered by Google App Engine
This is Rietveld 408576698