#ifndef _CLDAPV3CONFIGS_H
#define _CLDAPV3CONFIGS_H
#include <map>
#include <string>
#include <CoreFoundation/CoreFoundation.h>
#include <DirectoryServiceCore/DSMutexSemaphore.h>
#include <DirectoryServiceCore/DSEventSemaphore.h>
#include "CLDAPNodeConfig.h"
#include "CLDAPDefines.h"
using namespace std;
class CLDAPConnection;
typedef map<string, CLDAPNodeConfig *> LDAPNodeConfigMap;
typedef LDAPNodeConfigMap::iterator LDAPNodeConfigMapI;
class CLDAPv3Configs
{
public:
CLDAPv3Configs ( UInt32 inSignature );
virtual ~CLDAPv3Configs ( void );
void RegisterAllNodes ( void );
void UnregisterAllNodes ( void );
char **GetDHCPBasedLDAPNodes ( UInt32 *outCount );
CFDataRef CopyLiveXMLConfig ( void );
SInt32 NewXMLConfig ( CFDataRef inXMLData );
SInt32 AddToXMLConfig ( CFDataRef inXMLData );
void UpdateSecurityPolicyForUUID ( const char *inNodeName,
CFStringRef inUUID,
CFDictionaryRef inConfiguredSecPolicy,
CFDictionaryRef inSupportedSecLevel );
void UpdateReplicaListForUUID ( const char *inNodeName,
CFStringRef inUUID,
CFArrayRef inReplicaHostnames,
CFArrayRef inWriteableHostnames );
void UpdateServerMappingsForUUID ( const char *inNodeName, CFStringRef inUUID, CFArrayRef inAttrTypeMapArray,
CFArrayRef inRecordTypeMapArray );
CLDAPConnection *CreateConnectionForNode ( const char *inNodeName );
SInt32 WriteServerMappings ( char *userName,
char *password,
CFDataRef inMappings );
void NetworkTransition ( void );
void PeriodicTask ( void );
void WaitForNodeRegistration ( void ) { fNodeRegistrationEvent.WaitForEvent(10); }
private:
LDAPNodeConfigMap fNodeConfigMap;
LDAPNodeConfigMap fDynamicNodeConfigMap;
DSMutexSemaphore fNodeConfigMapMutex;
DSMutexSemaphore fXMLConfigLock;
DSEventSemaphore fNodeRegistrationEvent;
UInt32 fPlugInSignature;
CFArrayRef fDHCPLDAPServers;
private:
SInt32 InitializeWithXML ( CFDataRef inXMLData );
SInt32 ReadXMLConfig ( CFDataRef *outXMLData );
SInt32 WriteXMLConfig ( CFDataRef inXMLData );
bool VerifyXML ( CFDataRef *inOutXMLData );
bool ConvertLDAPv2Config ( CFDataRef *inOutXMLData );
bool LocalServerIsReplica ( void );
bool CheckForDHCPPacket ( void );
void WatchForDHCPPacket ( void );
CFMutableDictionaryRef FindMatchingUUIDAndName ( CFDictionaryRef inConfig, const char *inNodeName, CFStringRef inUUID );
static void DHCPLDAPConfigNotification ( SCDynamicStoreRef cfStore, CFArrayRef changedKeys, void *inInfo );
static void DHCPPacketStateNotification ( SCDynamicStoreRef cfStore, CFArrayRef changedKeys, void *inInfo );
};
#endif