#import <Foundation/Foundation.h>
#import <PasswordServer/ReplicaFileDefs.h>
@interface ReplicaFile : NSObject {
CFMutableDictionaryRef mReplicaDict;
CFMutableArrayRef mFlatReplicaArray;
BOOL mDirty;
struct timespec mReplicaFileModDate;
CFStringRef mSelfName;
BOOL mRunningAsParent;
}
-(id)init;
-(id)initWithPList:(CFDictionaryRef)xmlPList;
-(id)initWithContentsOfFile:(const char *)filePath;
-(id)initWithXMLStr:(const char *)xmlStr;
-(void)initCommon;
-(void)dealloc;
-free DEPRECATED_ATTRIBUTE;
-(void)lock;
-(void)unlock;
-(ReplicaChangeStatus)mergeReplicaList:(ReplicaFile *)inOtherList;
-(void)mergeReplicaListDecommissionedList:(ReplicaFile *)inOtherList changeStatus:(ReplicaChangeStatus *)inOutChangeStatus;
-(void)mergeReplicaListParentRecords:(ReplicaFile *)inOtherList changeStatus:(ReplicaChangeStatus *)inOutChangeStatus;
-(void)mergeReplicaListReplicas:(ReplicaFile *)inOtherList changeStatus:(ReplicaChangeStatus *)inOutChangeStatus;
-(void)mergeReplicaListLegacyTigerReplicaList:(ReplicaFile *)inOtherList changeStatus:(ReplicaChangeStatus *)inOutChangeStatus;
-(BOOL)mergeReplicaValuesFrom:(CFMutableDictionaryRef)dict1 to:(CFMutableDictionaryRef)dict2 parent:(BOOL)isParent;
-(BOOL)needsMergeFrom:(CFMutableDictionaryRef)dict1 to:(CFMutableDictionaryRef)dict2;
-(PWSReplicaEntry *)snapshotOfReplicasForServer:(CFDictionaryRef)serverDict;
-(void)serverStruct:(PWSReplicaEntry *)sEnt forServerDict:(CFDictionaryRef)serverDict;
-(CFMutableDictionaryRef)getParentOfReplica:(CFDictionaryRef)replicaDict;
-(BOOL)array:(CFArrayRef)replicaArray containsReplicaWithName:(CFStringRef)targetNameString;
-(ReplicaPolicy)getReplicaPolicy;
-(void)setReplicaPolicy:(ReplicaPolicy)inPolicy;
-(void)emptyFlatReplicaArray;
-(unsigned long)replicaCount;
-(unsigned long)replicaCount:(CFDictionaryRef)inReplicaDict;
-(CFDictionaryRef)getReplica:(unsigned long)index;
-(BOOL)isActive;
-(CFStringRef)getUniqueID;
-(CFStringRef)currentServerForLDAP;
-(CFDictionaryRef)getParent;
-(CFStringRef)xmlString;
-(BOOL)fileHasChanged;
-(void)refreshIfNeeded;
-(CFStringRef)calcServerUniqueID:(const char *)inRSAPublicKey;
-(void)addServerUniqueID:(const char *)inRSAPublicKey;
-(void)setParentWithIP:(const char *)inIPStr andDNS:(const char *)inDNSStr;
-(void)setParentWithDict:(CFDictionaryRef)inParentData;
-(CFMutableDictionaryRef)addReplicaWithIP:(const char *)inIPStr andDNS:(const char *)inDNSStr withParent:(CFMutableDictionaryRef)inParentDict;
-(CFMutableDictionaryRef)addReplica:(CFMutableDictionaryRef)inReplicaData withParent:(CFMutableDictionaryRef)inParentDict;
-(void)addReplicaToLegacyTigerList:(CFMutableDictionaryRef)inReplicaData;
-(BOOL)addIPAddress:(const char *)inIPStr toReplica:(CFMutableDictionaryRef)inReplicaDict;
-(void)addIPAddress:(const char *)inNewIPStr orReplaceIP:(const char *)inOldIPStr inReplica:(CFMutableDictionaryRef)inReplicaDict;
-(CFMutableArrayRef)getIPAddressesFromDict:(CFDictionaryRef)inReplicaDict;
-(int)saveXMLData;
-(int)saveXMLDataToFile:(const char *)inSaveFile;
-(void)stripSyncDates;
-(CFDateRef)oldestSyncDate;
-(ReplicaRole)roleForReplica:(CFStringRef)replicaName;
-(SInt64)lowTIDForReplica:(CFStringRef)replicaName;
-(SInt64)lowTID;
-(SInt64)highTID;
-(BOOL)decommissionReplica:(CFStringRef)replicaName;
-(BOOL)replicaIsNotDecommissioned:(CFStringRef)replicaNameString;
-(void)recommisionReplica:(const char *)replicaName;
-(BOOL)replicaHasBeenPromotedToMaster:(CFMutableDictionaryRef)inRepDict;
-(void)stripDecommissionedArray;
-(void)divorceAllReplicas;
-(void)allocateIDRangeOfSize:(UInt32)count forReplica:(CFStringRef)inReplicaName minID:(UInt32)inMinID;
-(void)getIDRangeForReplica:(CFStringRef)inReplicaName start:(UInt32 *)outStart end:(UInt32 *)outEnd;
-(void)getIDRangeStart:(UInt32 *)outStart end:(UInt32 *)outEnd forReplica:(CFDictionaryRef)inReplicaDict;
-(void)setSyncDate:(CFDateRef)date forReplica:(CFStringRef)inReplicaName;
-(void)setSyncDate:(CFDateRef)date andHighTID:(SInt64)tid forReplica:(CFStringRef)inReplicaName;
-(void)setEntryModDateForReplica:(CFMutableDictionaryRef)inReplicaDict;
-(void)setSyncAttemptDateForReplica:(CFStringRef)inReplicaName;
-(void)setKey:(CFStringRef)key withDate:(CFDateRef)date forReplicaWithName:(CFStringRef)inReplicaName;
-(void)setKey:(CFStringRef)key withDate:(CFDateRef)date forReplica:(CFMutableDictionaryRef)inReplicaDict;
-(CFMutableDictionaryRef)getReplicaByName:(CFStringRef)inReplicaName;
-(CFStringRef)getNameOfReplica:(CFMutableDictionaryRef)inReplicaDict;
-(CFStringRef)getNameFromIPAddress:(const char *)inIPAddress;
-(UInt8)getReplicaSyncPolicy:(CFDictionaryRef)inReplicaDict;
-(UInt8)getReplicaSyncPolicy:(CFDictionaryRef)inReplicaDict defaultPolicy:(UInt8)inDefaultPolicy;
-(BOOL)setReplicaSyncPolicy:(UInt8)policy forReplica:(CFStringRef)inReplicaName;
-(BOOL)setReplicaSyncPolicyWithString:(CFStringRef)inPolicyString forReplica:(CFMutableDictionaryRef)inRepDict;
-(UInt8)getReplicaSyncPolicyForString:(CFStringRef)inPolicyString;
-(ReplicaStatus)getReplicaStatus:(CFDictionaryRef)inReplicaDict;
-(void)setReplicaStatus:(ReplicaStatus)status forReplica:(CFMutableDictionaryRef)repDict;
-(CFStringRef)selfName;
-(void)setSelfName:(CFStringRef)selfName;
-(BOOL)getCStringFromDictionary:(CFDictionaryRef)inDict forKey:(CFStringRef)inKey maxLen:(long)inMaxLen result:(char *)outString;
-(BOOL)dirty;
-(void)setDirty:(BOOL)dirty;
-(BOOL)isOldFormat;
-(void)updateFormat;
-(void)runningAsParent:(BOOL)parent;
-(BOOL)isHappy;
-(CFStringRef)getNextReplicaName;
-(int)statReplicaFile:(const char *)inFilePath andGetModDate:(struct timespec *)outModDate;
-(int)loadXMLData:(const char *)inFilePath;
-(CFMutableArrayRef)getArrayForKey:(CFStringRef)key;
-(void)getIDRangeOfSize:(UInt32)count after:(const char *)inMyLastID start:(char *)outFirstID end:(char *)outLastID;
-(int)setIDRangeStart:(const char *)inFirstID end:(const char *)inLastID forReplica:(CFMutableDictionaryRef)inServerDict;
-(CFMutableDictionaryRef)findMatchToKey:(CFStringRef)inKey withValue:(CFStringRef)inValue;
-(CFMutableDictionaryRef)replicaDict;
@end