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
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_
|