windows-nt/Source/XPSP1/NT/inetsrv/iis/svcs/nntp/adminsso/feedinfo.h
2020-09-26 16:20:57 +08:00

268 lines
6.1 KiB
C++

/*++
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_