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