NetAddressList Class Reference

#include <NetAddress.hh>

Collaboration diagram for NetAddressList:

Collaboration graph
[legend]

Public Member Functions

 NetAddressList (char const *hostname)
 NetAddressList (NetAddressList const &orig)
NetAddressListoperator= (NetAddressList const &rightSide)
virtual ~NetAddressList ()
unsigned numAddresses () const
NetAddress const * firstAddress () const

Private Member Functions

void assign (netAddressBits numAddresses, NetAddress **addressArray)
void clean ()

Private Attributes

unsigned fNumAddresses
NetAddress ** fAddressArray

Friends

class Iterator

Data Structures

class  Iterator

Detailed Description

Definition at line 62 of file NetAddress.hh.


Constructor & Destructor Documentation

NetAddressList::NetAddressList ( char const *  hostname  ) 

Definition at line 84 of file NetAddress.cpp.

References fAddressArray, fNumAddresses, if(), INADDR_NONE, NULL, our_gethostbyname(), and our_inet_addr().

00085   : fNumAddresses(0), fAddressArray(NULL) {
00086     struct hostent* host;
00087 
00088     // Check first whether "hostname" is an IP address string:
00089     netAddressBits addr = our_inet_addr((char*)hostname);
00090     if (addr != INADDR_NONE) { // yes it was an IP address string
00091       //##### host = gethostbyaddr((char*)&addr, sizeof (netAddressBits), AF_INET);
00092       host = NULL; // don't bother calling gethostbyaddr(); we only want 1 addr
00093 
00094       if (host == NULL) {
00095         // For some unknown reason, gethostbyaddr() failed, so just
00096         // return a 1-element list with the address we were given:
00097         fNumAddresses = 1;
00098         fAddressArray = new NetAddress*[fNumAddresses];
00099         if (fAddressArray == NULL) return;
00100 
00101         fAddressArray[0] = new NetAddress((u_int8_t*)&addr,
00102                                           sizeof (netAddressBits));
00103         return;
00104       }
00105     } else { // Try resolving "hostname" as a real host name
00106 
00107 #if defined(VXWORKS)
00108       char hostentBuf[512];
00109       host = (struct hostent*)resolvGetHostByName((char*)hostname,(char*)&hostentBuf,sizeof hostentBuf);
00110 #else
00111       host = our_gethostbyname((char*)hostname);
00112 #endif
00113 
00114       if (host == NULL) {
00115         // It was a host name, and we couldn't resolve it.  We're SOL.
00116         return;
00117       }
00118     }
00119 
00120     u_int8_t const** const hAddrPtr
00121       = (u_int8_t const**)host->h_addr_list;
00122     if (hAddrPtr != NULL) {
00123       // First, count the number of addresses:
00124       u_int8_t const** hAddrPtr1 = hAddrPtr;
00125       while (*hAddrPtr1 != NULL) {
00126         ++fNumAddresses;
00127         ++hAddrPtr1;
00128       }
00129 
00130       // Next, set up the list:
00131       fAddressArray = new NetAddress*[fNumAddresses];
00132       if (fAddressArray == NULL) return;
00133 
00134       for (unsigned i = 0; i < fNumAddresses; ++i) {
00135         fAddressArray[i]
00136           = new NetAddress(hAddrPtr[i], host->h_length);
00137       }
00138     }
00139 }

NetAddressList::NetAddressList ( NetAddressList const &  orig  ) 

Definition at line 141 of file NetAddress.cpp.

References assign(), fAddressArray, and numAddresses().

00141                                                          {
00142   assign(orig.numAddresses(), orig.fAddressArray);
00143 }

NetAddressList::~NetAddressList (  )  [virtual]

Definition at line 153 of file NetAddress.cpp.

References clean().

00153                                 {
00154   clean();
00155 }


Member Function Documentation

NetAddressList & NetAddressList::operator= ( NetAddressList const &  rightSide  ) 

Definition at line 145 of file NetAddress.cpp.

References assign(), clean(), fAddressArray, and numAddresses().

00145                                                                          {
00146   if (&rightSide != this) {
00147     clean();
00148     assign(rightSide.numAddresses(), rightSide.fAddressArray);
00149   }
00150   return *this;
00151 }

unsigned NetAddressList::numAddresses (  )  const [inline]

Definition at line 69 of file NetAddress.hh.

References fNumAddresses.

Referenced by MediaSubsession::connectionEndpointAddress(), getSDPDescriptionFromURL(), main(), NetAddressList(), NetAddressList::Iterator::nextAddress(), operator=(), RTSPClient::parseRTSPURL(), SIPClient::parseSIPURL(), parseSourceFilterAttribute(), and DarwinInjector::setDestination().

00069 { return fNumAddresses; }

NetAddress const * NetAddressList::firstAddress (  )  const

Definition at line 177 of file NetAddress.cpp.

References fAddressArray, fNumAddresses, and NULL.

Referenced by MediaSubsession::connectionEndpointAddress(), getSDPDescriptionFromURL(), main(), RTSPClient::parseRTSPURL(), SIPClient::parseSIPURL(), parseSourceFilterAttribute(), and DarwinInjector::setDestination().

00177                                                      {
00178   if (fNumAddresses == 0) return NULL;
00179 
00180   return fAddressArray[0];
00181 }

void NetAddressList::assign ( netAddressBits  numAddresses,
NetAddress **  addressArray 
) [private]

Referenced by NetAddressList(), and operator=().

void NetAddressList::clean (  )  [private]

Definition at line 170 of file NetAddress.cpp.

References fAddressArray, fNumAddresses, and NULL.

Referenced by operator=(), and ~NetAddressList().

00170                            {
00171   while (fNumAddresses-- > 0) {
00172     delete fAddressArray[fNumAddresses];
00173   }
00174   delete[] fAddressArray; fAddressArray = NULL;
00175 }


Friends And Related Function Documentation

friend class Iterator [friend]

Definition at line 87 of file NetAddress.hh.


Field Documentation

unsigned NetAddressList::fNumAddresses [private]

Definition at line 88 of file NetAddress.hh.

Referenced by clean(), firstAddress(), NetAddressList(), and numAddresses().

NetAddress** NetAddressList::fAddressArray [private]

Definition at line 89 of file NetAddress.hh.

Referenced by clean(), firstAddress(), NetAddressList(), NetAddressList::Iterator::nextAddress(), and operator=().


The documentation for this class was generated from the following files:
Generated on Tue Oct 7 15:40:03 2008 for live by  doxygen 1.5.2