mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
134 lines
3.1 KiB
134 lines
3.1 KiB
|
|
#ifndef _LOCCLASS_
|
|
#define _LOCCLASS_
|
|
|
|
/*
|
|
|
|
Class __LOCATOR
|
|
|
|
*/
|
|
|
|
#include "locquery.h"
|
|
|
|
struct CACHEDNODE
|
|
{
|
|
struct CACHEDNODE * Next;
|
|
struct CACHEDNODE * Previous;
|
|
UICHAR ServerName[UNCLEN+1];
|
|
};
|
|
|
|
typedef CACHEDNODE * PCACHEDNODE;
|
|
|
|
#define CACHESIZE 4
|
|
|
|
class NATIVE_CLASS_LOCATOR
|
|
{
|
|
|
|
private:
|
|
|
|
protected:
|
|
|
|
MUTEX DataStructureMutex;
|
|
unsigned short * MasterLocator;
|
|
unsigned short * MasterLocatorStringBinding;
|
|
unsigned long State;
|
|
unsigned long SysType;
|
|
unsigned long IamMasterLocatorFlag;
|
|
unsigned long LocatorStartTime;
|
|
|
|
public:
|
|
virtual unsigned long QueryType(void)
|
|
{
|
|
return SysType;
|
|
}
|
|
|
|
virtual handle_t GetBindingToMasterLocator(int * Status);
|
|
virtual void SetupHelperRoutine();
|
|
virtual void DestroyBindingToMasterLocator();
|
|
virtual handle_t GetBindingToNamedLocator(
|
|
unsigned short * Server,
|
|
int * Status
|
|
);
|
|
virtual void SetIamMasterLocator();
|
|
virtual BOOL InqIfIamMasterLocator()
|
|
{
|
|
return(IamMasterLocatorFlag == TRUE);
|
|
}
|
|
|
|
virtual BOOL IsReplyNeeded(PQUERYLOCATOR Query);
|
|
virtual void ProcessMessage(PQUERYLOCATOR Query,
|
|
int *Status);
|
|
virtual void CacheThisServer(PUZ ServerName);
|
|
|
|
|
|
NATIVE_CLASS_LOCATOR(
|
|
IN unsigned long Type,
|
|
IN OUT int * Status
|
|
):DataStructureMutex(Status)
|
|
{
|
|
SysType = Type;
|
|
MasterLocatorStringBinding = 0;
|
|
MasterLocator = 0;
|
|
State = UNBOUND;
|
|
LocatorStartTime = CurrentTimeMS();
|
|
}
|
|
|
|
|
|
|
|
};
|
|
|
|
class DOMAIN_MACHINE_LOCATOR: public NATIVE_CLASS_LOCATOR
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
virtual handle_t GetBindingToMasterLocator(int * Status);
|
|
|
|
DOMAIN_MACHINE_LOCATOR(
|
|
unsigned long Type,
|
|
int * Status):NATIVE_CLASS_LOCATOR(Type, Status)
|
|
{
|
|
|
|
IamMasterLocatorFlag = (Type == ROLE_LMNT_PDC);
|
|
|
|
|
|
}
|
|
|
|
};
|
|
|
|
class WRKGRP_MACHINE_LOCATOR: public NATIVE_CLASS_LOCATOR
|
|
{
|
|
|
|
private:
|
|
|
|
PCACHEDNODE Head;
|
|
PCACHEDNODE Tail;
|
|
unsigned long CacheSize;
|
|
|
|
public:
|
|
|
|
virtual handle_t GetBindingToMasterLocator(int * Status);
|
|
|
|
WRKGRP_MACHINE_LOCATOR(
|
|
unsigned long Type,
|
|
int * Status):NATIVE_CLASS_LOCATOR(Type, Status)
|
|
{
|
|
|
|
IamMasterLocatorFlag = FALSE;
|
|
Head = Tail = (PCACHEDNODE) NULL;
|
|
CacheSize = 0;
|
|
}
|
|
|
|
void InsertCacheEntry(PCACHEDNODE pNode);
|
|
PCACHEDNODE DeleteCachedEntry(PCACHEDNODE pNode);
|
|
PCACHEDNODE FindCachedEntry(PUZ ServerName);
|
|
void TryBroadcastingForMasterLocator(void);
|
|
virtual void CacheThisServer(PUZ ServerName);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif // _LOCCLASS_
|