OLD | NEW |
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 "content/browser/renderer_host/p2p/socket_host_tcp.h" | 5 #include "content/browser/renderer_host/p2p/socket_host_tcp.h" |
6 | 6 |
7 #include "base/sys_byteorder.h" | 7 #include "base/sys_byteorder.h" |
8 #include "content/common/p2p_messages.h" | 8 #include "content/common/p2p_messages.h" |
9 #include "net/base/io_buffer.h" | 9 #include "net/base/io_buffer.h" |
10 #include "net/base/net_errors.h" | 10 #include "net/base/net_errors.h" |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
159 if (result == net::ERR_IO_PENDING) { | 159 if (result == net::ERR_IO_PENDING) { |
160 return; | 160 return; |
161 } else if (result < 0){ | 161 } else if (result < 0){ |
162 LOG(ERROR) << "Error when reading from TCP socket: " << result; | 162 LOG(ERROR) << "Error when reading from TCP socket: " << result; |
163 OnError(); | 163 OnError(); |
164 return; | 164 return; |
165 } | 165 } |
166 | 166 |
167 read_buffer_->set_offset(read_buffer_->offset() + result); | 167 read_buffer_->set_offset(read_buffer_->offset() + result); |
168 if (read_buffer_->offset() > kPacketHeaderSize) { | 168 if (read_buffer_->offset() > kPacketHeaderSize) { |
169 int packet_size = | 169 int packet_size = base::NetToHost16( |
170 ntohs(*reinterpret_cast<uint16*>(read_buffer_->StartOfBuffer())); | 170 *reinterpret_cast<uint16*>(read_buffer_->StartOfBuffer())); |
171 if (packet_size + kPacketHeaderSize <= read_buffer_->offset()) { | 171 if (packet_size + kPacketHeaderSize <= read_buffer_->offset()) { |
172 // We've got a full packet! | 172 // We've got a full packet! |
173 char* start = read_buffer_->StartOfBuffer() + kPacketHeaderSize; | 173 char* start = read_buffer_->StartOfBuffer() + kPacketHeaderSize; |
174 std::vector<char> data(start, start + packet_size); | 174 std::vector<char> data(start, start + packet_size); |
175 OnPacket(data); | 175 OnPacket(data); |
176 | 176 |
177 // Move remaining data to the start of the buffer. | 177 // Move remaining data to the start of the buffer. |
178 memmove(read_buffer_->StartOfBuffer(), start + packet_size, | 178 memmove(read_buffer_->StartOfBuffer(), start + packet_size, |
179 read_buffer_->offset() - packet_size - kPacketHeaderSize); | 179 read_buffer_->offset() - packet_size - kPacketHeaderSize); |
180 read_buffer_->set_offset(read_buffer_->offset() - packet_size - | 180 read_buffer_->set_offset(read_buffer_->offset() - packet_size - |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 if (!stun || type == STUN_DATA_INDICATION) { | 212 if (!stun || type == STUN_DATA_INDICATION) { |
213 LOG(ERROR) << "Page tried to send a data packet to " << to.ToString() | 213 LOG(ERROR) << "Page tried to send a data packet to " << to.ToString() |
214 << " before STUN binding is finished."; | 214 << " before STUN binding is finished."; |
215 OnError(); | 215 OnError(); |
216 return; | 216 return; |
217 } | 217 } |
218 } | 218 } |
219 | 219 |
220 int size = kPacketHeaderSize + data.size(); | 220 int size = kPacketHeaderSize + data.size(); |
221 write_buffer_ = new net::DrainableIOBuffer(new net::IOBuffer(size), size); | 221 write_buffer_ = new net::DrainableIOBuffer(new net::IOBuffer(size), size); |
222 *reinterpret_cast<uint16*>(write_buffer_->data()) = htons(data.size()); | 222 *reinterpret_cast<uint16*>(write_buffer_->data()) = |
| 223 base::HostToNet16(data.size()); |
223 memcpy(write_buffer_->data() + kPacketHeaderSize, &data[0], data.size()); | 224 memcpy(write_buffer_->data() + kPacketHeaderSize, &data[0], data.size()); |
224 | 225 |
225 DoWrite(); | 226 DoWrite(); |
226 } | 227 } |
227 | 228 |
228 void P2PSocketHostTcp::DoWrite() { | 229 void P2PSocketHostTcp::DoWrite() { |
229 while (true) { | 230 while (true) { |
230 int result = socket_->Write(write_buffer_, write_buffer_->BytesRemaining(), | 231 int result = socket_->Write(write_buffer_, write_buffer_->BytesRemaining(), |
231 base::Bind(&P2PSocketHostTcp::OnWritten, | 232 base::Bind(&P2PSocketHostTcp::OnWritten, |
232 base::Unretained(this))); | 233 base::Unretained(this))); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
266 } | 267 } |
267 | 268 |
268 P2PSocketHost* P2PSocketHostTcp::AcceptIncomingTcpConnection( | 269 P2PSocketHost* P2PSocketHostTcp::AcceptIncomingTcpConnection( |
269 const net::IPEndPoint& remote_address, int id) { | 270 const net::IPEndPoint& remote_address, int id) { |
270 NOTREACHED(); | 271 NOTREACHED(); |
271 OnError(); | 272 OnError(); |
272 return NULL; | 273 return NULL; |
273 } | 274 } |
274 | 275 |
275 } // namespace content | 276 } // namespace content |
OLD | NEW |