blob: 7ff79fed789a87fbe88ed9af468a58849703ed12 [file] [log] [blame]
// Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SHILL_IP_ADDRESS_
#define SHILL_IP_ADDRESS_
#include <arpa/inet.h>
#include <string>
#include "shill/byte_string.h"
namespace shill {
class IPAddress {
public:
typedef unsigned char Family;
static const Family kAddressFamilyUnknown = AF_UNSPEC;
static const Family kAddressFamilyIPv4 = AF_INET;
static const Family kAddressFamilyIPv6 = AF_INET6;
explicit IPAddress(Family family);
IPAddress(Family family, const ByteString &address);
~IPAddress();
// Static utilities
// Get the length in bytes of addresses of the given family
static int GetAddressLength(Family family);
// Getters and Setters
Family family() const { return family_; }
const ByteString &address() const { return address_; }
const unsigned char *GetConstData() const { return address_.GetConstData(); }
int GetLength() const { return address_.GetLength(); }
bool IsDefault() const { return address_.IsZero(); }
bool IsValid() const {
return family_ != kAddressFamilyUnknown &&
GetLength() == GetAddressLength(family_);
}
// Parse an IP address string
bool SetAddressFromString(const std::string &address_string);
// An uninitialized IPAddress is empty and invalid when constructed.
// Use SetAddressToDefault() to set it to the default or "all-zeroes" address.
void SetAddressToDefault();
bool Equals(const IPAddress &b) const {
return family_ == b.family_ && address_.Equals(b.address_);
}
void Clone(const IPAddress &b) {
family_ = b.family_;
address_ = b.address_;
}
private:
Family family_;
ByteString address_;
DISALLOW_COPY_AND_ASSIGN(IPAddress);
};
} // namespace shill
#endif // SHILL_IP_ADDRESS_