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

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
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 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 return 0; 80 return 0;
81 } 81 }
82 } 82 }
83 83
84 PP_Bool GetAddress(const PP_NetAddress_Private* addr, 84 PP_Bool GetAddress(const PP_NetAddress_Private* addr,
85 void* address, 85 void* address,
86 uint16_t address_size) { 86 uint16_t address_size) {
87 switch (GetFamilyInternal(addr)) { 87 switch (GetFamilyInternal(addr)) {
88 case AF_INET: { 88 case AF_INET: {
89 const sockaddr_in* a = reinterpret_cast<const sockaddr_in*>(addr->data); 89 const sockaddr_in* a = reinterpret_cast<const sockaddr_in*>(addr->data);
90 if (address_size >= sizeof(a->sin_addr.s_addr)) { 90 if (address_size >= sizeof(a->sin_addr.s_addr)) {
viettrungluu 2012/03/22 04:54:34 While you're here, could you get rid of the extra
Sergey Ulanov 2012/03/22 17:43:48 Done.
91 memcpy(address, &(a->sin_addr.s_addr), sizeof(a->sin_addr.s_addr)); 91 memcpy(address, &(a->sin_addr.s_addr), sizeof(a->sin_addr.s_addr));
92 return PP_TRUE; 92 return PP_TRUE;
93 } 93 }
94 break; 94 break;
95 } 95 }
96 case AF_INET6: { 96 case AF_INET6: {
97 const sockaddr_in6* a = reinterpret_cast<const sockaddr_in6*>(addr->data); 97 const sockaddr_in6* a = reinterpret_cast<const sockaddr_in6*>(addr->data);
98 if (address_size >= sizeof(a->sin6_addr.s6_addr)) { 98 if (address_size >= sizeof(a->sin6_addr.s6_addr)) {
99 memcpy(address, &(a->sin6_addr.s6_addr), sizeof(a->sin6_addr.s6_addr)); 99 memcpy(address, &(a->sin6_addr.s6_addr), sizeof(a->sin6_addr.s6_addr));
100 return PP_TRUE; 100 return PP_TRUE;
101 } 101 }
102 break; 102 break;
103 } 103 }
104 default: 104 default:
105 break; 105 break;
106 } 106 }
107 107
108 return PP_FALSE; 108 return PP_FALSE;
109 } 109 }
110 110
111 uint32_t GetScopeID(const PP_NetAddress_Private* addr) {
112 switch (GetFamilyInternal(addr)) {
113 case AF_INET6: {
114 const sockaddr_in6* a = reinterpret_cast<const sockaddr_in6*>(addr->data);
115 return ntohs(a->sin6_scope_id);
116 }
117 default:
118 return 0;
119 }
120 }
121
111 PP_Bool AreHostsEqual(const PP_NetAddress_Private* addr1, 122 PP_Bool AreHostsEqual(const PP_NetAddress_Private* addr1,
112 const PP_NetAddress_Private* addr2) { 123 const PP_NetAddress_Private* addr2) {
113 if (!NetAddressPrivateImpl::ValidateNetAddress(*addr1) || 124 if (!NetAddressPrivateImpl::ValidateNetAddress(*addr1) ||
114 !NetAddressPrivateImpl::ValidateNetAddress(*addr2)) 125 !NetAddressPrivateImpl::ValidateNetAddress(*addr2))
115 return PP_FALSE; 126 return PP_FALSE;
116 127
117 sa_family_t addr1_family = GetFamilyInternal(addr1); 128 sa_family_t addr1_family = GetFamilyInternal(addr1);
118 if (addr1_family != GetFamilyInternal(addr2)) 129 if (addr1_family != GetFamilyInternal(addr2))
119 return PP_FALSE; 130 return PP_FALSE;
120 131
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 a->sin6_family = AF_INET6; 334 a->sin6_family = AF_INET6;
324 a->sin6_addr = in6addr_any; 335 a->sin6_addr = in6addr_any;
325 } else { 336 } else {
326 sockaddr_in* a = reinterpret_cast<sockaddr_in*>(addr->data); 337 sockaddr_in* a = reinterpret_cast<sockaddr_in*>(addr->data);
327 addr->size = sizeof(*a); 338 addr->size = sizeof(*a);
328 a->sin_family = AF_INET; 339 a->sin_family = AF_INET;
329 a->sin_addr.s_addr = INADDR_ANY; 340 a->sin_addr.s_addr = INADDR_ANY;
330 } 341 }
331 } 342 }
332 343
344 void CreateFromIPv4Address(const uint8_t ip[4],
345 uint16_t port,
346 struct PP_NetAddress_Private* addr_out) {
347 memset(addr_out->data, 0,
348 arraysize(addr_out->data) * sizeof(addr_out->data[0]));
349 sockaddr_in* a = reinterpret_cast<sockaddr_in*>(addr_out->data);
dmichael (off chromium) 2012/03/21 19:33:17 nit: a is not a very good name
Sergey Ulanov 2012/03/21 19:44:51 It's consistent with the rest of the code in this
viettrungluu 2012/03/22 04:54:34 Right, and since it's probably my fault: I think t
350 addr_out->size = sizeof(*a);
351 a->sin_family = AF_INET;
352 memcpy(&(a->sin_addr), ip, sizeof(a->sin_addr));
353 a->sin_port = htons(port);
354 }
355
356 void CreateFromIPv6Address(const uint8_t ip[16],
357 uint32_t scope_id,
358 uint16_t port,
359 struct PP_NetAddress_Private* addr_out) {
360 memset(addr_out->data, 0,
361 arraysize(addr_out->data) * sizeof(addr_out->data[0]));
362 sockaddr_in6* a = reinterpret_cast<sockaddr_in6*>(addr_out->data);
363 addr_out->size = sizeof(*a);
364 a->sin6_family = AF_INET6;
365 memcpy(&(a->sin6_addr), ip, sizeof(a->sin6_addr));
366 a->sin6_port = htons(port);
367 a->sin6_scope_id = scope_id;
368 }
369
333 const PPB_NetAddress_Private_0_1 net_address_private_interface_0_1 = { 370 const PPB_NetAddress_Private_0_1 net_address_private_interface_0_1 = {
334 &AreEqual, 371 &AreEqual,
335 &AreHostsEqual, 372 &AreHostsEqual,
336 &Describe, 373 &Describe,
337 &ReplacePort, 374 &ReplacePort,
338 &GetAnyAddress 375 &GetAnyAddress
339 }; 376 };
340 377
341 const PPB_NetAddress_Private_1_0 net_address_private_interface_1_0 = { 378 const PPB_NetAddress_Private_1_0 net_address_private_interface_1_0 = {
342 &AreEqual, 379 &AreEqual,
343 &AreHostsEqual, 380 &AreHostsEqual,
344 &Describe, 381 &Describe,
345 &ReplacePort, 382 &ReplacePort,
346 &GetAnyAddress, 383 &GetAnyAddress,
347 &GetFamily, 384 &GetFamily,
348 &GetPort, 385 &GetPort,
349 &GetAddress 386 &GetAddress
350 }; 387 };
351 388
389 const PPB_NetAddress_Private_1_1 net_address_private_interface_1_1 = {
390 &AreEqual,
391 &AreHostsEqual,
392 &Describe,
393 &ReplacePort,
394 &GetAnyAddress,
395 &GetFamily,
396 &GetPort,
397 &GetAddress,
398 &GetScopeID,
399 &CreateFromIPv4Address,
400 &CreateFromIPv6Address
401 };
402
352 } // namespace 403 } // namespace
353 404
354 namespace thunk { 405 namespace thunk {
355 406
356 PPAPI_THUNK_EXPORT const PPB_NetAddress_Private_0_1* 407 PPAPI_THUNK_EXPORT const PPB_NetAddress_Private_0_1*
357 GetPPB_NetAddress_Private_0_1_Thunk() { 408 GetPPB_NetAddress_Private_0_1_Thunk() {
358 return &net_address_private_interface_0_1; 409 return &net_address_private_interface_0_1;
359 } 410 }
360 411
361 PPAPI_THUNK_EXPORT const PPB_NetAddress_Private_1_0* 412 PPAPI_THUNK_EXPORT const PPB_NetAddress_Private_1_0*
362 GetPPB_NetAddress_Private_1_0_Thunk() { 413 GetPPB_NetAddress_Private_1_0_Thunk() {
363 return &net_address_private_interface_1_0; 414 return &net_address_private_interface_1_0;
364 } 415 }
365 416
417 PPAPI_THUNK_EXPORT const PPB_NetAddress_Private_1_1*
418 GetPPB_NetAddress_Private_1_1_Thunk() {
419 return &net_address_private_interface_1_1;
420 }
421
366 } // namespace thunk 422 } // namespace thunk
367 423
368 // static 424 // static
369 const PP_NetAddress_Private NetAddressPrivateImpl::kInvalidNetAddress = { 0 }; 425 const PP_NetAddress_Private NetAddressPrivateImpl::kInvalidNetAddress = { 0 };
370 426
371 // static 427 // static
372 bool NetAddressPrivateImpl::ValidateNetAddress( 428 bool NetAddressPrivateImpl::ValidateNetAddress(
373 const PP_NetAddress_Private& addr) { 429 const PP_NetAddress_Private& addr) {
374 if (addr.size < sizeof(reinterpret_cast<sockaddr*>(0)->sa_family)) 430 if (addr.size < sizeof(reinterpret_cast<sockaddr*>(0)->sa_family))
375 return false; 431 return false;
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
453 net::IPEndPoint ip_end_point; 509 net::IPEndPoint ip_end_point;
454 if (!NetAddressToIPEndPoint(net_addr, &ip_end_point)) 510 if (!NetAddressToIPEndPoint(net_addr, &ip_end_point))
455 return false; 511 return false;
456 512
457 *address_list = net::AddressList::CreateFromIPAddress(ip_end_point.address(), 513 *address_list = net::AddressList::CreateFromIPAddress(ip_end_point.address(),
458 ip_end_point.port()); 514 ip_end_point.port());
459 return true; 515 return true;
460 } 516 }
461 517
462 } // namespace ppapi 518 } // namespace ppapi
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698