DSNetworkUtilities.h [plain text]
#ifndef __DSNetworkUtilities_h__
#define __DSNetworkUtilities_h__ 1
#include <sys/param.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <arpa/nameser.h> // DNS
#include <resolv.h> // resolver global state
#include "DSMutexSemaphore.h"
#define MAXIPADDRSTRLEN 32
typedef char IPAddrStr[ MAXIPADDRSTRLEN ];
enum { kMaxHostNameLength = 255 };
typedef u_short InetPort;
typedef u_long InetHost;
typedef char InetDomainName[ kMaxHostNameLength + 1 ];
typedef struct MSInetHostInfo
{
InetDomainName name;
InetHost addrs[ 32 ];
} MSInetHostInfo;
typedef struct MultiHomeIPInfo {
InetHost IPAddress; IPAddrStr IPAddressString; InetDomainName DNSName; MultiHomeIPInfo *pNext;
} MultiHomeIPInfo;
typedef struct IPAddressInfo {
InetHost addr;
char addrStr[MAXIPADDRSTRLEN];
} IPAddressInfo;
const short kPrimaryIPAddr = 0;
const short kMaxIPAddrs = 32;
const OSStatus kMAPRBLKnownSpammerResult = -10101;
const OSStatus kNoValidIPAddress4ThisName = -10102;
class DSNetworkUtilities
{
public:
enum { kDNSQuerySuccess = 0,
kDNSQueryFailure,
kDNSNotAvailable,
kTCPNotAvailable
};
static OSStatus Initialize ( void );
static void DeInitialize ( void );
static Boolean IsTCPAvailable ( void ) { return sTCPAvailable; }
static int GetOurIPAddressCount ( void ) { return sIPAddrCount; }
static InetHost GetOurIPAddress ( short inIndex = kPrimaryIPAddr );
static const char * GetOurIPAddressString ( short inIndex = kPrimaryIPAddr );
static Boolean DoesIPAddrMatch ( InetHost inIPAddr );
static Boolean IsValidAddressString ( const char *inAddrStr, InetHost *outInetHost );
static InetHost GetIPAddressByName ( const char *inName );
static int IPAddrToString ( const InetHost inAddr, char *ioNameBuffer, const int inBufferSize);
static int StringToIPAddr ( const char *inAddrStr, InetHost *ioIPAddr );
static OSStatus ResolveToIPAddress ( const InetDomainName inDomainName, InetHost* outInetHost );
protected:
static int InitializeTCP ( void );
static void Signal ( void );
static long Wait ( sInt32 milliSecs = DSSemaphore::kForever );
static Boolean sNetworkInitialized;
static Boolean sTCPAvailable;
static short sIPAddrCount;
static MultiHomeIPInfo *sIPInfo;
static DSMutexSemaphore *sNetSemaphore;
};
#endif // __DSNetworkUtilities_h__