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

Side by Side Diff: jingle/glue/channel_socket_adapter.cc

Issue 8824006: Migrate net/socket/socket.h, net/socket/stream_socket.h to base::Bind(). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 9 years 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 | Annotate | Revision Log
« no previous file with comments | « jingle/glue/channel_socket_adapter.h ('k') | jingle/glue/channel_socket_adapter_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "jingle/glue/channel_socket_adapter.h" 5 #include "jingle/glue/channel_socket_adapter.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/message_loop.h" 10 #include "base/message_loop.h"
11 #include "net/base/io_buffer.h" 11 #include "net/base/io_buffer.h"
12 #include "net/base/net_errors.h" 12 #include "net/base/net_errors.h"
13 #include "third_party/libjingle/source/talk/p2p/base/transportchannel.h" 13 #include "third_party/libjingle/source/talk/p2p/base/transportchannel.h"
14 14
15 namespace jingle_glue { 15 namespace jingle_glue {
16 16
17 TransportChannelSocketAdapter::TransportChannelSocketAdapter( 17 TransportChannelSocketAdapter::TransportChannelSocketAdapter(
18 cricket::TransportChannel* channel) 18 cricket::TransportChannel* channel)
19 : message_loop_(MessageLoop::current()), 19 : message_loop_(MessageLoop::current()),
20 channel_(channel), 20 channel_(channel),
21 old_read_callback_(NULL),
22 write_callback_(NULL),
23 closed_error_code_(net::OK) { 21 closed_error_code_(net::OK) {
24 DCHECK(channel_); 22 DCHECK(channel_);
25 23
26 channel_->SignalReadPacket.connect( 24 channel_->SignalReadPacket.connect(
27 this, &TransportChannelSocketAdapter::OnNewPacket); 25 this, &TransportChannelSocketAdapter::OnNewPacket);
28 channel_->SignalWritableState.connect( 26 channel_->SignalWritableState.connect(
29 this, &TransportChannelSocketAdapter::OnWritableState); 27 this, &TransportChannelSocketAdapter::OnWritableState);
30 channel_->SignalDestroyed.connect( 28 channel_->SignalDestroyed.connect(
31 this, &TransportChannelSocketAdapter::OnChannelDestroyed); 29 this, &TransportChannelSocketAdapter::OnChannelDestroyed);
32 } 30 }
33 31
34 TransportChannelSocketAdapter::~TransportChannelSocketAdapter() { 32 TransportChannelSocketAdapter::~TransportChannelSocketAdapter() {
35 } 33 }
36 34
37 int TransportChannelSocketAdapter::Read( 35 int TransportChannelSocketAdapter::Read(
38 net::IOBuffer* buf, int buffer_size, net::OldCompletionCallback* callback) { 36 net::IOBuffer* buf,
39 DCHECK_EQ(MessageLoop::current(), message_loop_); 37 int buffer_size,
40 DCHECK(buf);
41 DCHECK(callback);
42 CHECK(!old_read_callback_ && read_callback_.is_null());
43
44 if (!channel_) {
45 DCHECK(closed_error_code_ != net::OK);
46 return closed_error_code_;
47 }
48
49 old_read_callback_ = callback;
50 read_buffer_ = buf;
51 read_buffer_size_ = buffer_size;
52
53 return net::ERR_IO_PENDING;
54 }
55 int TransportChannelSocketAdapter::Read(
56 net::IOBuffer* buf, int buffer_size,
57 const net::CompletionCallback& callback) { 38 const net::CompletionCallback& callback) {
58 DCHECK_EQ(MessageLoop::current(), message_loop_); 39 DCHECK_EQ(MessageLoop::current(), message_loop_);
59 DCHECK(buf); 40 DCHECK(buf);
60 DCHECK(!callback.is_null()); 41 DCHECK(!callback.is_null());
61 CHECK(!old_read_callback_ && read_callback_.is_null()); 42 CHECK(read_callback_.is_null());
62 43
63 if (!channel_) { 44 if (!channel_) {
64 DCHECK(closed_error_code_ != net::OK); 45 DCHECK(closed_error_code_ != net::OK);
65 return closed_error_code_; 46 return closed_error_code_;
66 } 47 }
67 48
68 read_callback_ = callback; 49 read_callback_ = callback;
69 read_buffer_ = buf; 50 read_buffer_ = buf;
70 read_buffer_size_ = buffer_size; 51 read_buffer_size_ = buffer_size;
71 52
72 return net::ERR_IO_PENDING; 53 return net::ERR_IO_PENDING;
73 } 54 }
74 55
75 int TransportChannelSocketAdapter::Write( 56 int TransportChannelSocketAdapter::Write(
76 net::IOBuffer* buffer, int buffer_size, net::OldCompletionCallback* callback ) { 57 net::IOBuffer* buffer,
58 int buffer_size,
59 const net::CompletionCallback& callback) {
77 DCHECK_EQ(MessageLoop::current(), message_loop_); 60 DCHECK_EQ(MessageLoop::current(), message_loop_);
78 DCHECK(buffer); 61 DCHECK(buffer);
79 DCHECK(callback); 62 DCHECK(!callback.is_null());
80 CHECK(!write_callback_); 63 CHECK(write_callback_.is_null());
81 64
82 if (!channel_) { 65 if (!channel_) {
83 DCHECK(closed_error_code_ != net::OK); 66 DCHECK(closed_error_code_ != net::OK);
84 return closed_error_code_; 67 return closed_error_code_;
85 } 68 }
86 69
87 int result; 70 int result;
88 if (channel_->writable()) { 71 if (channel_->writable()) {
89 result = channel_->SendPacket(buffer->data(), buffer_size); 72 result = channel_->SendPacket(buffer->data(), buffer_size);
90 if (result < 0) { 73 if (result < 0) {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 105
123 if (!channel_) // Already closed. 106 if (!channel_) // Already closed.
124 return; 107 return;
125 108
126 DCHECK(error_code != net::OK); 109 DCHECK(error_code != net::OK);
127 closed_error_code_ = error_code; 110 closed_error_code_ = error_code;
128 channel_->SignalReadPacket.disconnect(this); 111 channel_->SignalReadPacket.disconnect(this);
129 channel_->SignalDestroyed.disconnect(this); 112 channel_->SignalDestroyed.disconnect(this);
130 channel_ = NULL; 113 channel_ = NULL;
131 114
132 if (old_read_callback_) { 115 if (!read_callback_.is_null()) {
133 net::OldCompletionCallback* callback = old_read_callback_;
134 old_read_callback_ = NULL;
135 read_buffer_ = NULL;
136 callback->Run(error_code);
137 } else if (!read_callback_.is_null()) {
138 net::CompletionCallback callback = read_callback_; 116 net::CompletionCallback callback = read_callback_;
139 read_callback_.Reset(); 117 read_callback_.Reset();
140 read_buffer_ = NULL; 118 read_buffer_ = NULL;
141 callback.Run(error_code); 119 callback.Run(error_code);
142 } 120 }
143 121
144 if (write_callback_) { 122 if (!write_callback_.is_null()) {
145 net::OldCompletionCallback* callback = write_callback_; 123 net::CompletionCallback callback = write_callback_;
146 write_callback_ = NULL; 124 write_callback_.Reset();
147 write_buffer_ = NULL; 125 write_buffer_ = NULL;
148 callback->Run(error_code); 126 callback.Run(error_code);
149 } 127 }
150 } 128 }
151 129
152 void TransportChannelSocketAdapter::OnNewPacket( 130 void TransportChannelSocketAdapter::OnNewPacket(
153 cricket::TransportChannel* channel, const char* data, size_t data_size) { 131 cricket::TransportChannel* channel, const char* data, size_t data_size) {
154 DCHECK_EQ(MessageLoop::current(), message_loop_); 132 DCHECK_EQ(MessageLoop::current(), message_loop_);
155 DCHECK_EQ(channel, channel_); 133 DCHECK_EQ(channel, channel_);
156 if (old_read_callback_ || !read_callback_.is_null()) { 134 if (!read_callback_.is_null()) {
157 DCHECK(read_buffer_); 135 DCHECK(read_buffer_);
158 CHECK_LT(data_size, static_cast<size_t>(std::numeric_limits<int>::max())); 136 CHECK_LT(data_size, static_cast<size_t>(std::numeric_limits<int>::max()));
159 137
160 if (read_buffer_size_ < static_cast<int>(data_size)) { 138 if (read_buffer_size_ < static_cast<int>(data_size)) {
161 LOG(WARNING) << "Data buffer is smaller than the received packet. " 139 LOG(WARNING) << "Data buffer is smaller than the received packet. "
162 << "Dropping the data that doesn't fit."; 140 << "Dropping the data that doesn't fit.";
163 data_size = read_buffer_size_; 141 data_size = read_buffer_size_;
164 } 142 }
165 143
166 memcpy(read_buffer_->data(), data, data_size); 144 memcpy(read_buffer_->data(), data, data_size);
167 145
168 if (old_read_callback_) { 146 net::CompletionCallback callback = read_callback_;
169 net::OldCompletionCallback* callback = old_read_callback_; 147 read_callback_.Reset();
170 old_read_callback_ = NULL; 148 read_buffer_ = NULL;
171 read_buffer_ = NULL; 149
172 callback->Run(data_size); 150 callback.Run(data_size);
173 } else {
174 net::CompletionCallback callback = read_callback_;
175 read_callback_.Reset();
176 read_buffer_ = NULL;
177 callback.Run(data_size);
178 }
179 } else { 151 } else {
180 LOG(WARNING) 152 LOG(WARNING)
181 << "Data was received without a callback. Dropping the packet."; 153 << "Data was received without a callback. Dropping the packet.";
182 } 154 }
183 } 155 }
184 156
185 void TransportChannelSocketAdapter::OnWritableState( 157 void TransportChannelSocketAdapter::OnWritableState(
186 cricket::TransportChannel* channel) { 158 cricket::TransportChannel* channel) {
187 DCHECK_EQ(MessageLoop::current(), message_loop_); 159 DCHECK_EQ(MessageLoop::current(), message_loop_);
188 // Try to send the packet if there is a pending write. 160 // Try to send the packet if there is a pending write.
189 if (write_callback_) { 161 if (!write_callback_.is_null()) {
190 int result = channel_->SendPacket(write_buffer_->data(), 162 int result = channel_->SendPacket(write_buffer_->data(),
191 write_buffer_size_); 163 write_buffer_size_);
192 if (result < 0) 164 if (result < 0)
193 result = net::MapSystemError(channel_->GetError()); 165 result = net::MapSystemError(channel_->GetError());
194 166
195 if (result != net::ERR_IO_PENDING) { 167 if (result != net::ERR_IO_PENDING) {
196 net::OldCompletionCallback* callback = write_callback_; 168 net::CompletionCallback callback = write_callback_;
197 write_callback_ = NULL; 169 write_callback_.Reset();
198 write_buffer_ = NULL; 170 write_buffer_ = NULL;
199 callback->Run(result); 171 callback.Run(result);
200 } 172 }
201 } 173 }
202 } 174 }
203 175
204 void TransportChannelSocketAdapter::OnChannelDestroyed( 176 void TransportChannelSocketAdapter::OnChannelDestroyed(
205 cricket::TransportChannel* channel) { 177 cricket::TransportChannel* channel) {
206 DCHECK_EQ(MessageLoop::current(), message_loop_); 178 DCHECK_EQ(MessageLoop::current(), message_loop_);
207 DCHECK_EQ(channel, channel_); 179 DCHECK_EQ(channel, channel_);
208 Close(net::ERR_CONNECTION_ABORTED); 180 Close(net::ERR_CONNECTION_ABORTED);
209 } 181 }
210 182
211 } // namespace jingle_glue 183 } // namespace jingle_glue
OLDNEW
« no previous file with comments | « jingle/glue/channel_socket_adapter.h ('k') | jingle/glue/channel_socket_adapter_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698