OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "nacl_io/socket/socket_node.h" | 5 #include "nacl_io/socket/socket_node.h" |
6 | 6 |
7 #include "nacl_io/ossocket.h" | 7 #include "nacl_io/ossocket.h" |
8 #ifdef PROVIDES_SOCKET_API | 8 #ifdef PROVIDES_SOCKET_API |
9 | 9 |
10 #include <errno.h> | 10 #include <errno.h> |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
150 return 0; | 150 return 0; |
151 | 151 |
152 PP_NetAddress_IPv4 ipv4; | 152 PP_NetAddress_IPv4 ipv4; |
153 PP_NetAddress_IPv6 ipv6; | 153 PP_NetAddress_IPv6 ipv6; |
154 | 154 |
155 if (PP_TRUE == NetInterface()->DescribeAsIPv4Address(addr, &ipv4)) { | 155 if (PP_TRUE == NetInterface()->DescribeAsIPv4Address(addr, &ipv4)) { |
156 sockaddr_in addr4; | 156 sockaddr_in addr4; |
157 addr4.sin_family = AF_INET; | 157 addr4.sin_family = AF_INET; |
158 addr4.sin_port = ipv4.port; | 158 addr4.sin_port = ipv4.port; |
159 memcpy(&addr4.sin_addr, ipv4.addr, sizeof(ipv4.addr)); | 159 memcpy(&addr4.sin_addr, ipv4.addr, sizeof(ipv4.addr)); |
160 len = sizeof(addr4); | |
jvoung (off chromium)
2014/06/03 19:24:23
Hmm, not sure of the point of the len argument the
Sam Clegg
2014/06/03 19:32:43
I think we should mimik the behavior of getsocknam
binji
2014/06/03 20:10:05
+1, the opengroup spec says the same thing. http:/
jvoung (off chromium)
2014/06/03 21:59:32
Done.
| |
160 memcpy(out_addr, &addr4, len); | 161 memcpy(out_addr, &addr4, len); |
161 | 162 |
162 // Returns required size not copied size like getpeername/getsockname. | 163 // Returns required size not like getpeername/getsockname. |
163 return sizeof(sockaddr_in); | 164 return len; |
164 } | 165 } |
165 | 166 |
166 if (PP_TRUE == NetInterface()->DescribeAsIPv6Address(addr, &ipv6)) { | 167 if (PP_TRUE == NetInterface()->DescribeAsIPv6Address(addr, &ipv6)) { |
167 sockaddr_in6 addr6; | 168 sockaddr_in6 addr6; |
168 addr6.sin6_family = AF_INET6; | 169 addr6.sin6_family = AF_INET6; |
169 addr6.sin6_port = ipv6.port; | 170 addr6.sin6_port = ipv6.port; |
170 memcpy(&addr6.sin6_addr, ipv6.addr, sizeof(ipv6.addr)); | 171 memcpy(&addr6.sin6_addr, ipv6.addr, sizeof(ipv6.addr)); |
172 len = sizeof(addr6); | |
171 memcpy(out_addr, &addr6, len); | 173 memcpy(out_addr, &addr6, len); |
172 | 174 |
173 // Returns required size not copied size like getpeername/getsockname. | 175 // Returns required size not like getpeername/getsockname. |
174 return sizeof(sockaddr_in6); | 176 return len; |
175 } | 177 } |
176 | 178 |
177 return 0; | 179 return 0; |
178 } | 180 } |
179 | 181 |
180 bool SocketNode::IsEquivalentAddress(PP_Resource addr1, PP_Resource addr2) { | 182 bool SocketNode::IsEquivalentAddress(PP_Resource addr1, PP_Resource addr2) { |
181 if (addr1 == addr2) | 183 if (addr1 == addr2) |
182 return true; | 184 return true; |
183 | 185 |
184 char data1[sizeof(sockaddr_in6)]; | 186 char data1[sizeof(sockaddr_in6)]; |
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
473 return 0; | 475 return 0; |
474 } | 476 } |
475 | 477 |
476 *len = ResourceToSockAddr(local_addr_, *len, addr); | 478 *len = ResourceToSockAddr(local_addr_, *len, addr); |
477 return 0; | 479 return 0; |
478 } | 480 } |
479 | 481 |
480 } // namespace nacl_io | 482 } // namespace nacl_io |
481 | 483 |
482 #endif // PROVIDES_SOCKET_API | 484 #endif // PROVIDES_SOCKET_API |
OLD | NEW |