/*++ Module Name: RepSet.h Abstract: --*/ #ifndef __REPSET_H_ #define __REPSET_H_ #include "resource.h" // main symbols #include "dfsenums.h" #include "netutils.h" #include "ldaputils.h" #include using namespace std; class CFrsMember; class CDfsAlternate { public: CComBSTR m_bstrServer; CComBSTR m_bstrShare; CFrsMember* m_pFrsMember; }; class CFrsMember { public: CComBSTR m_bstrServer; CComBSTR m_bstrSite; CComBSTR m_bstrDomain; CComBSTR m_bstrServerGuid; CComBSTR m_bstrRootPath; CComBSTR m_bstrStagingPath; CComBSTR m_bstrMemberDN; CComBSTR m_bstrComputerDN; CComBSTR m_bstrSubscriberDN; public: // // InitEx does query DS to retrieve related info // HRESULT InitEx( PLDAP i_pldap, // points to the i_bstrMemberDN's DS BSTR i_bstrDC, // domain controller pointed by i_pldap BSTR i_bstrMemberDN, // FQDN of nTFRSMember object BSTR i_bstrComputerDN = NULL // FQDN of computer object ); // // Init does NOT query DS // HRESULT Init( IN BSTR i_bstrDnsHostName, IN BSTR i_bstrComputerDomain, IN BSTR i_bstrComputerGuid, IN BSTR i_bstrRootPath, IN BSTR i_bstrStagingPath, IN BSTR i_bstrMemberDN, IN BSTR i_bstrComputerDN, IN BSTR i_bstrSubscriberDN ); CFrsMember* Copy(); private: void _ReSet(); HRESULT _GetMemberInfo( PLDAP i_pldap, // points to the i_bstrMemberDN's DS BSTR i_bstrDC, // domain controller pointed by i_pldap BSTR i_bstrMemberDN, // FQDN of nTFRSMember object BSTR i_bstrComputerDN = NULL // FQDN of computer object ); HRESULT _GetSubscriberInfo ( PLDAP i_pldap, // points to the i_bstrComputerDN's DS BSTR i_bstrComputerDN, // FQDN of the computer object BSTR i_bstrMemberDN // FQDN of the corresponding nTFRSMember object ); HRESULT _GetComputerInfo ( PLDAP i_pldap, // points to the i_bstrComputerDN's DS BSTR i_bstrComputerDN // FQDN of the computer object ); }; class CFrsConnection { public: CComBSTR m_bstrConnectionDN; CComBSTR m_bstrFromMemberDN; CComBSTR m_bstrToMemberDN; BOOL m_bEnable; DWORD m_dwOptions; // // Init Does NOT query DS // HRESULT Init( BSTR i_bstrConnectionDN, BSTR i_bstrFromMemberDN, BOOL i_bEnable, DWORD i_dwOptions ); CFrsConnection* Copy(); protected: void _ReSet(); }; typedef list CDfsAlternateList; typedef list CFrsMemberList; typedef list CFrsConnectionList; void FreeDfsAlternates(CDfsAlternateList* pList); void FreeFrsMembers(CFrsMemberList* pList); void FreeFrsConnections(CFrsConnectionList* pList); class ATL_NO_VTABLE CReplicaSet : public CComObjectRootEx, public CComCoClass, public IDispatchImpl { public: CReplicaSet(); ~CReplicaSet(); DECLARE_REGISTRY_RESOURCEID(IDR_REPLICASET) DECLARE_PROTECT_FINAL_CONSTRUCT() BEGIN_COM_MAP(CReplicaSet) COM_INTERFACE_ENTRY(IReplicaSet) COM_INTERFACE_ENTRY(IDispatch) END_COM_MAP() // IReplicaSet STDMETHOD(get_Type)( /* [retval][out] */ BSTR __RPC_FAR *pVal); STDMETHOD(put_Type)( /* [in] */ BSTR newVal); STDMETHOD(get_TopologyPref)( /* [retval][out] */ BSTR __RPC_FAR *pVal); STDMETHOD(put_TopologyPref)( /* [in] */ BSTR newVal); STDMETHOD(get_HubMemberDN)( /* [retval][out] */ BSTR __RPC_FAR *pVal); STDMETHOD(put_HubMemberDN)( /* [in] */ BSTR newVal); STDMETHOD(get_PrimaryMemberDN)( /* [retval][out] */ BSTR __RPC_FAR *pVal); STDMETHOD(put_PrimaryMemberDN)( /* [in] */ BSTR newVal); STDMETHOD(get_FileFilter)( /* [retval][out] */ BSTR __RPC_FAR *pVal); STDMETHOD(put_FileFilter)( /* [in] */ BSTR newVal); STDMETHOD(get_DirFilter)( /* [retval][out] */ BSTR __RPC_FAR *pVal); STDMETHOD(put_DirFilter)( /* [in] */ BSTR newVal); STDMETHOD(get_DfsEntryPath)( /* [retval][out] */ BSTR __RPC_FAR *pVal); STDMETHOD(get_Domain)( /* [retval][out] */ BSTR __RPC_FAR *pVal); STDMETHOD(get_ReplicaSetDN)( /* [retval][out] */ BSTR __RPC_FAR *pVal); STDMETHOD(get_NumOfMembers)( /* [retval][out] */ long __RPC_FAR *pVal); STDMETHOD(get_NumOfConnections)( /* [retval][out] */ long __RPC_FAR *pVal); STDMETHOD(get_TargetedDC)( /* [retval][out] */ BSTR __RPC_FAR *pVal); STDMETHOD(Create)( /* [in] */ BSTR i_bstrDomain, /* [in] */ BSTR i_bstrReplicaSetDN, /* [in] */ BSTR i_bstrType, /* [in] */ BSTR i_bstrTopologyPref, /* [in] */ BSTR i_bstrHubMemberDN, /* [in] */ BSTR i_bstrPrimaryMemberDN, /* [in] */ BSTR i_bstrFileFilter, /* [in] */ BSTR i_bstrDirFilter ); STDMETHOD(Initialize)( /* [in] */ BSTR i_bstrDomain, /* [in] */ BSTR i_bstrReplicaSetDN); STDMETHOD(GetMemberList)( /* [retval][out] */ VARIANT __RPC_FAR *o_pvarMemberDNs); STDMETHOD(GetMemberListEx)( /* [retval][out] */ VARIANT __RPC_FAR *o_pVal); STDMETHOD(GetMemberInfo)( /* [in] */ BSTR i_bstrMemberDN, /* [retval][out] */ VARIANT __RPC_FAR *o_pvarMember); STDMETHOD(IsFRSMember)( /* [in] */ BSTR i_bstrDnsHostName, /* [in] */ BSTR i_bstrRootPath); STDMETHOD(IsHubMember)( /* [in] */ BSTR i_bstrDnsHostName, /* [in] */ BSTR i_bstrRootPath); STDMETHOD(AddMember)( /* [in] */ BSTR i_bstrServer, /* [in] */ BSTR i_bstrRootPath, /* [in] */ BSTR i_bstrStagingPath, /* [in] */ BOOL i_bAddConnectionNow, /* [retval][out] */ BSTR __RPC_FAR *o_pbstrMemberDN); STDMETHOD(RemoveMember)( /* [in] */ BSTR i_bstrMemberDN); STDMETHOD(RemoveMemberEx)( /* [in] */ BSTR i_bstrDnsHostName, /* [in] */ BSTR i_bstrRootPath); STDMETHOD(RemoveAllMembers)(); STDMETHOD(GetConnectionList)( /* [retval][out] */ VARIANT __RPC_FAR *o_pvarConnectionDNs); STDMETHOD(GetConnectionListEx)( /* [retval][out] */ VARIANT __RPC_FAR *o_pVal); STDMETHOD(GetConnectionInfo)( /* [in] */ BSTR i_bstrConnectionDN, /* [retval][out] */ VARIANT __RPC_FAR *o_pvarConnection); STDMETHOD(AddConnection)( /* [in] */ BSTR i_bstrFromMemberDN, /* [in] */ BSTR i_bstrToMemberDN, /* [in] */ BOOL i_bEnable, /* [in] */ BOOL i_bSyncImmediately, /* [in] */ long i_nPriority, /* [retval][out] */ BSTR __RPC_FAR *o_pbstrConnectionDN); STDMETHOD(RemoveConnection)( /* [in] */ BSTR i_bstrConnectionDN); STDMETHOD(RemoveConnectionEx)( /* [in] */ BSTR i_bstrFromMemberDN, /* [in] */ BSTR i_bstrToMemberDN); STDMETHOD(RemoveAllConnections)(); STDMETHOD(EnableConnection)( /* [in] */ BSTR i_bstrConnectionDN, /* [in] */ BOOL i_bEnable); STDMETHOD(EnableConnectionEx)( /* [in] */ BSTR i_bstrFromMemberDN, /* [in] */ BSTR i_bstrToMemberDN, /* [in] */ BOOL i_bEnable); STDMETHOD(GetConnectionSchedule)( /* [in] */ BSTR i_bstrConnectionDN, /* [retval][out] */ VARIANT* o_pVar); STDMETHOD(GetConnectionScheduleEx)( /* [in] */ BSTR i_bstrFromMemberDN, /* [in] */ BSTR i_bstrToMemberDN, /* [retval][out] */ VARIANT* o_pVar); STDMETHOD(SetConnectionSchedule)( /* [in] */ BSTR i_bstrConnectionDN, /* [in] */ VARIANT* i_pVar); STDMETHOD(SetConnectionScheduleEx)( /* [in] */ BSTR i_bstrFromMemberDN, /* [in] */ BSTR i_bstrToMemberDN, /* [in] */ VARIANT* i_pVar); STDMETHOD(SetScheduleOnAllConnections)( /* [in] */ VARIANT* i_pVar); STDMETHOD(SetConnectionOptions)( /* [in] */ BSTR i_bstrConnectionDN, /* [in] */ BOOL i_bSyncImmediately, /* [in] */ long i_nPriority); STDMETHOD(SetConnectionOptionsEx)( /* [in] */ BSTR i_bstrFromMemberDN, /* [in] */ BSTR i_bstrToMemberDN, /* [in] */ BOOL i_bSyncImmediately, /* [in] */ long i_nPriority); STDMETHOD(CreateConnections)(); STDMETHOD(Delete)(); STDMETHOD(GetBadMemberInfo)( /* [in] */ BSTR i_bstrServerName, /* [retval][out] */ VARIANT __RPC_FAR *o_pvarMember); protected: void _FreeMemberVariables(); HRESULT _PopulateMemberList(); HRESULT _PopulateConnectionList(); HRESULT _DeleteMember(CFrsMember* pFrsMember); HRESULT _DeleteConnection(CFrsConnection* pFrsConnection); HRESULT _GetMemberInfo(CFrsMember* i_pFrsMember, VARIANT* o_pvarMember); HRESULT _GetConnectionInfo(CFrsConnection* i_pFrsConnection, VARIANT* o_pvarConnection); HRESULT _SetCustomTopologyPref(); HRESULT _AdjustConnectionsAdd(BSTR i_bstrNewMemberDN, BSTR i_bstrSite); HRESULT _RemoveConnectionsFromAndTo(CFrsMember* pFrsMember); HRESULT _GetConnectionSchedule(BSTR i_bstrConnectionDN, VARIANT* o_pVar); protected: CComBSTR m_bstrType; CComBSTR m_bstrTopologyPref; CComBSTR m_bstrHubMemberDN; CComBSTR m_bstrPrimaryMemberDN; CComBSTR m_bstrFileFilter; CComBSTR m_bstrDirFilter; CComBSTR m_bstrDfsEntryPath; CComBSTR m_bstrReplicaSetDN; CDfsAlternateList m_dfsAlternateList; CFrsMemberList m_frsMemberList; CFrsConnectionList m_frsConnectionList; PLDAP m_pldap; CComBSTR m_bstrDomain; CComBSTR m_bstrDomainGuid; CComBSTR m_bstrDC; BOOL m_bNewSchema; }; #endif //__REPSET_H_