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 "ppapi/shared_impl/private/net_address_private_impl.h" | 5 #include "ppapi/shared_impl/private/net_address_private_impl.h" |
6 | 6 |
7 #if defined(OS_WIN) | 7 #if defined(OS_WIN) |
8 #include <windows.h> | 8 #include <windows.h> |
9 #include <winsock2.h> | 9 #include <winsock2.h> |
10 #include <ws2tcpip.h> | 10 #include <ws2tcpip.h> |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 // IPv4 addresses are 4 bytes. IPv6 are 16 bytes. Addresses are stored in net | 85 // IPv4 addresses are 4 bytes. IPv6 are 16 bytes. Addresses are stored in net |
86 // order (big-endian), which only affects IPv6 addresses, which consist of 8 | 86 // order (big-endian), which only affects IPv6 addresses, which consist of 8 |
87 // 16-bit components. These will be byte-swapped on small-endian hosts. | 87 // 16-bit components. These will be byte-swapped on small-endian hosts. |
88 uint8_t address[kIPv6AddressSize]; | 88 uint8_t address[kIPv6AddressSize]; |
89 }; | 89 }; |
90 | 90 |
91 // Make sure that sizeof(NetAddress) is the same for all compilers. This ensures | 91 // Make sure that sizeof(NetAddress) is the same for all compilers. This ensures |
92 // that the alignment is the same on both sides of the NaCl proxy, which is | 92 // that the alignment is the same on both sides of the NaCl proxy, which is |
93 // important because we serialize and deserialize PP_NetAddress_Private by | 93 // important because we serialize and deserialize PP_NetAddress_Private by |
94 // simply copying the raw bytes. | 94 // simply copying the raw bytes. |
95 COMPILE_ASSERT(sizeof(NetAddress) == 28, | 95 static_assert(sizeof(NetAddress) == 28, |
96 NetAddress_different_for_compiler); | 96 "NetAddress different for compiler"); |
97 | 97 |
98 // Make sure the storage in |PP_NetAddress_Private| is big enough. (Do it here | 98 // Make sure the storage in |PP_NetAddress_Private| is big enough. (Do it here |
99 // since the data is opaque elsewhere.) | 99 // since the data is opaque elsewhere.) |
100 COMPILE_ASSERT(sizeof(reinterpret_cast<PP_NetAddress_Private*>(0)->data) >= | 100 static_assert(sizeof(reinterpret_cast<PP_NetAddress_Private*>(0)->data) >= |
101 sizeof(NetAddress), | 101 sizeof(NetAddress), |
102 PP_NetAddress_Private_data_too_small); | 102 "PP_NetAddress_Private data too small"); |
103 | 103 |
104 size_t GetAddressSize(const NetAddress* net_addr) { | 104 size_t GetAddressSize(const NetAddress* net_addr) { |
105 return net_addr->is_ipv6 ? kIPv6AddressSize : kIPv4AddressSize; | 105 return net_addr->is_ipv6 ? kIPv6AddressSize : kIPv4AddressSize; |
106 } | 106 } |
107 | 107 |
108 // Convert to embedded struct if it has been initialized. | 108 // Convert to embedded struct if it has been initialized. |
109 NetAddress* ToNetAddress(PP_NetAddress_Private* addr) { | 109 NetAddress* ToNetAddress(PP_NetAddress_Private* addr) { |
110 if (!addr || addr->size != sizeof(NetAddress)) | 110 if (!addr || addr->size != sizeof(NetAddress)) |
111 return NULL; | 111 return NULL; |
112 return reinterpret_cast<NetAddress*>(addr->data); | 112 return reinterpret_cast<NetAddress*>(addr->data); |
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
549 PP_NetAddress_IPv4* ipv4_addr) { | 549 PP_NetAddress_IPv4* ipv4_addr) { |
550 if (!ipv4_addr) | 550 if (!ipv4_addr) |
551 return false; | 551 return false; |
552 | 552 |
553 const NetAddress* net_addr = ToNetAddress(&addr); | 553 const NetAddress* net_addr = ToNetAddress(&addr); |
554 if (!IsValid(net_addr) || net_addr->is_ipv6) | 554 if (!IsValid(net_addr) || net_addr->is_ipv6) |
555 return false; | 555 return false; |
556 | 556 |
557 ipv4_addr->port = ConvertToNetEndian16(net_addr->port); | 557 ipv4_addr->port = ConvertToNetEndian16(net_addr->port); |
558 | 558 |
559 COMPILE_ASSERT(sizeof(ipv4_addr->addr) == kIPv4AddressSize, | 559 static_assert(sizeof(ipv4_addr->addr) == kIPv4AddressSize, |
560 mismatched_IPv4_address_size); | 560 "mismatched IPv4 address size"); |
561 memcpy(ipv4_addr->addr, net_addr->address, kIPv4AddressSize); | 561 memcpy(ipv4_addr->addr, net_addr->address, kIPv4AddressSize); |
562 | 562 |
563 return true; | 563 return true; |
564 } | 564 } |
565 | 565 |
566 // static | 566 // static |
567 bool NetAddressPrivateImpl::DescribeNetAddressPrivateAsIPv6Address( | 567 bool NetAddressPrivateImpl::DescribeNetAddressPrivateAsIPv6Address( |
568 const PP_NetAddress_Private& addr, | 568 const PP_NetAddress_Private& addr, |
569 PP_NetAddress_IPv6* ipv6_addr) { | 569 PP_NetAddress_IPv6* ipv6_addr) { |
570 if (!ipv6_addr) | 570 if (!ipv6_addr) |
571 return false; | 571 return false; |
572 | 572 |
573 const NetAddress* net_addr = ToNetAddress(&addr); | 573 const NetAddress* net_addr = ToNetAddress(&addr); |
574 if (!IsValid(net_addr) || !net_addr->is_ipv6) | 574 if (!IsValid(net_addr) || !net_addr->is_ipv6) |
575 return false; | 575 return false; |
576 | 576 |
577 ipv6_addr->port = ConvertToNetEndian16(net_addr->port); | 577 ipv6_addr->port = ConvertToNetEndian16(net_addr->port); |
578 | 578 |
579 COMPILE_ASSERT(sizeof(ipv6_addr->addr) == kIPv6AddressSize, | 579 static_assert(sizeof(ipv6_addr->addr) == kIPv6AddressSize, |
580 mismatched_IPv6_address_size); | 580 "mismatched IPv6 address size"); |
581 memcpy(ipv6_addr->addr, net_addr->address, kIPv6AddressSize); | 581 memcpy(ipv6_addr->addr, net_addr->address, kIPv6AddressSize); |
582 | 582 |
583 return true; | 583 return true; |
584 } | 584 } |
585 | 585 |
586 } // namespace ppapi | 586 } // namespace ppapi |
OLD | NEW |