268 lines
6.1 KiB
C
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_
|
||
|
|