| 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_udp.h" | 5 #include "content/browser/renderer_host/p2p/socket_host_udp.h" |
| 6 | 6 |
| 7 #include <deque> | 7 #include <deque> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 131 virtual int SetMulticastTimeToLive(int time_to_live) OVERRIDE { | 131 virtual int SetMulticastTimeToLive(int time_to_live) OVERRIDE { |
| 132 NOTIMPLEMENTED(); | 132 NOTIMPLEMENTED(); |
| 133 return net::ERR_NOT_IMPLEMENTED; | 133 return net::ERR_NOT_IMPLEMENTED; |
| 134 } | 134 } |
| 135 | 135 |
| 136 virtual int SetMulticastLoopbackMode(bool loopback) OVERRIDE { | 136 virtual int SetMulticastLoopbackMode(bool loopback) OVERRIDE { |
| 137 NOTIMPLEMENTED(); | 137 NOTIMPLEMENTED(); |
| 138 return net::ERR_NOT_IMPLEMENTED; | 138 return net::ERR_NOT_IMPLEMENTED; |
| 139 } | 139 } |
| 140 | 140 |
| 141 virtual int SetToS(net::DiffServCodePoint dscp) OVERRIDE { |
| 142 NOTIMPLEMENTED(); |
| 143 return net::ERR_NOT_IMPLEMENTED; |
| 144 } |
| 145 |
| 141 private: | 146 private: |
| 142 net::IPEndPoint address_; | 147 net::IPEndPoint address_; |
| 143 std::deque<UDPPacket>* sent_packets_; | 148 std::deque<UDPPacket>* sent_packets_; |
| 144 std::deque<UDPPacket> incoming_packets_; | 149 std::deque<UDPPacket> incoming_packets_; |
| 145 net::BoundNetLog net_log_; | 150 net::BoundNetLog net_log_; |
| 146 | 151 |
| 147 scoped_refptr<net::IOBuffer> recv_buffer_; | 152 scoped_refptr<net::IOBuffer> recv_buffer_; |
| 148 net::IPEndPoint* recv_address_; | 153 net::IPEndPoint* recv_address_; |
| 149 int recv_size_; | 154 int recv_size_; |
| 150 net::CompletionCallback recv_callback_; | 155 net::CompletionCallback recv_callback_; |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 186 // Verify that we can send STUN messages before we receive anything | 191 // Verify that we can send STUN messages before we receive anything |
| 187 // from the other side. | 192 // from the other side. |
| 188 TEST_F(P2PSocketHostUdpTest, SendStunNoAuth) { | 193 TEST_F(P2PSocketHostUdpTest, SendStunNoAuth) { |
| 189 EXPECT_CALL(sender_, Send( | 194 EXPECT_CALL(sender_, Send( |
| 190 MatchMessage(static_cast<uint32>(P2PMsg_OnSendComplete::ID)))) | 195 MatchMessage(static_cast<uint32>(P2PMsg_OnSendComplete::ID)))) |
| 191 .Times(3) | 196 .Times(3) |
| 192 .WillRepeatedly(DoAll(DeleteArg<0>(), Return(true))); | 197 .WillRepeatedly(DoAll(DeleteArg<0>(), Return(true))); |
| 193 | 198 |
| 194 std::vector<char> packet1; | 199 std::vector<char> packet1; |
| 195 CreateStunRequest(&packet1); | 200 CreateStunRequest(&packet1); |
| 196 socket_host_->Send(dest1_, packet1); | 201 socket_host_->Send(dest1_, packet1, net::DSCP_NO_CHANGE); |
| 197 | 202 |
| 198 std::vector<char> packet2; | 203 std::vector<char> packet2; |
| 199 CreateStunResponse(&packet2); | 204 CreateStunResponse(&packet2); |
| 200 socket_host_->Send(dest1_, packet2); | 205 socket_host_->Send(dest1_, packet2, net::DSCP_NO_CHANGE); |
| 201 | 206 |
| 202 std::vector<char> packet3; | 207 std::vector<char> packet3; |
| 203 CreateStunError(&packet3); | 208 CreateStunError(&packet3); |
| 204 socket_host_->Send(dest1_, packet3); | 209 socket_host_->Send(dest1_, packet3, net::DSCP_NO_CHANGE); |
| 205 | 210 |
| 206 ASSERT_EQ(sent_packets_.size(), 3U); | 211 ASSERT_EQ(sent_packets_.size(), 3U); |
| 207 ASSERT_EQ(sent_packets_[0].second, packet1); | 212 ASSERT_EQ(sent_packets_[0].second, packet1); |
| 208 ASSERT_EQ(sent_packets_[1].second, packet2); | 213 ASSERT_EQ(sent_packets_[1].second, packet2); |
| 209 ASSERT_EQ(sent_packets_[2].second, packet3); | 214 ASSERT_EQ(sent_packets_[2].second, packet3); |
| 210 } | 215 } |
| 211 | 216 |
| 212 // Verify that no data packets can be sent before STUN binding has | 217 // Verify that no data packets can be sent before STUN binding has |
| 213 // finished. | 218 // finished. |
| 214 TEST_F(P2PSocketHostUdpTest, SendDataNoAuth) { | 219 TEST_F(P2PSocketHostUdpTest, SendDataNoAuth) { |
| 215 EXPECT_CALL(sender_, Send( | 220 EXPECT_CALL(sender_, Send( |
| 216 MatchMessage(static_cast<uint32>(P2PMsg_OnError::ID)))) | 221 MatchMessage(static_cast<uint32>(P2PMsg_OnError::ID)))) |
| 217 .WillOnce(DoAll(DeleteArg<0>(), Return(true))); | 222 .WillOnce(DoAll(DeleteArg<0>(), Return(true))); |
| 218 | 223 |
| 219 std::vector<char> packet; | 224 std::vector<char> packet; |
| 220 CreateRandomPacket(&packet); | 225 CreateRandomPacket(&packet); |
| 221 socket_host_->Send(dest1_, packet); | 226 socket_host_->Send(dest1_, packet, net::DSCP_NO_CHANGE); |
| 222 | 227 |
| 223 ASSERT_EQ(sent_packets_.size(), 0U); | 228 ASSERT_EQ(sent_packets_.size(), 0U); |
| 224 } | 229 } |
| 225 | 230 |
| 226 // Verify that we can send data after we've received STUN request | 231 // Verify that we can send data after we've received STUN request |
| 227 // from the other side. | 232 // from the other side. |
| 228 TEST_F(P2PSocketHostUdpTest, SendAfterStunRequest) { | 233 TEST_F(P2PSocketHostUdpTest, SendAfterStunRequest) { |
| 229 // Receive packet from |dest1_|. | 234 // Receive packet from |dest1_|. |
| 230 std::vector<char> request_packet; | 235 std::vector<char> request_packet; |
| 231 CreateStunRequest(&request_packet); | 236 CreateStunRequest(&request_packet); |
| 232 | 237 |
| 233 EXPECT_CALL(sender_, Send(MatchPacketMessage(request_packet))) | 238 EXPECT_CALL(sender_, Send(MatchPacketMessage(request_packet))) |
| 234 .WillOnce(DoAll(DeleteArg<0>(), Return(true))); | 239 .WillOnce(DoAll(DeleteArg<0>(), Return(true))); |
| 235 socket_->ReceivePacket(dest1_, request_packet); | 240 socket_->ReceivePacket(dest1_, request_packet); |
| 236 | 241 |
| 237 // Now we should be able to send any data to |dest1_|. | 242 // Now we should be able to send any data to |dest1_|. |
| 238 EXPECT_CALL(sender_, Send( | 243 EXPECT_CALL(sender_, Send( |
| 239 MatchMessage(static_cast<uint32>(P2PMsg_OnSendComplete::ID)))) | 244 MatchMessage(static_cast<uint32>(P2PMsg_OnSendComplete::ID)))) |
| 240 .WillOnce(DoAll(DeleteArg<0>(), Return(true))); | 245 .WillOnce(DoAll(DeleteArg<0>(), Return(true))); |
| 241 std::vector<char> packet; | 246 std::vector<char> packet; |
| 242 CreateRandomPacket(&packet); | 247 CreateRandomPacket(&packet); |
| 243 socket_host_->Send(dest1_, packet); | 248 socket_host_->Send(dest1_, packet, net::DSCP_NO_CHANGE); |
| 244 | 249 |
| 245 ASSERT_EQ(1U, sent_packets_.size()); | 250 ASSERT_EQ(1U, sent_packets_.size()); |
| 246 ASSERT_EQ(dest1_, sent_packets_[0].first); | 251 ASSERT_EQ(dest1_, sent_packets_[0].first); |
| 247 } | 252 } |
| 248 | 253 |
| 249 // Verify that we can send data after we've received STUN response | 254 // Verify that we can send data after we've received STUN response |
| 250 // from the other side. | 255 // from the other side. |
| 251 TEST_F(P2PSocketHostUdpTest, SendAfterStunResponse) { | 256 TEST_F(P2PSocketHostUdpTest, SendAfterStunResponse) { |
| 252 // Receive packet from |dest1_|. | 257 // Receive packet from |dest1_|. |
| 253 std::vector<char> request_packet; | 258 std::vector<char> request_packet; |
| 254 CreateStunRequest(&request_packet); | 259 CreateStunRequest(&request_packet); |
| 255 | 260 |
| 256 EXPECT_CALL(sender_, Send(MatchPacketMessage(request_packet))) | 261 EXPECT_CALL(sender_, Send(MatchPacketMessage(request_packet))) |
| 257 .WillOnce(DoAll(DeleteArg<0>(), Return(true))); | 262 .WillOnce(DoAll(DeleteArg<0>(), Return(true))); |
| 258 socket_->ReceivePacket(dest1_, request_packet); | 263 socket_->ReceivePacket(dest1_, request_packet); |
| 259 | 264 |
| 260 // Now we should be able to send any data to |dest1_|. | 265 // Now we should be able to send any data to |dest1_|. |
| 261 EXPECT_CALL(sender_, Send( | 266 EXPECT_CALL(sender_, Send( |
| 262 MatchMessage(static_cast<uint32>(P2PMsg_OnSendComplete::ID)))) | 267 MatchMessage(static_cast<uint32>(P2PMsg_OnSendComplete::ID)))) |
| 263 .WillOnce(DoAll(DeleteArg<0>(), Return(true))); | 268 .WillOnce(DoAll(DeleteArg<0>(), Return(true))); |
| 264 std::vector<char> packet; | 269 std::vector<char> packet; |
| 265 CreateRandomPacket(&packet); | 270 CreateRandomPacket(&packet); |
| 266 socket_host_->Send(dest1_, packet); | 271 socket_host_->Send(dest1_, packet, net::DSCP_NO_CHANGE); |
| 267 | 272 |
| 268 ASSERT_EQ(1U, sent_packets_.size()); | 273 ASSERT_EQ(1U, sent_packets_.size()); |
| 269 ASSERT_EQ(dest1_, sent_packets_[0].first); | 274 ASSERT_EQ(dest1_, sent_packets_[0].first); |
| 270 } | 275 } |
| 271 | 276 |
| 272 // Verify messages still cannot be sent to an unathorized host after | 277 // Verify messages still cannot be sent to an unathorized host after |
| 273 // successful binding with different host. | 278 // successful binding with different host. |
| 274 TEST_F(P2PSocketHostUdpTest, SendAfterStunResponseDifferentHost) { | 279 TEST_F(P2PSocketHostUdpTest, SendAfterStunResponseDifferentHost) { |
| 275 // Receive packet from |dest1_|. | 280 // Receive packet from |dest1_|. |
| 276 std::vector<char> request_packet; | 281 std::vector<char> request_packet; |
| 277 CreateStunRequest(&request_packet); | 282 CreateStunRequest(&request_packet); |
| 278 | 283 |
| 279 EXPECT_CALL(sender_, Send(MatchPacketMessage(request_packet))) | 284 EXPECT_CALL(sender_, Send(MatchPacketMessage(request_packet))) |
| 280 .WillOnce(DoAll(DeleteArg<0>(), Return(true))); | 285 .WillOnce(DoAll(DeleteArg<0>(), Return(true))); |
| 281 socket_->ReceivePacket(dest1_, request_packet); | 286 socket_->ReceivePacket(dest1_, request_packet); |
| 282 | 287 |
| 283 // Should fail when trying to send the same packet to |dest2_|. | 288 // Should fail when trying to send the same packet to |dest2_|. |
| 284 std::vector<char> packet; | 289 std::vector<char> packet; |
| 285 CreateRandomPacket(&packet); | 290 CreateRandomPacket(&packet); |
| 286 EXPECT_CALL(sender_, Send( | 291 EXPECT_CALL(sender_, Send( |
| 287 MatchMessage(static_cast<uint32>(P2PMsg_OnError::ID)))) | 292 MatchMessage(static_cast<uint32>(P2PMsg_OnError::ID)))) |
| 288 .WillOnce(DoAll(DeleteArg<0>(), Return(true))); | 293 .WillOnce(DoAll(DeleteArg<0>(), Return(true))); |
| 289 socket_host_->Send(dest2_, packet); | 294 socket_host_->Send(dest2_, packet, net::DSCP_NO_CHANGE); |
| 290 } | 295 } |
| 291 | 296 |
| 292 } // namespace content | 297 } // namespace content |
| OLD | NEW |