Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1507)

Side by Side Diff: ppapi/shared_impl/private/net_address_private_impl.cc

Issue 9722008: Add CreateFromIPv[46]Address() in PPB_NetAddress_Private. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ppapi/cpp/private/net_address_private.cc ('k') | ppapi/tests/test_net_address_private.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include <string.h> 7 #include <string.h>
8 8
9 #include <string> 9 #include <string>
10 10
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 return 0; 82 return 0;
83 } 83 }
84 } 84 }
85 85
86 PP_Bool GetAddress(const PP_NetAddress_Private* addr, 86 PP_Bool GetAddress(const PP_NetAddress_Private* addr,
87 void* address, 87 void* address,
88 uint16_t address_size) { 88 uint16_t address_size) {
89 switch (GetFamilyInternal(addr)) { 89 switch (GetFamilyInternal(addr)) {
90 case AF_INET: { 90 case AF_INET: {
91 const sockaddr_in* a = reinterpret_cast<const sockaddr_in*>(addr->data); 91 const sockaddr_in* a = reinterpret_cast<const sockaddr_in*>(addr->data);
92 if (address_size >= sizeof(a->sin_addr.s_addr)) { 92 if (address_size >= sizeof(a->sin_addr.s_addr)) {
93 memcpy(address, &(a->sin_addr.s_addr), sizeof(a->sin_addr.s_addr)); 93 memcpy(address, &(a->sin_addr.s_addr), sizeof(a->sin_addr.s_addr));
94 return PP_TRUE; 94 return PP_TRUE;
95 } 95 }
96 break; 96 break;
97 } 97 }
98 case AF_INET6: { 98 case AF_INET6: {
99 const sockaddr_in6* a = reinterpret_cast<const sockaddr_in6*>(addr->data); 99 const sockaddr_in6* a = reinterpret_cast<const sockaddr_in6*>(addr->data);
100 if (address_size >= sizeof(a->sin6_addr.s6_addr)) { 100 if (address_size >= sizeof(a->sin6_addr.s6_addr)) {
101 memcpy(address, &(a->sin6_addr.s6_addr), sizeof(a->sin6_addr.s6_addr)); 101 memcpy(address, &(a->sin6_addr.s6_addr), sizeof(a->sin6_addr.s6_addr));
102 return PP_TRUE; 102 return PP_TRUE;
103 } 103 }
104 break; 104 break;
105 } 105 }
106 default: 106 default:
107 break; 107 break;
108 } 108 }
109 109
110 return PP_FALSE; 110 return PP_FALSE;
111 } 111 }
112 112
113 uint32_t GetScopeID(const PP_NetAddress_Private* addr) {
114 switch (GetFamilyInternal(addr)) {
115 case AF_INET6: {
116 const sockaddr_in6* a = reinterpret_cast<const sockaddr_in6*>(addr->data);
117 return a->sin6_scope_id;
118 }
119 default:
120 return 0;
121 }
122 }
123
113 PP_Bool AreHostsEqual(const PP_NetAddress_Private* addr1, 124 PP_Bool AreHostsEqual(const PP_NetAddress_Private* addr1,
114 const PP_NetAddress_Private* addr2) { 125 const PP_NetAddress_Private* addr2) {
115 if (!NetAddressPrivateImpl::ValidateNetAddress(*addr1) || 126 if (!NetAddressPrivateImpl::ValidateNetAddress(*addr1) ||
116 !NetAddressPrivateImpl::ValidateNetAddress(*addr2)) 127 !NetAddressPrivateImpl::ValidateNetAddress(*addr2))
117 return PP_FALSE; 128 return PP_FALSE;
118 129
119 sa_family_t addr1_family = GetFamilyInternal(addr1); 130 sa_family_t addr1_family = GetFamilyInternal(addr1);
120 if (addr1_family != GetFamilyInternal(addr2)) 131 if (addr1_family != GetFamilyInternal(addr2))
121 return PP_FALSE; 132 return PP_FALSE;
122 133
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 a->sin6_family = AF_INET6; 336 a->sin6_family = AF_INET6;
326 a->sin6_addr = in6addr_any; 337 a->sin6_addr = in6addr_any;
327 } else { 338 } else {
328 sockaddr_in* a = reinterpret_cast<sockaddr_in*>(addr->data); 339 sockaddr_in* a = reinterpret_cast<sockaddr_in*>(addr->data);
329 addr->size = sizeof(*a); 340 addr->size = sizeof(*a);
330 a->sin_family = AF_INET; 341 a->sin_family = AF_INET;
331 a->sin_addr.s_addr = INADDR_ANY; 342 a->sin_addr.s_addr = INADDR_ANY;
332 } 343 }
333 } 344 }
334 345
346 void CreateFromIPv4Address(const uint8_t ip[4],
347 uint16_t port,
348 struct PP_NetAddress_Private* addr_out) {
349 memset(addr_out->data, 0,
350 arraysize(addr_out->data) * sizeof(addr_out->data[0]));
351 sockaddr_in* a = reinterpret_cast<sockaddr_in*>(addr_out->data);
352 addr_out->size = sizeof(*a);
353 a->sin_family = AF_INET;
354 memcpy(&(a->sin_addr), ip, sizeof(a->sin_addr));
355 a->sin_port = htons(port);
356 }
357
358 void CreateFromIPv6Address(const uint8_t ip[16],
359 uint32_t scope_id,
360 uint16_t port,
361 struct PP_NetAddress_Private* addr_out) {
362 memset(addr_out->data, 0,
363 arraysize(addr_out->data) * sizeof(addr_out->data[0]));
364 sockaddr_in6* a = reinterpret_cast<sockaddr_in6*>(addr_out->data);
365 addr_out->size = sizeof(*a);
366 a->sin6_family = AF_INET6;
367 memcpy(&(a->sin6_addr), ip, sizeof(a->sin6_addr));
368 a->sin6_port = htons(port);
369 a->sin6_scope_id = scope_id;
370 }
371
335 const PPB_NetAddress_Private_0_1 net_address_private_interface_0_1 = { 372 const PPB_NetAddress_Private_0_1 net_address_private_interface_0_1 = {
336 &AreEqual, 373 &AreEqual,
337 &AreHostsEqual, 374 &AreHostsEqual,
338 &Describe, 375 &Describe,
339 &ReplacePort, 376 &ReplacePort,
340 &GetAnyAddress 377 &GetAnyAddress
341 }; 378 };
342 379
343 const PPB_NetAddress_Private_1_0 net_address_private_interface_1_0 = { 380 const PPB_NetAddress_Private_1_0 net_address_private_interface_1_0 = {
344 &AreEqual, 381 &AreEqual,
345 &AreHostsEqual, 382 &AreHostsEqual,
346 &Describe, 383 &Describe,
347 &ReplacePort, 384 &ReplacePort,
348 &GetAnyAddress, 385 &GetAnyAddress,
349 &GetFamily, 386 &GetFamily,
350 &GetPort, 387 &GetPort,
351 &GetAddress 388 &GetAddress
352 }; 389 };
353 390
391 const PPB_NetAddress_Private_1_1 net_address_private_interface_1_1 = {
392 &AreEqual,
393 &AreHostsEqual,
394 &Describe,
395 &ReplacePort,
396 &GetAnyAddress,
397 &GetFamily,
398 &GetPort,
399 &GetAddress,
400 &GetScopeID,
401 &CreateFromIPv4Address,
402 &CreateFromIPv6Address
403 };
404
354 } // namespace 405 } // namespace
355 406
356 namespace thunk { 407 namespace thunk {
357 408
358 PPAPI_THUNK_EXPORT const PPB_NetAddress_Private_0_1* 409 PPAPI_THUNK_EXPORT const PPB_NetAddress_Private_0_1*
359 GetPPB_NetAddress_Private_0_1_Thunk() { 410 GetPPB_NetAddress_Private_0_1_Thunk() {
360 return &net_address_private_interface_0_1; 411 return &net_address_private_interface_0_1;
361 } 412 }
362 413
363 PPAPI_THUNK_EXPORT const PPB_NetAddress_Private_1_0* 414 PPAPI_THUNK_EXPORT const PPB_NetAddress_Private_1_0*
364 GetPPB_NetAddress_Private_1_0_Thunk() { 415 GetPPB_NetAddress_Private_1_0_Thunk() {
365 return &net_address_private_interface_1_0; 416 return &net_address_private_interface_1_0;
366 } 417 }
367 418
419 PPAPI_THUNK_EXPORT const PPB_NetAddress_Private_1_1*
420 GetPPB_NetAddress_Private_1_1_Thunk() {
421 return &net_address_private_interface_1_1;
422 }
423
368 } // namespace thunk 424 } // namespace thunk
369 425
370 // static 426 // static
371 const PP_NetAddress_Private NetAddressPrivateImpl::kInvalidNetAddress = { 0 }; 427 const PP_NetAddress_Private NetAddressPrivateImpl::kInvalidNetAddress = { 0 };
372 428
373 // static 429 // static
374 bool NetAddressPrivateImpl::ValidateNetAddress( 430 bool NetAddressPrivateImpl::ValidateNetAddress(
375 const PP_NetAddress_Private& addr) { 431 const PP_NetAddress_Private& addr) {
376 if (addr.size < sizeof(reinterpret_cast<sockaddr*>(0)->sa_family)) 432 if (addr.size < sizeof(reinterpret_cast<sockaddr*>(0)->sa_family))
377 return false; 433 return false;
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
455 net::IPEndPoint ip_end_point; 511 net::IPEndPoint ip_end_point;
456 if (!NetAddressToIPEndPoint(net_addr, &ip_end_point)) 512 if (!NetAddressToIPEndPoint(net_addr, &ip_end_point))
457 return false; 513 return false;
458 514
459 *address_list = net::AddressList::CreateFromIPAddress(ip_end_point.address(), 515 *address_list = net::AddressList::CreateFromIPAddress(ip_end_point.address(),
460 ip_end_point.port()); 516 ip_end_point.port());
461 return true; 517 return true;
462 } 518 }
463 519
464 } // namespace ppapi 520 } // namespace ppapi
OLDNEW
« no previous file with comments | « ppapi/cpp/private/net_address_private.cc ('k') | ppapi/tests/test_net_address_private.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698