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

Unified Diff: chrome/browser/renderer_host/socket_stream_dispatcher_host.cc

Issue 202058: WebSocket implementation in Chromium. (Closed)
Patch Set: update Created 11 years, 2 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: chrome/browser/renderer_host/socket_stream_dispatcher_host.cc
diff --git a/chrome/browser/renderer_host/socket_stream_dispatcher_host.cc b/chrome/browser/renderer_host/socket_stream_dispatcher_host.cc
new file mode 100644
index 0000000000000000000000000000000000000000..2851fe6d88933a80e29d5788a05fc0853d563c90
--- /dev/null
+++ b/chrome/browser/renderer_host/socket_stream_dispatcher_host.cc
@@ -0,0 +1,143 @@
+// Copyright (c) 2009 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/renderer_host/socket_stream_dispatcher_host.h"
+
+#include "base/logging.h"
+#include "chrome/browser/renderer_host/socket_stream_host.h"
+#include "chrome/common/render_messages.h"
+#include "chrome/common/net/socket_stream.h"
+#include "ipc/ipc_message.h"
+
+SocketStreamDispatcherHost::SocketStreamDispatcherHost()
+ : sender_(NULL) {
+}
+
+SocketStreamDispatcherHost::~SocketStreamDispatcherHost() {
+ for (IDMap<SocketStreamHost>::const_iterator iter(&hosts_);
+ !iter.IsAtEnd();
+ iter.Advance()) {
+ int socket_id = iter.GetCurrentKey();
+ hosts_.Remove(socket_id);
+ }
+}
+
+void SocketStreamDispatcherHost::Initialize(
+ IPC::Message::Sender* sender, int process_id) {
+ LOG(INFO) << "Initialize: SocketStreamDispatcherHost process_id="
+ << process_id_;
+ DCHECK(sender);
+ sender_ = sender;
+ process_id_ = process_id;
+}
+
+bool SocketStreamDispatcherHost::OnMessageReceived(const IPC::Message& msg,
+ bool* msg_ok) {
+ DCHECK(sender_);
+ *msg_ok = true;
+ bool handled = true;
+ IPC_BEGIN_MESSAGE_MAP_EX(SocketStreamDispatcherHost, msg, *msg_ok)
+ IPC_MESSAGE_HANDLER(ViewHostMsg_SocketStream_Connect, OnConnect)
+ IPC_MESSAGE_HANDLER(ViewHostMsg_SocketStream_SendData, OnSendData)
+ IPC_MESSAGE_HANDLER(ViewHostMsg_SocketStream_Close, OnCloseReq)
+ IPC_MESSAGE_UNHANDLED(handled = false)
+ IPC_END_MESSAGE_MAP_EX()
+ return handled;
+}
+
+void SocketStreamDispatcherHost::OnConnected(net::SocketStream* socket,
+ int max_pending_send_allowed) {
+ int socket_id = SocketStreamHost::SocketIdFromSocketStream(socket);
+ LOG(INFO) << "SocketStreamDispatcherHost::OnConnected socket_id="
+ << socket_id
+ << " max_pending_send_allowed=" << max_pending_send_allowed;
+ if (socket_id == chrome_common_net::kNoSocketId)
+ return;
+ if (!sender_->Send(new ViewMsg_SocketStream_Connected(
+ socket_id, max_pending_send_allowed))) {
+ LOG(ERROR) << "ViewMsg_SocketStream_Connected failed.";
+ DeleteSocketStreamHost(socket_id);
+ }
+}
+
+void SocketStreamDispatcherHost::OnSentData(net::SocketStream* socket,
+ int amount_sent) {
+ int socket_id = SocketStreamHost::SocketIdFromSocketStream(socket);
+ LOG(INFO) << "SocketStreamDispatcherHost::OnDataSent socket_id="
+ << socket_id
+ << " amount_sent=" << amount_sent;
+ if (socket_id == chrome_common_net::kNoSocketId)
+ return;
+ if (!sender_->Send(
+ new ViewMsg_SocketStream_SentData(socket_id, amount_sent))) {
+ LOG(ERROR) << "ViewMsg_SocketStream_DataSent failed.";
+ DeleteSocketStreamHost(socket_id);
+ }
+}
+
+void SocketStreamDispatcherHost::OnReceivedData(
+ net::SocketStream* socket, const char* data, int len) {
+ int socket_id = SocketStreamHost::SocketIdFromSocketStream(socket);
+ LOG(INFO) << "SocketStreamDispatcherHost::OnReceiveData socket_id="
+ << socket_id;
+ if (socket_id == chrome_common_net::kNoSocketId)
+ return;
+ if (!sender_->Send(new ViewMsg_SocketStream_ReceivedData(
+ socket_id, std::vector<char>(data, data + len)))) {
+ LOG(ERROR) << "ViewMsg_SocketStream_ReceivedData failed.";
+ DeleteSocketStreamHost(socket_id);
+ }
+}
+
+void SocketStreamDispatcherHost::OnClose(net::SocketStream* socket) {
+ int socket_id = SocketStreamHost::SocketIdFromSocketStream(socket);
+ LOG(INFO) << "SocketStreamDispatcherHost::OnClosed socket_id="
+ << socket_id;
+ if (socket_id == chrome_common_net::kNoSocketId)
+ return;
+ DeleteSocketStreamHost(socket_id);
+}
+
+void SocketStreamDispatcherHost::OnConnect(const GURL& url, int socket_id) {
+ LOG(INFO) << "SocketStreamDispatcherHost::OnConnect url=" << url
+ << " socket_id=" << socket_id;
+ SocketStreamHost* socket_stream_host = new SocketStreamHost(this, socket_id);
+ if (hosts_.Lookup(socket_id)) {
+ LOG(ERROR) << "socket_id=" << socket_id << " already registered.";
+ return;
+ }
+ hosts_.AddWithID(socket_stream_host, socket_id);
+ socket_stream_host->Connect(url);
+ LOG(INFO) << "SocketStreamDispatcherHost::OnConnect -> " << socket_id;
+}
+
+void SocketStreamDispatcherHost::OnSendData(
+ int socket_id, const std::vector<char>& data) {
+ LOG(INFO) << "SocketStreamDispatcherHost::OnSendData socket_id=" << socket_id;
+ SocketStreamHost* socket_stream_host = hosts_.Lookup(socket_id);
+ if (!socket_stream_host)
+ return;
+ if (!socket_stream_host->SendData(data)) {
+ // Cannot accept more data to send.
+ socket_stream_host->Close();
+ }
+}
+
+void SocketStreamDispatcherHost::OnCloseReq(int socket_id) {
+ LOG(INFO) << "SocketStreamDispatcherHost::OnClose socket_id=" << socket_id;
+ SocketStreamHost* socket_stream_host = hosts_.Lookup(socket_id);
+ if (!socket_stream_host)
+ return;
+ socket_stream_host->Close();
+}
+
+void SocketStreamDispatcherHost::DeleteSocketStreamHost(int socket_id) {
+ SocketStreamHost* socket_stream_host = hosts_.Lookup(socket_id);
+ DCHECK(socket_stream_host);
+ delete socket_stream_host;
+ hosts_.Remove(socket_id);
+ if (!sender_->Send(new ViewMsg_SocketStream_Closed(socket_id))) {
+ LOG(ERROR) << "ViewMsg_SocketStream_Closed failed.";
+ }
+}
« no previous file with comments | « chrome/browser/renderer_host/socket_stream_dispatcher_host.h ('k') | chrome/browser/renderer_host/socket_stream_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698