1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "net/base/host_port_pair.h" 63345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/string_util.h" 83345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/stringprintf.h" 93345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "googleurl/src/gurl.h" 10dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "net/base/net_util.h" 11dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "net/base/sys_addrinfo.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace net { 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 153345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickHostPortPair::HostPortPair() : port_(0) {} 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochHostPortPair::HostPortPair(const std::string& in_host, uint16 in_port) 173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick : host_(in_host), port_(in_port) {} 183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// static 203345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickHostPortPair HostPortPair::FromURL(const GURL& url) { 213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return HostPortPair(url.HostNoBrackets(), url.EffectiveIntPort()); 223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 24dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// static 25dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenHostPortPair HostPortPair::FromAddrInfo(const struct addrinfo* ai) { 26dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen return HostPortPair(NetAddressToString(ai), 27dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen GetPortFromSockaddr(ai->ai_addr, ai->ai_addrlen)); 28dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen} 29dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstd::string HostPortPair::ToString() const { 313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return base::StringPrintf("%s:%u", HostForURL().c_str(), port_); 323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickstd::string HostPortPair::HostForURL() const { 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Check to see if the host is an IPv6 address. If so, added brackets. 363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (host_.find(':') != std::string::npos) { 373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DCHECK_NE(host_[0], '['); 383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return base::StringPrintf("[%s]", host_.c_str()); 393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return host_; 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} // namespace net 45