#ifndef __CNetInfoPI_H__
#define __CNetInfoPI_H__ 1
#include <stdio.h>
#include <netinfo/ni_prot.h>
#include <CoreFoundation/CoreFoundation.h>
#include "CDSServerModule.h"
#include "CNodeRegister.h"
#include "PrivateTypes.h"
#include "DSMutexSemaphore.h"
class CNiNodeList;
#define kstrDelimiter "/"
#define kstrNetInfoName "NetInfo"
#define kstrRootOnly "root"
#define kstrPrefixName "/NetInfo"
#define kstrRootName "/NetInfo/"
#define kstrRootNodeName "/NetInfo/root"
#define kstrLocalDomain "/NetInfo/."
#define kstrParentDomain "/NetInfo/.."
class CNetInfoPI : public CDSServerModule
{
typedef enum
{
kUnknown = 0x00000000,
ktInited = 0x00000001,
kActive = 0x00000002,
kFailedToInti = 0x00000004
} ePlugInState;
public:
CNetInfoPI ( void );
virtual ~CNetInfoPI ( void );
virtual sInt32 Validate ( const char *inVersionStr, const uInt32 inSignature );
virtual sInt32 Initialize ( void );
virtual sInt32 PeriodicTask ( void );
virtual sInt32 ProcessRequest ( void *inData );
static sInt32 SafeOpen ( const char *inDomainName, sInt32 inTimeoutSecs, ni_id *outNiDirID, void **outDomain, char **outDomName );
static sInt32 SafeClose ( const char *inDomainName );
static void WakeUpRequests ( void );
static sInt32 UnregisterNode ( const uInt32 inToken, tDataList *inNode );
void NodeRegisterComplete( CNodeRegister *aRegisterThread );
void ReDiscoverNetwork ( void );
protected:
void WaitForInit ( void );
void HandleMultipleNetworkTransitions ( void );
public:
static char *fLocalDomainName;
private:
static CNiNodeList *fNiNodeList;
static uInt32 fSignature;
CNodeRegister *fRegisterNodePtr;
DSMutexSemaphore fRegisterMutex;
uInt32 fState;
CFRunLoopRef fServerRunLoop;
time_t fTransitionCheckTime;
};
#endif // __CNetInfoPI_H__