#ifndef _SLPDALocator_
#define _SLPDALocator_
#pragma once
#include <DirectoryServiceCore/DSLThread.h>
#define CONFIG_DA_FIND 1*60*60 // once per hour
class SLPDALocator
{
public:
SLPDALocator ();
~SLPDALocator ();
static SLPDALocator* TheSLPDAL ( void );
void DoLookup ( void );
Boolean IsRunning ( void ) { return mIsRunning; }
void SetRunLoop ( CFRunLoopRef runLoop );
void Start ( void );
void DeleteSelfWhenFinished ( void ) { mDeleteSelfWhenFinished = true; }
SLPInternalError Initialize ( void* daadvert_callback, SLPHandle serverState );
SLPInternalError Initialize ( void );
void Kick ( void );
Boolean SafeToUse ( void ) { return this == mSelfPtr; };
Boolean FinishedFirstLookup ( void ) { return !mInitialDALookupStillPending; };
Boolean IsLookupInProgress ( void ) { return mLookupInProgress; }
void LookupInProgress ( void ) { mLookupInProgress = true; }
DATable* GetDATable ( void );
DATable* GetDATableForRequester ( void );
void LocateAndAddDA ( long addrOfDA );
void AskDAForScopeSponserInfo( long addrOfDA );
SLPHandle GetServerState ( void ) { return mServerState; }
protected:
SLPDALocator* mSelfPtr;
SLPHandle mServerState;
DATable* mDATable;
Boolean mDATableInitialized;
Boolean mIsRunning;
Boolean mLookupInProgress;
Boolean mTableReset;
Boolean mDeleteSelfWhenFinished;
Boolean mInitialDALookupStillPending;
Boolean mDALookupHasntHadAChanceToFindADAYet;
void* mDACallback;
SOCKET mSocket;
struct sockaddr_in mSockAddr_in;
long* mQueuedDAsToLookup;
long mNumQueuedDAsToLookup;
CFRunLoopRef mRunLoopRef;
CFRunLoopTimerRef mTimer;
};
#endif