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.
 
 
 
 
 
 

270 lines
8.1 KiB

/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
FaxServer.h
Abstract:
Declaration of the CFaxServer Class.
Author:
Iv Garber (IvG) Jun, 2000
Revision History:
--*/
#ifndef __FAXSERVER_H_
#define __FAXSERVER_H_
#include "resource.h" // main symbols
#include "FaxFolders.h"
#include "FaxReceiptOptions.h"
#include "FaxLoggingOptions.h"
#include "FaxActivity.h"
#include "FaxSecurity.h"
#include "FaxInboundRouting.h"
#include "FaxOutboundRouting.h"
#include <atlwin.h>
#include "FXSCOMEXCP.h"
//
//================= WINDOW FOR NOTIFICATIONS =================================
//
//
// Forward Declaration
//
class CFaxServer;
class CNotifyWindow : public CWindowImpl<CNotifyWindow>
{
public:
CNotifyWindow(CFaxServer *pServer)
{
DBG_ENTER(_T("CNotifyWindow::Ctor"));
m_pServer = pServer;
m_MessageId = RegisterWindowMessage(_T("{2E037B27-CF8A-4abd-B1E0-5704943BEA6F}"));
if (m_MessageId == 0)
{
m_MessageId = WM_USER + 876;
}
}
BEGIN_MSG_MAP(CNotifyWindow)
MESSAGE_HANDLER(m_MessageId, OnMessage)
END_MSG_MAP()
UINT GetMessageId(void) { return m_MessageId; };
private:
UINT m_MessageId;
CFaxServer *m_pServer;
LRESULT OnMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
};
//
//================= REGISTRATION OF ROUTING EXTENSION METHODS ===========================
//
#define DELIMITER _T(";")
#define EXCEPTION_INVALID_METHOD_DATA 0xE0000001
BOOL CALLBACK RegisterMethodCallback(HANDLE FaxHandle, LPVOID Context, LPWSTR MethodName,
LPWSTR FriendlyName, LPWSTR FunctionName, LPWSTR Guid);
//
//=============== FAX SERVER ==================================================
//
class ATL_NO_VTABLE CFaxServer :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CFaxServer, &CLSID_FaxServer>,
public ISupportErrorInfo,
public IDispatchImpl<IFaxServer, &IID_IFaxServer, &LIBID_FAXCOMEXLib>,
public IFaxServerInner,
public CFaxInitInner, // for Debug purposes only
public IConnectionPointContainerImpl<CFaxServer>,
public CProxyIFaxServerNotify< CFaxServer >
{
public:
CFaxServer() : CFaxInitInner(_T("FAX SERVER")),
m_faxHandle(NULL),
m_pFolders(NULL),
m_pActivity(NULL),
m_pSecurity(NULL),
m_pReceiptOptions(NULL),
m_pLoggingOptions(NULL),
m_pInboundRouting(NULL),
m_pOutboundRouting(NULL),
m_bVersionValid(false),
m_pNotifyWindow(NULL),
m_hEvent(NULL),
m_lLastRegisteredMethod(0),
m_EventTypes(fsetNONE)
{
}
~CFaxServer()
{
//
// Disconnect
//
if (m_faxHandle)
{
Disconnect();
}
//
// free all the allocated objects
//
if (m_pFolders)
{
delete m_pFolders;
}
if (m_pActivity)
{
delete m_pActivity;
}
if (m_pSecurity)
{
delete m_pSecurity;
}
if (m_pReceiptOptions)
{
delete m_pReceiptOptions;
}
if (m_pLoggingOptions)
{
delete m_pLoggingOptions;
}
if (m_pInboundRouting)
{
delete m_pInboundRouting;
}
if (m_pOutboundRouting)
{
delete m_pOutboundRouting;
}
}
DECLARE_REGISTRY_RESOURCEID(IDR_FAXSERVER)
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(CFaxServer)
COM_INTERFACE_ENTRY(IFaxServer)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IFaxServerInner)
COM_INTERFACE_ENTRY(ISupportErrorInfo)
COM_INTERFACE_ENTRY(IConnectionPointContainer)
END_COM_MAP()
BEGIN_CONNECTION_POINT_MAP(CFaxServer)
CONNECTION_POINT_ENTRY(DIID_IFaxServerNotify)
END_CONNECTION_POINT_MAP()
// Interfaces
STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
STDMETHOD(Disconnect)();
STDMETHOD(Connect)(BSTR bstrServerName);
STDMETHOD(GetDevices)(/*[out, retval]*/ IFaxDevices **ppDevices);
STDMETHOD(get_Folders)(/*[out, retval]*/ IFaxFolders **ppFolders);
STDMETHOD(get_Activity)(/*[out, retval]*/ IFaxActivity **ppActivity);
STDMETHOD(get_Security)(/*[out, retval]*/ IFaxSecurity **ppSecurity);
STDMETHOD(get_ReceiptOptions)(/*[out, retval]*/ IFaxReceiptOptions **ppReceiptOptions);
STDMETHOD(get_LoggingOptions)(/*[out, retval]*/ IFaxLoggingOptions **ppLoggingOptions);
STDMETHOD(get_InboundRouting)(/*[out, retval]*/ IFaxInboundRouting **ppInboundRouting);
STDMETHOD(GetDeviceProviders)(/*[out, retval]*/ IFaxDeviceProviders **ppDeviceProviders);
STDMETHOD(get_OutboundRouting)(/*[out, retval]*/ IFaxOutboundRouting **ppFaxOutboundRouting);
STDMETHOD(get_Debug)(/*[out, retval]*/ VARIANT_BOOL *pbDebug);
STDMETHOD(get_MajorBuild)(/*[out, retval]*/ long *plMajorBuild);
STDMETHOD(get_MinorBuild)(/*[out, retval]*/ long *plMinorBuild);
STDMETHOD(get_ServerName)(/*[out, retval]*/ BSTR *pbstrServerName);
STDMETHOD(get_MajorVersion)(/*[out, retval]*/ long *plMajorVersion);
STDMETHOD(get_MinorVersion)(/*[out, retval]*/ long *plMinorVersion);
STDMETHOD(get_APIVersion)(/*[out,retval]*/ FAX_SERVER_APIVERSION_ENUM *pAPIVersion);
STDMETHOD(SetExtensionProperty)(/*[in]*/ BSTR bstrGUID, /*[in]*/ VARIANT vProperty);
STDMETHOD(GetExtensionProperty)(/*[in]*/ BSTR bstrGUID, /*[out, retval]*/ VARIANT *pvProperty);
STDMETHOD(UnregisterDeviceProvider)(BSTR bstrProviderUniqueName);
STDMETHOD(UnregisterInboundRoutingExtension)(BSTR bstrExtensionUniqueName);
STDMETHOD(RegisterDeviceProvider)(
/*[in]*/ BSTR bstrGUID,
/*[in]*/ BSTR bstrFriendlyName,
/*[in]*/ BSTR bstrImageName,
/*[in]*/ BSTR TspName,
/*[in]*/ long lFSPIVersion);
STDMETHOD(RegisterInboundRoutingExtension)(
/*[in]*/ BSTR bstrExtensionName,
/*[in]*/ BSTR bstrFriendlyName,
/*[in]*/ BSTR bstrImageName,
/*[in]*/ VARIANT vMethods);
STDMETHOD(ListenToServerEvents)(/*[in]*/ FAX_SERVER_EVENTS_TYPE_ENUM EventTypes);
STDMETHOD(get_RegisteredEvents)(/*[out, retval]*/ FAX_SERVER_EVENTS_TYPE_ENUM *pEventTypes);
// Internal Use
STDMETHOD(GetHandle)(/*[out, retval]*/ HANDLE* pFaxHandle);
BOOL GetRegisteredData(LPWSTR MethodName, LPWSTR FriendlyName, LPWSTR FunctionName, LPWSTR Guid);
HRESULT ProcessMessage(FAX_EVENT_EX *pFaxEventInfo);
private:
HANDLE m_faxHandle;
CComBSTR m_bstrServerName;
FAX_VERSION m_Version;
FAX_SERVER_APIVERSION_ENUM m_APIVersion;
bool m_bVersionValid;
long m_lLastRegisteredMethod;
SAFEARRAY *m_pRegMethods;
FAX_SERVER_EVENTS_TYPE_ENUM m_EventTypes;
//
// All these objects requires alive Server Object
// so their Reference Counting is done by the Server
//
CComContainedObject2<CFaxFolders> *m_pFolders;
CComContainedObject2<CFaxActivity> *m_pActivity;
CComContainedObject2<CFaxSecurity> *m_pSecurity;
CComContainedObject2<CFaxReceiptOptions> *m_pReceiptOptions;
CComContainedObject2<CFaxLoggingOptions> *m_pLoggingOptions;
CComContainedObject2<CFaxInboundRouting> *m_pInboundRouting;
CComContainedObject2<CFaxOutboundRouting> *m_pOutboundRouting;
//
// Window for Notifications
//
CNotifyWindow *m_pNotifyWindow;
HANDLE m_hEvent;
// Functions
STDMETHOD(GetVersion)();
void GetMethodData(/*[in]*/ BSTR bstrAllString, /*[out]*/ LPWSTR strWhereToPut);
void ClearNotifyWindow(void);
typedef enum LOCATION { IN_QUEUE, OUT_QUEUE, IN_ARCHIVE, OUT_ARCHIVE } LOCATION;
HRESULT ProcessJobNotification(DWORDLONG dwlJobId, FAX_ENUM_JOB_EVENT_TYPE eventType,
LOCATION place, FAX_JOB_STATUS *pJobStatus = NULL);
};
#endif //__FAXSERVER_H_