1/* 2 * Copyright (c) 2000-2004 Apple Computer, Inc. All Rights Reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. Please obtain a copy of the License at 10 * http://www.opensource.apple.com/apsl/ and read it before using this 11 * file. 12 * 13 * The Original Code and all software distributed under the License are 14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 18 * Please see the License for the specific language governing rights and 19 * limitations under the License. 20 * 21 * @APPLE_LICENSE_HEADER_END@ 22 */ 23 24 25// 26// hosts - value-semantics host identifier class 27// 28// @@@ use vector instead of set to preserve resolver-generated order? 29// @@@ preliminary implementation: at the very least, there'll be more subclasses (deferred, etc.) 30// 31#ifndef _H_HOSTS 32#define _H_HOSTS 33 34#include "ip++.h" 35#include <security_utilities/refcount.h> 36#include <set> 37 38 39namespace Security { 40namespace IPPlusPlus { 41 42 43// 44// Host identities 45// 46class Host { 47public: 48 Host(const char *form); 49 Host() { } 50 51 // equality is defined strongly: same host specification 52 bool operator == (const Host &other) const; 53 bool operator != (const Host &other) const { return !(*this == other); } 54 bool operator < (const Host &other) const; // for STL sorting 55 56 // inclusion (<=) is defined semi-weakly: greater subsumes smaller, same access specs 57 bool operator <= (const Host &other) const; 58 bool operator >= (const Host &other) const { return other <= *this; } 59 60 string name() const { return mSpec->name(); } 61 set<IPAddress> addresses() const { return mSpec->addresses(); } 62 63public: 64 class Spec : public RefCount { 65 public: 66 virtual ~Spec() { } 67 68 virtual set<IPAddress> addresses() const = 0; 69 virtual string name() const = 0; 70 71 private: 72 }; 73 74private: 75 RefPointer<Spec> mSpec; 76}; 77 78} // end namespace IPPlusPlus 79} // end namespace Security 80 81 82#endif /* _H_HOSTS */ 83