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

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

Issue 8537026: Pepper: Implement PPB_NetAddress_Private Describe() for IPv4 on Windows. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: oops Created 9 years, 1 month 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 | « no previous file | no next file » | 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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
11 #include "base/basictypes.h" 11 #include "base/basictypes.h"
12 #include "base/logging.h"
13 #include "base/stringprintf.h"
12 #include "build/build_config.h" 14 #include "build/build_config.h"
13 #include "net/base/net_util.h" 15 #include "net/base/net_util.h"
14 #include "net/base/sys_addrinfo.h" 16 #include "net/base/sys_addrinfo.h"
15 #include "net/base/sys_byteorder.h" 17 #include "net/base/sys_byteorder.h"
16 #include "ppapi/c/pp_var.h" 18 #include "ppapi/c/pp_var.h"
17 #include "ppapi/c/private/ppb_net_address_private.h" 19 #include "ppapi/c/private/ppb_net_address_private.h"
18 #include "ppapi/shared_impl/var.h" 20 #include "ppapi/shared_impl/var.h"
19 #include "ppapi/thunk/thunk.h" 21 #include "ppapi/thunk/thunk.h"
20 22
21 // The net address interface doesn't have a normal C -> C++ thunk since it 23 // The net address interface doesn't have a normal C -> C++ thunk since it
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 87
86 return PP_FALSE; 88 return PP_FALSE;
87 } 89 }
88 90
89 PP_Var Describe(PP_Module module, 91 PP_Var Describe(PP_Module module,
90 const struct PP_NetAddress_Private* addr, 92 const struct PP_NetAddress_Private* addr,
91 PP_Bool include_port) { 93 PP_Bool include_port) {
92 if (!NetAddressPrivateImpl::ValidateNetAddress(*addr)) 94 if (!NetAddressPrivateImpl::ValidateNetAddress(*addr))
93 return PP_MakeUndefined(); 95 return PP_MakeUndefined();
94 96
97 #if defined(OS_WIN)
98 // On Windows, |NetAddressToString()| doesn't work in the sandbox.
99 // TODO(viettrungluu): Consider switching to this everywhere once it's fully
100 // implemented.
101 switch (GetFamily(*addr)) {
102 case AF_INET: {
103 const sockaddr_in* a = reinterpret_cast<const sockaddr_in*>(addr->data);
104 unsigned ip = ntohl(a->sin_addr.s_addr);
105 unsigned port = ntohs(a->sin_port);
106 std::string description = base::StringPrintf(
107 "%u.%u.%u.%u",
108 (ip >> 24) & 0xff, (ip >> 16) & 0xff, (ip >> 8) & 0xff, ip & 0xff);
109 if (include_port)
110 description.append(base::StringPrintf(":%u", port));
111 return StringVar::StringToPPVar(module, description);
112 }
113 case AF_INET6:
114 // TODO(viettrungluu): crbug.com/103969
115 NOTIMPLEMENTED();
116 break;
117 default:
118 NOTREACHED();
119 break;
120 }
121 return PP_MakeUndefined();
122 #else
95 const sockaddr* a = reinterpret_cast<const sockaddr*>(addr->data); 123 const sockaddr* a = reinterpret_cast<const sockaddr*>(addr->data);
96 socklen_t l = addr->size; 124 socklen_t l = addr->size;
97 std::string description = 125 std::string description =
98 include_port ? net::NetAddressToStringWithPort(a, l) : 126 include_port ? net::NetAddressToStringWithPort(a, l) :
99 net::NetAddressToString(a, l); 127 net::NetAddressToString(a, l);
100 return StringVar::StringToPPVar(module, description); 128 return StringVar::StringToPPVar(module, description);
129 #endif
101 } 130 }
102 131
103 PP_Bool ReplacePort(const struct PP_NetAddress_Private* src_addr, 132 PP_Bool ReplacePort(const struct PP_NetAddress_Private* src_addr,
104 uint16_t port, 133 uint16_t port,
105 struct PP_NetAddress_Private* dest_addr) { 134 struct PP_NetAddress_Private* dest_addr) {
106 if (!NetAddressPrivateImpl::ValidateNetAddress(*src_addr)) 135 if (!NetAddressPrivateImpl::ValidateNetAddress(*src_addr))
107 return PP_FALSE; 136 return PP_FALSE;
108 137
109 if (GetFamily(*src_addr) == AF_INET) { 138 if (GetFamily(*src_addr) == AF_INET) {
110 memmove(dest_addr, src_addr, sizeof(*src_addr)); 139 memmove(dest_addr, src_addr, sizeof(*src_addr));
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 197
169 // Ditto for AF_INET6. 198 // Ditto for AF_INET6.
170 if (GetFamily(addr) == AF_INET6 && addr.size >= sizeof(sockaddr_in6)) 199 if (GetFamily(addr) == AF_INET6 && addr.size >= sizeof(sockaddr_in6))
171 return true; 200 return true;
172 201
173 // Reject everything else. 202 // Reject everything else.
174 return false; 203 return false;
175 } 204 }
176 205
177 } // namespace ppapi 206 } // namespace ppapi
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698