/*++ Copyright (c) 1996 Microsoft Corporation Module Name: feedinfo.h Abstract: Defines the CFeed class that maintains all properties about a feed. Author: Magnus Hedlund (MagnusH) -- Revision History: --*/ #ifndef _FEEDINFO_INCLUDED_ #define _FEEDINFO_INCLUDED_ // Dependencies #include "cmultisz.h" #include "metakey.h" typedef struct _NNTP_FEED_INFO NNTP_FEED_INFO, * LPNNTP_FEED_INFO; typedef DWORD FEED_TYPE; // // Forward declarations: // class CFeed; class CFeedPair; class CFeedPairList; NNTP_FEED_SERVER_TYPE FeedTypeToEnum ( FEED_TYPE ft ); void EnumToFeedType ( NNTP_FEED_SERVER_TYPE type, FEED_TYPE & ftMask ); //$------------------------------------------------------------------- // // Class: // CFeed // // Description: // //-------------------------------------------------------------------- class CFeed { friend class CFeedPair; friend class CFeedPairList; public: // // Creating CFeed objects: // static HRESULT CreateFeed ( CFeed ** ppNewFeed ); static HRESULT CreateFeedFromFeedInfo ( LPNNTP_FEED_INFO pFeedInfo, CFeed ** ppNewFeed ); static HRESULT CreateFeedFromINntpOneWayFeed ( INntpOneWayFeed * pFeed, CFeed ** ppNewFeed ); CFeed ( ); ~CFeed ( ); void Destroy (); const CFeed & operator= ( const CFeed & feed ); inline const CFeed & operator= ( const NNTP_FEED_INFO & feed ) { FromFeedInfo ( &feed ); return *this; } // // Conversion routines: // HRESULT ToFeedInfo ( LPNNTP_FEED_INFO pFeedInfo ); HRESULT FromFeedInfo ( const NNTP_FEED_INFO * pFeedInfo ); HRESULT ToINntpOneWayFeed ( INntpOneWayFeed ** ppFeed ); HRESULT FromINntpOneWayFeed ( INntpOneWayFeed * pFeed ); // // Communicating changes to the service: // HRESULT Add ( LPCWSTR strServer, DWORD dwInstance, CMetabaseKey* pMK ); HRESULT Remove ( LPCWSTR strServer, DWORD dwInstance, CMetabaseKey* pMK ); HRESULT Set ( LPCWSTR strServer, DWORD dwInstance, CMetabaseKey* pMK ); HRESULT SetPairId ( LPCWSTR strServer, DWORD dwInstance, DWORD dwPairId, CMetabaseKey* pMK ); // Feed Properties: public: DWORD m_dwFeedId; DWORD m_dwPairFeedId; FEED_TYPE m_FeedType; BOOL m_fAllowControlMessages; DWORD m_dwAuthenticationType; DWORD m_dwConcurrentSessions; BOOL m_fCreateAutomatically; BOOL m_fEnabled; CMultiSz m_mszDistributions; DWORD m_dwFeedInterval; DATE m_datePullNews; DWORD m_dwMaxConnectionAttempts; CMultiSz m_mszNewsgroups; DWORD m_dwSecurityType; DWORD m_dwOutgoingPort; CComBSTR m_strUucpName; CComBSTR m_strAccountName; CComBSTR m_strPassword; CComBSTR m_strTempDirectory; // // CFeedPair sets these: // NNTP_FEED_SERVER_TYPE m_EnumType; CComBSTR m_strRemoteServer; // // Routines to help property gets/puts: // HRESULT get_FeedAction ( NNTP_FEED_ACTION * feedaction ); HRESULT put_FeedAction ( NNTP_FEED_ACTION feedaction ); BOOL CheckValid () const; private: #ifdef DEBUG void AssertValid ( ) const; #else inline void AssertValid ( ) const { } #endif private: HRESULT TranslateFeedError ( DWORD dwErrorCode, DWORD dwParmErr = 0 ); HRESULT CheckConfirm( DWORD dwFeedId, DWORD dwInstanceId, CMetabaseKey* pMK, PDWORD pdwErr, PDWORD pdwErrMask ); // Don't call the copy constructor: CFeed ( const CFeed & ); }; //$------------------------------------------------------------------- // // Class: // CFeedPair // // Description: // //-------------------------------------------------------------------- class CFeedPair { friend class CNntpFeed; friend class CFeedPairList; public: CFeedPair(); ~CFeedPair(); static HRESULT CreateFeedPair ( CFeedPair ** ppNewFeedPair, BSTR strRemoteServer, NNTP_FEED_SERVER_TYPE type ); void Destroy (); HRESULT AddFeed ( CFeed * pFeed ); BOOL ContainsFeedId ( DWORD dwFeedId ); // Routines to help property gets/puts: HRESULT get_FeedType ( NNTP_FEED_SERVER_TYPE * feedtype ); HRESULT put_FeedType ( NNTP_FEED_SERVER_TYPE feedtype ); // CFeedPair <-> OLE INntpFeedPair: HRESULT ToINntpFeed ( INntpFeed ** ppFeed ); HRESULT FromINntpFeed ( INntpFeed * pFeed ); // Talking with the Server: HRESULT AddToServer ( LPCWSTR strServer, DWORD dwInstance, CMetabaseKey* pMK ); HRESULT SetToServer ( LPCWSTR strServer, DWORD dwInstance, INntpFeed * pFeed, CMetabaseKey* pMK ); HRESULT RemoveFromServer ( LPCWSTR strServer, DWORD dwInstance, CMetabaseKey* pMK ); private: HRESULT AddIndividualFeed ( LPCWSTR strServer, DWORD dwInstance, CFeed * pFeed, CMetabaseKey* pMK ); HRESULT SetIndividualFeed ( LPCWSTR strServer, DWORD dwInstance, CFeed * pFeed, CMetabaseKey* pMK ); HRESULT SetPairIds ( LPCWSTR strServer, DWORD dwInstance, CFeed * pFeed1, CFeed * pFeed2, CMetabaseKey* pMK ); HRESULT UndoFeedAction ( LPCWSTR strServer, DWORD dwInstance, CFeed * pNewFeed, CFeed * pOldFeed , CMetabaseKey* pMK ); CComBSTR m_strRemoteServer; NNTP_FEED_SERVER_TYPE m_type; CFeed * m_pInbound; CFeed * m_pOutbound; CFeedPair * m_pNext; // Used by CFeedPairList private: #ifdef DEBUG void AssertValid ( ) const; #else inline void AssertValid ( ) const { } #endif }; //$------------------------------------------------------------------- // // Class: // CFeedPairList // // Description: // //-------------------------------------------------------------------- class CFeedPairList { public: CFeedPairList ( ); ~CFeedPairList ( ); // // List interface: // DWORD GetCount ( ) const; void Empty ( ); CFeedPair * Item ( DWORD index ); void Add ( CFeedPair * pPair ); void Remove ( CFeedPair * pPair ); CFeedPair * Find ( DWORD dwFeedId ); DWORD GetPairIndex ( CFeedPair * pPair ) const; private: #ifdef DEBUG void AssertValid ( ) const; #else inline void AssertValid ( ) const { } #endif private: DWORD m_cCount; CFeedPair * m_pHead; CFeedPair * m_pTail; }; #endif // _FEEDINFO_INCLUDED_