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

Side by Side 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2009 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 #include "chrome/browser/renderer_host/socket_stream_dispatcher_host.h"
6
7 #include "base/logging.h"
8 #include "chrome/browser/renderer_host/socket_stream_host.h"
9 #include "chrome/common/render_messages.h"
10 #include "chrome/common/net/socket_stream.h"
11 #include "ipc/ipc_message.h"
12
13 SocketStreamDispatcherHost::SocketStreamDispatcherHost()
14 : sender_(NULL) {
15 }
16
17 SocketStreamDispatcherHost::~SocketStreamDispatcherHost() {
18 for (IDMap<SocketStreamHost>::const_iterator iter(&hosts_);
19 !iter.IsAtEnd();
20 iter.Advance()) {
21 int socket_id = iter.GetCurrentKey();
22 hosts_.Remove(socket_id);
23 }
24 }
25
26 void SocketStreamDispatcherHost::Initialize(
27 IPC::Message::Sender* sender, int process_id) {
28 LOG(INFO) << "Initialize: SocketStreamDispatcherHost process_id="
29 << process_id_;
30 DCHECK(sender);
31 sender_ = sender;
32 process_id_ = process_id;
33 }
34
35 bool SocketStreamDispatcherHost::OnMessageReceived(const IPC::Message& msg,
36 bool* msg_ok) {
37 DCHECK(sender_);
38 *msg_ok = true;
39 bool handled = true;
40 IPC_BEGIN_MESSAGE_MAP_EX(SocketStreamDispatcherHost, msg, *msg_ok)
41 IPC_MESSAGE_HANDLER(ViewHostMsg_SocketStream_Connect, OnConnect)
42 IPC_MESSAGE_HANDLER(ViewHostMsg_SocketStream_SendData, OnSendData)
43 IPC_MESSAGE_HANDLER(ViewHostMsg_SocketStream_Close, OnCloseReq)
44 IPC_MESSAGE_UNHANDLED(handled = false)
45 IPC_END_MESSAGE_MAP_EX()
46 return handled;
47 }
48
49 void SocketStreamDispatcherHost::OnConnected(net::SocketStream* socket,
50 int max_pending_send_allowed) {
51 int socket_id = SocketStreamHost::SocketIdFromSocketStream(socket);
52 LOG(INFO) << "SocketStreamDispatcherHost::OnConnected socket_id="
53 << socket_id
54 << " max_pending_send_allowed=" << max_pending_send_allowed;
55 if (socket_id == chrome_common_net::kNoSocketId)
56 return;
57 if (!sender_->Send(new ViewMsg_SocketStream_Connected(
58 socket_id, max_pending_send_allowed))) {
59 LOG(ERROR) << "ViewMsg_SocketStream_Connected failed.";
60 DeleteSocketStreamHost(socket_id);
61 }
62 }
63
64 void SocketStreamDispatcherHost::OnSentData(net::SocketStream* socket,
65 int amount_sent) {
66 int socket_id = SocketStreamHost::SocketIdFromSocketStream(socket);
67 LOG(INFO) << "SocketStreamDispatcherHost::OnDataSent socket_id="
68 << socket_id
69 << " amount_sent=" << amount_sent;
70 if (socket_id == chrome_common_net::kNoSocketId)
71 return;
72 if (!sender_->Send(
73 new ViewMsg_SocketStream_SentData(socket_id, amount_sent))) {
74 LOG(ERROR) << "ViewMsg_SocketStream_DataSent failed.";
75 DeleteSocketStreamHost(socket_id);
76 }
77 }
78
79 void SocketStreamDispatcherHost::OnReceivedData(
80 net::SocketStream* socket, const char* data, int len) {
81 int socket_id = SocketStreamHost::SocketIdFromSocketStream(socket);
82 LOG(INFO) << "SocketStreamDispatcherHost::OnReceiveData socket_id="
83 << socket_id;
84 if (socket_id == chrome_common_net::kNoSocketId)
85 return;
86 if (!sender_->Send(new ViewMsg_SocketStream_ReceivedData(
87 socket_id, std::vector<char>(data, data + len)))) {
88 LOG(ERROR) << "ViewMsg_SocketStream_ReceivedData failed.";
89 DeleteSocketStreamHost(socket_id);
90 }
91 }
92
93 void SocketStreamDispatcherHost::OnClose(net::SocketStream* socket) {
94 int socket_id = SocketStreamHost::SocketIdFromSocketStream(socket);
95 LOG(INFO) << "SocketStreamDispatcherHost::OnClosed socket_id="
96 << socket_id;
97 if (socket_id == chrome_common_net::kNoSocketId)
98 return;
99 DeleteSocketStreamHost(socket_id);
100 }
101
102 void SocketStreamDispatcherHost::OnConnect(const GURL& url, int socket_id) {
103 LOG(INFO) << "SocketStreamDispatcherHost::OnConnect url=" << url
104 << " socket_id=" << socket_id;
105 SocketStreamHost* socket_stream_host = new SocketStreamHost(this, socket_id);
106 if (hosts_.Lookup(socket_id)) {
107 LOG(ERROR) << "socket_id=" << socket_id << " already registered.";
108 return;
109 }
110 hosts_.AddWithID(socket_stream_host, socket_id);
111 socket_stream_host->Connect(url);
112 LOG(INFO) << "SocketStreamDispatcherHost::OnConnect -> " << socket_id;
113 }
114
115 void SocketStreamDispatcherHost::OnSendData(
116 int socket_id, const std::vector<char>& data) {
117 LOG(INFO) << "SocketStreamDispatcherHost::OnSendData socket_id=" << socket_id;
118 SocketStreamHost* socket_stream_host = hosts_.Lookup(socket_id);
119 if (!socket_stream_host)
120 return;
121 if (!socket_stream_host->SendData(data)) {
122 // Cannot accept more data to send.
123 socket_stream_host->Close();
124 }
125 }
126
127 void SocketStreamDispatcherHost::OnCloseReq(int socket_id) {
128 LOG(INFO) << "SocketStreamDispatcherHost::OnClose socket_id=" << socket_id;
129 SocketStreamHost* socket_stream_host = hosts_.Lookup(socket_id);
130 if (!socket_stream_host)
131 return;
132 socket_stream_host->Close();
133 }
134
135 void SocketStreamDispatcherHost::DeleteSocketStreamHost(int socket_id) {
136 SocketStreamHost* socket_stream_host = hosts_.Lookup(socket_id);
137 DCHECK(socket_stream_host);
138 delete socket_stream_host;
139 hosts_.Remove(socket_id);
140 if (!sender_->Send(new ViewMsg_SocketStream_Closed(socket_id))) {
141 LOG(ERROR) << "ViewMsg_SocketStream_Closed failed.";
142 }
143 }
OLDNEW
« 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