00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _NET_ADDRESS_HH
00022 #define _NET_ADDRESS_HH
00023
00024 #ifndef _HASH_TABLE_HH
00025 #include "HashTable.hh"
00026 #endif
00027
00028 #ifndef _NET_COMMON_H
00029 #include "NetCommon.h"
00030 #endif
00031
00032 #ifndef _USAGE_ENVIRONMENT_HH
00033 #include "UsageEnvironment.hh"
00034 #endif
00035
00036
00037
00038
00039 typedef u_int32_t netAddressBits;
00040
00041 class NetAddress {
00042 public:
00043 NetAddress(u_int8_t const* data,
00044 unsigned length = 4 );
00045 NetAddress(unsigned length = 4);
00046 NetAddress(NetAddress const& orig);
00047 NetAddress& operator=(NetAddress const& rightSide);
00048 virtual ~NetAddress();
00049
00050 unsigned length() const { return fLength; }
00051 u_int8_t const* data() const
00052 { return fData; }
00053
00054 private:
00055 void assign(u_int8_t const* data, unsigned length);
00056 void clean();
00057
00058 unsigned fLength;
00059 u_int8_t* fData;
00060 };
00061
00062 class NetAddressList {
00063 public:
00064 NetAddressList(char const* hostname);
00065 NetAddressList(NetAddressList const& orig);
00066 NetAddressList& operator=(NetAddressList const& rightSide);
00067 virtual ~NetAddressList();
00068
00069 unsigned numAddresses() const { return fNumAddresses; }
00070
00071 NetAddress const* firstAddress() const;
00072
00073
00074 class Iterator {
00075 public:
00076 Iterator(NetAddressList const& addressList);
00077 NetAddress const* nextAddress();
00078 private:
00079 NetAddressList const& fAddressList;
00080 unsigned fNextIndex;
00081 };
00082
00083 private:
00084 void assign(netAddressBits numAddresses, NetAddress** addressArray);
00085 void clean();
00086
00087 friend class Iterator;
00088 unsigned fNumAddresses;
00089 NetAddress** fAddressArray;
00090 };
00091
00092 typedef u_int16_t portNumBits;
00093
00094 class Port {
00095 public:
00096 Port(portNumBits num );
00097
00098 portNumBits num() const
00099 { return fPortNum; }
00100
00101 private:
00102 portNumBits fPortNum;
00103 #ifdef IRIX
00104 portNumBits filler;
00105 #endif
00106 };
00107
00108 UsageEnvironment& operator<<(UsageEnvironment& s, const Port& p);
00109
00110
00111
00112 class AddressPortLookupTable {
00113 public:
00114 AddressPortLookupTable();
00115 virtual ~AddressPortLookupTable();
00116
00117 void* Add(netAddressBits address1, netAddressBits address2,
00118 Port port, void* value);
00119
00120 Boolean Remove(netAddressBits address1, netAddressBits address2,
00121 Port port);
00122 void* Lookup(netAddressBits address1, netAddressBits address2,
00123 Port port);
00124
00125
00126
00127 class Iterator {
00128 public:
00129 Iterator(AddressPortLookupTable& table);
00130 virtual ~Iterator();
00131
00132 void* next();
00133
00134 private:
00135 HashTable::Iterator* fIter;
00136 };
00137
00138 private:
00139 friend class Iterator;
00140 HashTable* fTable;
00141 };
00142
00143
00144 Boolean IsMulticastAddress(netAddressBits address);
00145
00146 #endif