#ifndef __CNetInfoPlugin_H__
#define __CNetInfoPlugin_H__ 1
#include <stdio.h>
#include <netinfo/ni_prot.h>
#include <CoreFoundation/CoreFoundation.h>
#include "CNodeRegister.h"
#include "PrivateTypes.h"
#include "DSMutexSemaphore.h"
#include "PluginData.h"
#include "CServerPlugin.h"
class CNiNodeList;
#define kstrLocalDot "."
#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 CNetInfoPlugin : public CServerPlugin
{
public:
CNetInfoPlugin ( FourCharCode inSig, const char *inName );
virtual ~CNetInfoPlugin ( void );
virtual sInt32 Validate ( const char *inVersionStr, const uInt32 inSignature );
virtual sInt32 Initialize ( void );
virtual sInt32 SetPluginState ( const uInt32 inState );
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 );
private:
static CNiNodeList *fNiNodeList;
static FourCharCode fToken;
CNodeRegister *fRegisterNodePtr;
DSMutexSemaphore fRegisterMutex;
uInt32 fState;
CFRunLoopRef fServerRunLoop;
time_t fTransitionCheckTime;
};
#endif // __CNetInfoPlugin_H__