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

Side by Side Diff: webrtc/base/ipaddress.cc

Issue 1516163003: Add "x"s in the end of a stripped IPv6 address string. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Fixed typo. Rebase. Created 5 years 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
« no previous file with comments | « no previous file | webrtc/base/ipaddress_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #if defined(WEBRTC_POSIX) 11 #if defined(WEBRTC_POSIX)
12 #include <sys/types.h> 12 #include <sys/types.h>
13 #include <sys/socket.h> 13 #include <sys/socket.h>
14 #include <netinet/in.h> 14 #include <netinet/in.h>
15 #ifdef OPENBSD 15 #ifdef OPENBSD
16 #include <netinet/in_systm.h> 16 #include <netinet/in_systm.h>
17 #endif 17 #endif
18 #ifndef __native_client__ 18 #ifndef __native_client__
19 #include <netinet/ip.h> 19 #include <netinet/ip.h>
20 #endif 20 #endif
21 #include <arpa/inet.h> 21 #include <arpa/inet.h>
22 #include <netdb.h> 22 #include <netdb.h>
23 #include <unistd.h> 23 #include <unistd.h>
24 #endif 24 #endif
25 25
26 #include <stdio.h> 26 #include <stdio.h>
27 27
28 #include "webrtc/base/ipaddress.h" 28 #include "webrtc/base/ipaddress.h"
29 #include "webrtc/base/byteorder.h" 29 #include "webrtc/base/byteorder.h"
30 #include "webrtc/base/checks.h"
30 #include "webrtc/base/nethelpers.h" 31 #include "webrtc/base/nethelpers.h"
31 #include "webrtc/base/logging.h" 32 #include "webrtc/base/logging.h"
32 #include "webrtc/base/win32.h" 33 #include "webrtc/base/win32.h"
33 34
34 namespace rtc { 35 namespace rtc {
35 36
36 // Prefixes used for categorizing IPv6 addresses. 37 // Prefixes used for categorizing IPv6 addresses.
37 static const in6_addr kV4MappedPrefix = {{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38 static const in6_addr kV4MappedPrefix = {{{0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
38 0xFF, 0xFF, 0}}}; 39 0xFF, 0xFF, 0}}};
39 static const in6_addr k6To4Prefix = {{{0x20, 0x02, 0}}}; 40 static const in6_addr k6To4Prefix = {{{0x20, 0x02, 0}}};
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 case AF_INET: { 151 case AF_INET: {
151 std::string address = ToString(); 152 std::string address = ToString();
152 size_t find_pos = address.rfind('.'); 153 size_t find_pos = address.rfind('.');
153 if (find_pos == std::string::npos) 154 if (find_pos == std::string::npos)
154 return std::string(); 155 return std::string();
155 address.resize(find_pos); 156 address.resize(find_pos);
156 address += ".x"; 157 address += ".x";
157 return address; 158 return address;
158 } 159 }
159 case AF_INET6: { 160 case AF_INET6: {
160 // TODO(grunell): Return a string of format 1:2:3:x:x:x:x:x or such 161 // Remove the last 5 groups (80 bits).
161 // instead of zeroing out. 162 std::string address = TruncateIP(*this, 128 - 80).ToString();
162 return TruncateIP(*this, 128 - 80).ToString(); 163
164 // If all three remaining groups are written out explicitly in the string,
165 // remove one of the two trailing colons before appending the stripped
166 // groups as "x"s. There should be max 4 colons (2 between the 3 groups +
167 // 2 trailing) in the truncated address string.
168 size_t number_of_colons = std::count(address.begin(), address.end(), ':');
169 RTC_CHECK_LE(number_of_colons, 4u);
170 if (number_of_colons > 3)
171 address.resize(address.length() - 1);
172
173 return address + "x:x:x:x:x";
163 } 174 }
164 } 175 }
165 return std::string(); 176 return std::string();
166 #endif 177 #endif
167 } 178 }
168 179
169 IPAddress IPAddress::Normalized() const { 180 IPAddress IPAddress::Normalized() const {
170 if (family_ != AF_INET6) { 181 if (family_ != AF_INET6) {
171 return *this; 182 return *this;
172 } 183 }
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after
507 if (family == AF_INET) { 518 if (family == AF_INET) {
508 return rtc::IPAddress(INADDR_ANY); 519 return rtc::IPAddress(INADDR_ANY);
509 } 520 }
510 if (family == AF_INET6) { 521 if (family == AF_INET6) {
511 return rtc::IPAddress(in6addr_any); 522 return rtc::IPAddress(in6addr_any);
512 } 523 }
513 return rtc::IPAddress(); 524 return rtc::IPAddress();
514 } 525 }
515 526
516 } // Namespace rtc 527 } // Namespace rtc
OLDNEW
« no previous file with comments | « no previous file | webrtc/base/ipaddress_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698