Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
// ServerNode.h: interface for the CServerNode class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_SERVERNODE_H__1B5E5554_A8BB_4682_B1A8_56453753643D__INCLUDED_)
#define AFX_SERVERNODE_H__1B5E5554_A8BB_4682_B1A8_56453753643D__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
//
// WM_SERVER_NOTIFY_BASE is the base (minimal) message id used for notifications
// that arrive from the server(s). Each server is assigned a differnet message id
// which is equal of bigger than this value.
//
#define WM_SERVER_NOTIFY_BASE WM_APP + 10
#ifndef __AFXWIN_H__
#error include 'stdafx.h' before including this file for PCH
#endif
class CServerNode : public CTreeNode { public: CServerNode ();
DECLARE_DYNAMIC(CServerNode)
DWORD Init (LPCTSTR tstrMachine); const CString & Machine () const { return m_cstrMachine; }
DWORD RefreshState ();
void AttachFoldersToViews() { m_Inbox.AttachView(); m_SentItems.AttachView(); m_Outbox.AttachView(); m_Incoming.AttachView(); }
BOOL IsIncomingBlocked () const { return (m_dwQueueState & FAX_INCOMING_BLOCKED) ? TRUE : FALSE; } BOOL IsOutboxBlocked () const { return (m_dwQueueState & FAX_OUTBOX_BLOCKED) ? TRUE : FALSE; } BOOL IsOutboxPaused () const { return (m_dwQueueState & FAX_OUTBOX_PAUSED) ? TRUE : FALSE; }
BOOL IsOnline () const { return m_hConnection ? TRUE : FALSE; } BOOL IsRefreshing() const { return m_bInBuildup; } DWORD GetActivity(CString& cstrText, TreeIconType& iconIndex) const;
DWORD BlockIncoming (BOOL bBlock); DWORD BlockOutbox (BOOL bBlock); DWORD PauseOutbox (BOOL bPause);
BOOL CanSeeInbox () const { return IsRightHeld(FAX_ACCESS_QUERY_IN_ARCHIVE); } BOOL CanManageInbox() const { return IsRightHeld(FAX_ACCESS_MANAGE_IN_ARCHIVE); } BOOL CanSeeAllJobs () const { return IsRightHeld(FAX_ACCESS_QUERY_JOBS); } BOOL CanManageAllJobs() const { return IsRightHeld(FAX_ACCESS_MANAGE_JOBS); } BOOL CanManageConfig() const { return IsRightHeld(FAX_ACCESS_MANAGE_CONFIG); } BOOL CanSendFax() const { return (IsRightHeld(FAX_ACCESS_SUBMIT) || IsRightHeld(FAX_ACCESS_SUBMIT_NORMAL) || IsRightHeld(FAX_ACCESS_SUBMIT_HIGH)) && !IsOutboxBlocked(); } BOOL CanReceiveNow() const { return IsRightHeld(FAX_ACCESS_QUERY_IN_ARCHIVE) && // FaxAnswerCall requires FAX_ACCESS_QUERY_IN_ARCHIVE
m_cstrMachine.IsEmpty(); } // FaxAnswerCall only works on local server
CFolder* GetFolder(FolderType type);
const CMessageFolder &GetInbox () const { return m_Inbox; } const CMessageFolder &GetSentItems () const { return m_SentItems; } const CQueueFolder &GetOutbox () const { return m_Outbox; } const CQueueFolder &GetIncoming () const { return m_Incoming; }
virtual void AssertValid( ) const; virtual void Dump( CDumpContext &dc ) const;
DWORD GetConnectionHandle (HANDLE &hFax);
DWORD InvalidateSubFolders(BOOL bClearView);
void SetLastRPCError (DWORD dwErr, BOOL DisconnectOnFailure = TRUE); DWORD GetLastRPCError () { return m_dwLastRPCError; }
DWORD Disconnect (BOOL bShutdownAware = FALSE, BOOL bWaitForBuildThread = TRUE); void Destroy ();
static CServerNode *LookupServerFromMessageId (DWORD dwMsgId);
static DWORD InitMsgsMap (); static DWORD ShutdownMsgsMap ();
DWORD OnNotificationMessage (PFAX_EVENT_EX pEvent);
BOOL IsValid() { return m_bValid; } void SetValid(BOOL bValid) { m_bValid = bValid; }
DWORD GetNotifyMsgID() { return m_dwMsgId; }
private:
virtual ~CServerNode();
BOOL IsRightHeld (DWORD dwRight) const { return ((m_dwRights & dwRight) == dwRight) ? TRUE : FALSE; }
DWORD Connect ();
BOOL m_bValid; DWORD SetNewQueueState (DWORD dwNewState); DWORD ClearContents ();
DWORD CreateFolders (); BOOL FatalRPCError (DWORD dwErr);
DWORD m_dwRights; // Current relevant access rights
DWORD m_dwQueueState; // Current queue state
HANDLE m_hConnection; // Handle to RPC connection
CString m_cstrMachine; // Server's machine name
CMessageFolder m_Inbox; // Inbox folder
CMessageFolder m_SentItems; // SentItems folder
CQueueFolder m_Outbox; // Outbox folder
CQueueFolder m_Incoming; // Incoming folder
DWORD m_dwLastRPCError; // Error code of last RPC call
//
// Buildup thread members and functions:
//
CRITICAL_SECTION m_csBuildup; // Protects buildup phase
BOOL m_bCsBuildupValid; // Is the critical section valid?
HANDLE m_hBuildupThread; // Handle of background contents building thread
BOOL m_bStopBuildup; // Should we abort the buildup operation?
BOOL m_bInBuildup; // Are we doing a buildup now?
CRITICAL_SECTION m_csBuildupThread; // Protects access to the m_hBuildupThread
BOOL m_bCsBuildupThreadValid;// Is the critical section valid?
DWORD StopBuildThread (BOOL bWaitForDeath = TRUE); DWORD Buildup ();
BOOL m_bSelfDestruct; // Should we destroy ourselves ASAP?
static DWORD WINAPI BuildupThreadProc (LPVOID lpParameter);
//
// Notifications handling:
//
HANDLE m_hNotification; // Notification registration handle
DWORD m_dwMsgId; // Windows message id used for notification
//
// Map between Windows message and server pointer from
// which the notification message was sent.
//
typedef map <DWORD, CServerNode *> MESSAGES_MAP; static CRITICAL_SECTION m_sMsgsCs; // Protects access to the map
static BOOL m_sbMsgsCsInitialized; // Was m_sMsgsCs initialized;
static MESSAGES_MAP m_sMsgs; static DWORD m_sdwMinFreeMsg; // The smallest available message id
static DWORD AllocateNewMessageId (CServerNode *pServer, DWORD &dwMsdgId); static DWORD FreeMessageId (DWORD dwMsgId); };
#endif // !defined(AFX_SERVERNODE_H__1B5E5554_A8BB_4682_B1A8_56453753643D__INCLUDED_)
|