ip_address.cc revision 2aa9707f114ab8166f45df5726bf05278df2aef6
11d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart// Copyright (c) 2011 The Chromium OS Authors. All rights reserved. 21d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart// Use of this source code is governed by a BSD-style license that can be 31d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart// found in the LICENSE file. 41d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart 51d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart#include "shill/ip_address.h" 61d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart 72aa9707f114ab8166f45df5726bf05278df2aef6Chris Masone#include <arpa/inet.h> 81d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart#include <netinet/in.h> 91d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart 101d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart#include <string> 111d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart 121d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart#include "shill/byte_string.h" 131d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart 141d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewartnamespace shill { 151d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart 162aa9707f114ab8166f45df5726bf05278df2aef6Chris Masone// static 172aa9707f114ab8166f45df5726bf05278df2aef6Chris Masoneconst IPAddress::Family IPAddress::kAddressFamilyUnknown = AF_UNSPEC; 182aa9707f114ab8166f45df5726bf05278df2aef6Chris Masone// static 192aa9707f114ab8166f45df5726bf05278df2aef6Chris Masoneconst IPAddress::Family IPAddress::kAddressFamilyIPv4 = AF_INET; 202aa9707f114ab8166f45df5726bf05278df2aef6Chris Masone// static 212aa9707f114ab8166f45df5726bf05278df2aef6Chris Masoneconst IPAddress::Family IPAddress::kAddressFamilyIPv6 = AF_INET6; 222aa9707f114ab8166f45df5726bf05278df2aef6Chris Masone 231d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul StewartIPAddress::IPAddress(Family family, const ByteString &address) 241d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart : family_(family) , 251d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart address_(address) {} 261d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart 271d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul StewartIPAddress::IPAddress(Family family) 281d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart : family_(family) {} 291d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart 301d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul StewartIPAddress::~IPAddress() {} 311d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart 321d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewartint IPAddress::GetAddressLength(Family family) { 331d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart switch (family) { 341d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart case kAddressFamilyIPv4: 351d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart return sizeof(in_addr); 361d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart case kAddressFamilyIPv6: 371d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart return sizeof(in6_addr); 381d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart default: 391d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart return 0; 401d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart } 411d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart} 421d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart 431d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewartbool IPAddress::SetAddressFromString(const std::string &address_string) { 441d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart int address_length = GetAddressLength(family_); 451d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart 461d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart if (!address_length) { 471d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart return false; 481d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart } 491d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart 501d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart ByteString address(address_length); 511d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart if (inet_pton(family_, address_string.c_str(), address.GetData()) <= 0) { 521d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart return false; 531d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart } 541d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart address_ = address; 551d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart return true; 561d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart} 571d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart 581d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewartvoid IPAddress::SetAddressToDefault() { 591d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart address_ = ByteString(GetAddressLength(family_)); 601d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart} 611d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart 621d18e8cd593cc8dce91a6faabe2f0cae700b7e38Paul Stewart} // namespace shill 63