| 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 "net/udp/udp_socket.h" | 5 #include "net/udp/udp_socket.h" |
| 6 | 6 |
| 7 #include "net/udp/udp_client_socket.h" | 7 #include "net/udp/udp_client_socket.h" |
| 8 #include "net/udp/udp_server_socket.h" | 8 #include "net/udp/udp_server_socket.h" |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 return bytes_sent; | 112 return bytes_sent; |
| 113 } | 113 } |
| 114 | 114 |
| 115 protected: | 115 protected: |
| 116 static const int kMaxRead = 1024; | 116 static const int kMaxRead = 1024; |
| 117 scoped_refptr<IOBufferWithSize> buffer_; | 117 scoped_refptr<IOBufferWithSize> buffer_; |
| 118 IPEndPoint recv_from_address_; | 118 IPEndPoint recv_from_address_; |
| 119 }; | 119 }; |
| 120 | 120 |
| 121 // Creates and address from an ip/port and returns it in |address|. | 121 // Creates and address from an ip/port and returns it in |address|. |
| 122 void CreateUDPAddress(std::string ip_str, int port, IPEndPoint* address) { | 122 void CreateUDPAddress(std::string ip_str, uint16 port, IPEndPoint* address) { |
| 123 IPAddressNumber ip_number; | 123 IPAddressNumber ip_number; |
| 124 bool rv = ParseIPLiteralToNumber(ip_str, &ip_number); | 124 bool rv = ParseIPLiteralToNumber(ip_str, &ip_number); |
| 125 if (!rv) | 125 if (!rv) |
| 126 return; | 126 return; |
| 127 *address = IPEndPoint(ip_number, port); | 127 *address = IPEndPoint(ip_number, port); |
| 128 } | 128 } |
| 129 | 129 |
| 130 TEST_F(UDPSocketTest, Connect) { | 130 TEST_F(UDPSocketTest, Connect) { |
| 131 const int kPort = 9999; | 131 const uint16 kPort = 9999; |
| 132 std::string simple_message("hello world!"); | 132 std::string simple_message("hello world!"); |
| 133 | 133 |
| 134 // Setup the server to listen. | 134 // Setup the server to listen. |
| 135 IPEndPoint bind_address; | 135 IPEndPoint bind_address; |
| 136 CreateUDPAddress("127.0.0.1", kPort, &bind_address); | 136 CreateUDPAddress("127.0.0.1", kPort, &bind_address); |
| 137 CapturingNetLog server_log; | 137 CapturingNetLog server_log; |
| 138 scoped_ptr<UDPServerSocket> server( | 138 scoped_ptr<UDPServerSocket> server( |
| 139 new UDPServerSocket(&server_log, NetLog::Source())); | 139 new UDPServerSocket(&server_log, NetLog::Source())); |
| 140 server->AllowAddressReuse(); | 140 server->AllowAddressReuse(); |
| 141 int rv = server->Listen(bind_address); | 141 int rv = server->Listen(bind_address); |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 209 // root permissions on OSX 10.7+. | 209 // root permissions on OSX 10.7+. |
| 210 TEST_F(UDPSocketTest, DISABLED_Broadcast) { | 210 TEST_F(UDPSocketTest, DISABLED_Broadcast) { |
| 211 #elif defined(OS_ANDROID) | 211 #elif defined(OS_ANDROID) |
| 212 // It is also disabled for Android because it is extremely flaky. | 212 // It is also disabled for Android because it is extremely flaky. |
| 213 // The first call to SendToSocket returns -109 (Address not reachable) | 213 // The first call to SendToSocket returns -109 (Address not reachable) |
| 214 // in some unpredictable cases. crbug.com/139144. | 214 // in some unpredictable cases. crbug.com/139144. |
| 215 TEST_F(UDPSocketTest, DISABLED_Broadcast) { | 215 TEST_F(UDPSocketTest, DISABLED_Broadcast) { |
| 216 #else | 216 #else |
| 217 TEST_F(UDPSocketTest, Broadcast) { | 217 TEST_F(UDPSocketTest, Broadcast) { |
| 218 #endif | 218 #endif |
| 219 const int kPort = 9999; | 219 const uint16 kPort = 9999; |
| 220 std::string first_message("first message"), second_message("second message"); | 220 std::string first_message("first message"), second_message("second message"); |
| 221 | 221 |
| 222 IPEndPoint broadcast_address; | 222 IPEndPoint broadcast_address; |
| 223 CreateUDPAddress("255.255.255.255", kPort, &broadcast_address); | 223 CreateUDPAddress("255.255.255.255", kPort, &broadcast_address); |
| 224 IPEndPoint listen_address; | 224 IPEndPoint listen_address; |
| 225 CreateUDPAddress("0.0.0.0", kPort, &listen_address); | 225 CreateUDPAddress("0.0.0.0", kPort, &listen_address); |
| 226 | 226 |
| 227 CapturingNetLog server1_log, server2_log; | 227 CapturingNetLog server1_log, server2_log; |
| 228 scoped_ptr<UDPServerSocket> server1( | 228 scoped_ptr<UDPServerSocket> server1( |
| 229 new UDPServerSocket(&server1_log, NetLog::Source())); | 229 new UDPServerSocket(&server1_log, NetLog::Source())); |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 362 | 362 |
| 363 // In this test, we verify that connect() on a socket will have the effect | 363 // In this test, we verify that connect() on a socket will have the effect |
| 364 // of filtering reads on this socket only to data read from the destination | 364 // of filtering reads on this socket only to data read from the destination |
| 365 // we connected to. | 365 // we connected to. |
| 366 // | 366 // |
| 367 // The purpose of this test is that some documentation indicates that connect | 367 // The purpose of this test is that some documentation indicates that connect |
| 368 // binds the client's sends to send to a particular server endpoint, but does | 368 // binds the client's sends to send to a particular server endpoint, but does |
| 369 // not bind the client's reads to only be from that endpoint, and that we need | 369 // not bind the client's reads to only be from that endpoint, and that we need |
| 370 // to always use recvfrom() to disambiguate. | 370 // to always use recvfrom() to disambiguate. |
| 371 TEST_F(UDPSocketTest, VerifyConnectBindsAddr) { | 371 TEST_F(UDPSocketTest, VerifyConnectBindsAddr) { |
| 372 const int kPort1 = 9999; | 372 const uint16 kPort1 = 9999; |
| 373 const int kPort2 = 10000; | 373 const uint16 kPort2 = 10000; |
| 374 std::string simple_message("hello world!"); | 374 std::string simple_message("hello world!"); |
| 375 std::string foreign_message("BAD MESSAGE TO GET!!"); | 375 std::string foreign_message("BAD MESSAGE TO GET!!"); |
| 376 | 376 |
| 377 // Setup the first server to listen. | 377 // Setup the first server to listen. |
| 378 IPEndPoint bind_address; | 378 IPEndPoint bind_address; |
| 379 CreateUDPAddress("127.0.0.1", kPort1, &bind_address); | 379 CreateUDPAddress("127.0.0.1", kPort1, &bind_address); |
| 380 UDPServerSocket server1(NULL, NetLog::Source()); | 380 UDPServerSocket server1(NULL, NetLog::Source()); |
| 381 server1.AllowAddressReuse(); | 381 server1.AllowAddressReuse(); |
| 382 int rv = server1.Listen(bind_address); | 382 int rv = server1.Listen(bind_address); |
| 383 ASSERT_EQ(OK, rv); | 383 ASSERT_EQ(OK, rv); |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 531 #if defined(OS_ANDROID) | 531 #if defined(OS_ANDROID) |
| 532 // Some Android devices do not support multicast socket. | 532 // Some Android devices do not support multicast socket. |
| 533 // The ones supporting multicast need WifiManager.MulitcastLock to enable it. | 533 // The ones supporting multicast need WifiManager.MulitcastLock to enable it. |
| 534 // http://goo.gl/jjAk9 | 534 // http://goo.gl/jjAk9 |
| 535 #define MAYBE_JoinMulticastGroup DISABLED_JoinMulticastGroup | 535 #define MAYBE_JoinMulticastGroup DISABLED_JoinMulticastGroup |
| 536 #else | 536 #else |
| 537 #define MAYBE_JoinMulticastGroup JoinMulticastGroup | 537 #define MAYBE_JoinMulticastGroup JoinMulticastGroup |
| 538 #endif // defined(OS_ANDROID) | 538 #endif // defined(OS_ANDROID) |
| 539 | 539 |
| 540 TEST_F(UDPSocketTest, MAYBE_JoinMulticastGroup) { | 540 TEST_F(UDPSocketTest, MAYBE_JoinMulticastGroup) { |
| 541 const int kPort = 9999; | 541 const uint16 kPort = 9999; |
| 542 const char* const kGroup = "237.132.100.17"; | 542 const char* const kGroup = "237.132.100.17"; |
| 543 | 543 |
| 544 IPEndPoint bind_address; | 544 IPEndPoint bind_address; |
| 545 CreateUDPAddress("0.0.0.0", kPort, &bind_address); | 545 CreateUDPAddress("0.0.0.0", kPort, &bind_address); |
| 546 IPAddressNumber group_ip; | 546 IPAddressNumber group_ip; |
| 547 EXPECT_TRUE(ParseIPLiteralToNumber(kGroup, &group_ip)); | 547 EXPECT_TRUE(ParseIPLiteralToNumber(kGroup, &group_ip)); |
| 548 | 548 |
| 549 UDPSocket socket(DatagramSocket::DEFAULT_BIND, | 549 UDPSocket socket(DatagramSocket::DEFAULT_BIND, |
| 550 RandIntCallback(), | 550 RandIntCallback(), |
| 551 NULL, | 551 NULL, |
| 552 NetLog::Source()); | 552 NetLog::Source()); |
| 553 EXPECT_EQ(OK, socket.Bind(bind_address)); | 553 EXPECT_EQ(OK, socket.Bind(bind_address)); |
| 554 EXPECT_EQ(OK, socket.JoinGroup(group_ip)); | 554 EXPECT_EQ(OK, socket.JoinGroup(group_ip)); |
| 555 // Joining group multiple times. | 555 // Joining group multiple times. |
| 556 EXPECT_NE(OK, socket.JoinGroup(group_ip)); | 556 EXPECT_NE(OK, socket.JoinGroup(group_ip)); |
| 557 EXPECT_EQ(OK, socket.LeaveGroup(group_ip)); | 557 EXPECT_EQ(OK, socket.LeaveGroup(group_ip)); |
| 558 // Leaving group multiple times. | 558 // Leaving group multiple times. |
| 559 EXPECT_NE(OK, socket.LeaveGroup(group_ip)); | 559 EXPECT_NE(OK, socket.LeaveGroup(group_ip)); |
| 560 | 560 |
| 561 socket.Close(); | 561 socket.Close(); |
| 562 } | 562 } |
| 563 | 563 |
| 564 TEST_F(UDPSocketTest, MulticastOptions) { | 564 TEST_F(UDPSocketTest, MulticastOptions) { |
| 565 const int kPort = 9999; | 565 const uint16 kPort = 9999; |
| 566 IPEndPoint bind_address; | 566 IPEndPoint bind_address; |
| 567 CreateUDPAddress("0.0.0.0", kPort, &bind_address); | 567 CreateUDPAddress("0.0.0.0", kPort, &bind_address); |
| 568 | 568 |
| 569 UDPSocket socket(DatagramSocket::DEFAULT_BIND, | 569 UDPSocket socket(DatagramSocket::DEFAULT_BIND, |
| 570 RandIntCallback(), | 570 RandIntCallback(), |
| 571 NULL, | 571 NULL, |
| 572 NetLog::Source()); | 572 NetLog::Source()); |
| 573 // Before binding. | 573 // Before binding. |
| 574 EXPECT_EQ(OK, socket.SetMulticastLoopbackMode(false)); | 574 EXPECT_EQ(OK, socket.SetMulticastLoopbackMode(false)); |
| 575 EXPECT_EQ(OK, socket.SetMulticastLoopbackMode(true)); | 575 EXPECT_EQ(OK, socket.SetMulticastLoopbackMode(true)); |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 732 g_expected_traffic_type = QOSTrafficTypeExcellentEffort; | 732 g_expected_traffic_type = QOSTrafficTypeExcellentEffort; |
| 733 EXPECT_EQ(OK, client.SetDiffServCodePoint(DSCP_NO_CHANGE)); | 733 EXPECT_EQ(OK, client.SetDiffServCodePoint(DSCP_NO_CHANGE)); |
| 734 g_expected_dscp = DSCP_DEFAULT; | 734 g_expected_dscp = DSCP_DEFAULT; |
| 735 g_expected_traffic_type = QOSTrafficTypeBestEffort; | 735 g_expected_traffic_type = QOSTrafficTypeBestEffort; |
| 736 EXPECT_EQ(OK, client.SetDiffServCodePoint(DSCP_DEFAULT)); | 736 EXPECT_EQ(OK, client.SetDiffServCodePoint(DSCP_DEFAULT)); |
| 737 client.Close(); | 737 client.Close(); |
| 738 } | 738 } |
| 739 #endif | 739 #endif |
| 740 | 740 |
| 741 } // namespace net | 741 } // namespace net |
| OLD | NEW |