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.
398 lines
10 KiB
398 lines
10 KiB
/*++
|
|
|
|
Copyright (c) 1996 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
faxxp.h
|
|
|
|
Abstract:
|
|
|
|
Fax transport provider header file.
|
|
|
|
Author:
|
|
|
|
Wesley Witt (wesw) 13-Aug-1996
|
|
|
|
Revision History:
|
|
|
|
20/10/99 -danl-
|
|
Change GetServerName to GetServerNameFromPrinterName.
|
|
Add GetServerNameFromPrinterInfo.
|
|
|
|
dd/mm/yy -author-
|
|
description
|
|
|
|
--*/
|
|
|
|
#include <windows.h>
|
|
#include <winspool.h>
|
|
#include <mapiwin.h>
|
|
#include <mapispi.h>
|
|
#include <mapiutil.h>
|
|
#include <mapicode.h>
|
|
#include <mapival.h>
|
|
#include <mapiwz.h>
|
|
#include <richedit.h>
|
|
#include <shlobj.h>
|
|
#include <shellapi.h>
|
|
#include <commdlg.h>
|
|
#include <tchar.h>
|
|
#include <stdio.h>
|
|
#include <fxsapip.h>
|
|
|
|
#include "resource.h"
|
|
#include "faxreg.h"
|
|
#include "faxmapip.h"
|
|
#include "faxutil.h"
|
|
#include "devmode.h"
|
|
|
|
|
|
#define MAX_FILENAME_EXT 4
|
|
|
|
#define SERVER_COVER_PAGE 1
|
|
|
|
#define TRANSPORT_DLL_NAME_STRING FAX_MAIL_TRANSPORT_MODULE_NAME
|
|
|
|
#define LEFT_MARGIN 1 // ---|
|
|
#define RIGHT_MARGIN 1 // |
|
|
#define TOP_MARGIN 1 // |---> in inches
|
|
#define BOTTOM_MARGIN 1 // ---|
|
|
|
|
#define InchesToCM(_x) (((_x) * 254L + 50) / 100)
|
|
#define CMToInches(_x) (((_x) * 100L + 127) / 254)
|
|
|
|
#define XPID_NAME 0
|
|
#define XPID_EID 1
|
|
#define XPID_SEARCH_KEY 2
|
|
#define NUM_IDENTITY_PROPS 3
|
|
|
|
#define RECIP_ROWID 0
|
|
#define RECIP_NAME 1
|
|
#define RECIP_EMAIL_ADR 2
|
|
#define RECIP_TYPE 3
|
|
#define RECIP_RESPONSIBILITY 4
|
|
#define RECIP_DELIVER_TIME 5
|
|
#define RECIP_REPORT_TIME 6
|
|
#define RECIP_REPORT_TEXT 7
|
|
#define RECIP_ADDR_TYPE 8
|
|
#define TABLE_RECIP_PROPS 9
|
|
|
|
#define MSG_DISP_TO 0
|
|
#define MSG_SUBJECT 1
|
|
#define MSG_CLASS 2
|
|
#define MSG_BODY 3
|
|
#define MSG_FLAGS 4
|
|
#define MSG_SIZE 5
|
|
#define MSG_PRIORITY 6
|
|
#define MSG_IMPORTANCE 7
|
|
#define MSG_SENSITIVITY 8
|
|
#define MSG_DR_REPORT 9
|
|
#define MSG_SENDER_ENTRYID 10
|
|
#define NUM_MSG_PROPS 11
|
|
|
|
#define MSG_ATTACH_METHOD 0
|
|
#define MSG_ATTACH_NUM 1
|
|
#define MSG_ATTACH_EXTENSION 2
|
|
#define MSG_ATTACH_FILENAME 3
|
|
#define MSG_ATTACH_PATHNAME 4
|
|
#define MSG_ATTACH_LFILENAME 5
|
|
#define MSG_ATTACH_TAG 6
|
|
#define NUM_ATTACH_PROPS 7
|
|
#define NUM_ATTACH_TABLE_PROPS 2
|
|
|
|
|
|
typedef struct _USER_INFO {
|
|
TCHAR BillingCode[64];
|
|
TCHAR Company[128];
|
|
TCHAR Dept[128];
|
|
} USER_INFO, *PUSER_INFO;
|
|
|
|
|
|
const static SizedSPropTagArray ( NUM_ATTACH_TABLE_PROPS, sptAttachTableProps) =
|
|
{
|
|
NUM_ATTACH_TABLE_PROPS,
|
|
{
|
|
PR_ATTACH_METHOD,
|
|
PR_ATTACH_NUM
|
|
}
|
|
};
|
|
|
|
const static SizedSPropTagArray ( NUM_ATTACH_PROPS, sptAttachProps) =
|
|
{
|
|
NUM_ATTACH_PROPS,
|
|
{
|
|
PR_ATTACH_METHOD,
|
|
PR_ATTACH_NUM,
|
|
PR_ATTACH_EXTENSION_A,
|
|
PR_ATTACH_FILENAME_A,
|
|
PR_ATTACH_PATHNAME_A,
|
|
PR_ATTACH_LONG_FILENAME_A,
|
|
PR_ATTACH_TAG
|
|
}
|
|
};
|
|
|
|
const static SizedSPropTagArray (TABLE_RECIP_PROPS, sptRecipTable) =
|
|
{
|
|
TABLE_RECIP_PROPS,
|
|
{
|
|
PR_ROWID,
|
|
PR_DISPLAY_NAME_A,
|
|
PR_EMAIL_ADDRESS_A,
|
|
PR_RECIPIENT_TYPE,
|
|
PR_RESPONSIBILITY,
|
|
PR_DELIVER_TIME,
|
|
PR_REPORT_TIME,
|
|
PR_REPORT_TEXT_A,
|
|
PR_ADDRTYPE_A
|
|
}
|
|
};
|
|
|
|
static const SizedSPropTagArray(NUM_MSG_PROPS, sptPropsForHeader) =
|
|
{
|
|
NUM_MSG_PROPS,
|
|
{
|
|
PR_DISPLAY_TO_A,
|
|
PR_SUBJECT_A,
|
|
PR_BODY_A,
|
|
PR_MESSAGE_CLASS_A,
|
|
PR_MESSAGE_FLAGS,
|
|
PR_MESSAGE_SIZE,
|
|
PR_PRIORITY,
|
|
PR_IMPORTANCE,
|
|
PR_SENSITIVITY,
|
|
PR_ORIGINATOR_DELIVERY_REPORT_REQUESTED,
|
|
PR_SENDER_ENTRYID
|
|
}
|
|
};
|
|
|
|
extern LPALLOCATEBUFFER gpfnAllocateBuffer; // MAPIAllocateBuffer function
|
|
extern LPALLOCATEMORE gpfnAllocateMore; // MAPIAllocateMore function
|
|
extern LPFREEBUFFER gpfnFreeBuffer; // MAPIFreeBuffer function
|
|
extern HINSTANCE g_hModule; // DLL handle
|
|
extern HINSTANCE g_hResource; // Resource DLL handle
|
|
extern MAPIUID g_FaxGuid;
|
|
|
|
|
|
LPVOID
|
|
MapiMemAlloc(
|
|
SIZE_T Size
|
|
);
|
|
|
|
LPVOID
|
|
MapiMemReAlloc(
|
|
LPVOID ptr,
|
|
SIZE_T Size
|
|
);
|
|
|
|
VOID
|
|
MapiMemFree(
|
|
LPVOID ptr
|
|
);
|
|
|
|
PVOID
|
|
MyEnumPrinters(
|
|
LPTSTR pServerName,
|
|
DWORD level,
|
|
PDWORD pcPrinters
|
|
);
|
|
|
|
PVOID
|
|
MyGetPrinter(
|
|
LPTSTR PrinterName,
|
|
DWORD level
|
|
);
|
|
|
|
void
|
|
ErrorMsgBox(
|
|
HINSTANCE hInstance,
|
|
DWORD dwMsgId
|
|
);
|
|
|
|
/*
|
|
- GetServerNameFromPrinterInfo
|
|
-
|
|
* Purpose:
|
|
* Get the Server name, given a PRINTER_INFO_2 structure
|
|
*
|
|
* Arguments:
|
|
* [in] ppi2 - Address of PRINTER_INFO_2 structure
|
|
* [out] lpptszServerName - Address of string pointer for returned name.
|
|
*
|
|
* Returns:
|
|
* BOOL - TRUE: sucess , FALSE: failure.
|
|
*
|
|
* Remarks:
|
|
* This inline function retrieves the server from a printer info structure
|
|
* in the appropriate way for win9x and NT.
|
|
*/
|
|
inline BOOL
|
|
GetServerNameFromPrinterInfo(PPRINTER_INFO_2 ppi2,LPTSTR *lpptszServerName)
|
|
{
|
|
if (!ppi2)
|
|
{
|
|
return FALSE;
|
|
}
|
|
#ifndef WIN95
|
|
|
|
*lpptszServerName = NULL;
|
|
if (ppi2->pServerName)
|
|
{
|
|
if (!(*lpptszServerName = StringDup(_tcsninc(ppi2->pServerName,2))))
|
|
{
|
|
return FALSE;
|
|
}
|
|
}
|
|
return TRUE;
|
|
|
|
#else //WIN95
|
|
|
|
//
|
|
// Formatted: \\Server\port
|
|
//
|
|
if (!(ppi2->pPortName))
|
|
{
|
|
return FALSE;
|
|
}
|
|
if (!(*lpptszServerName = StringDup(_tcsninc(ppi2->pPortName,2))))
|
|
{
|
|
return FALSE;
|
|
}
|
|
_tcstok(*lpptszServerName,TEXT("\\"));
|
|
|
|
#endif //WIN95
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
BOOL
|
|
GetServerNameFromPrinterName(
|
|
LPTSTR PrinterName,
|
|
LPTSTR *ppszServerName
|
|
);
|
|
|
|
LPWSTR
|
|
AnsiStringToUnicodeString(
|
|
LPCSTR AnsiString
|
|
);
|
|
|
|
LPSTR
|
|
UnicodeStringToAnsiString(
|
|
LPCWSTR UnicodeString
|
|
);
|
|
|
|
HRESULT WINAPI
|
|
OpenServiceProfileSection(
|
|
LPMAPISUP pSupObj,
|
|
LPPROFSECT * ppProfSectObj
|
|
);
|
|
|
|
INT_PTR CALLBACK
|
|
ConfigDlgProc(
|
|
HWND hDlg,
|
|
UINT message,
|
|
WPARAM wParam,
|
|
LPARAM lParam
|
|
);
|
|
|
|
DWORD
|
|
GetDwordProperty(
|
|
LPSPropValue pProps,
|
|
DWORD PropId
|
|
);
|
|
|
|
DWORD
|
|
GetBinaryProperty(
|
|
LPSPropValue pProps,
|
|
DWORD PropId,
|
|
LPVOID Buffer,
|
|
DWORD SizeOfBuffer
|
|
);
|
|
|
|
|
|
|
|
class CXPProvider : public IXPProvider
|
|
{
|
|
public:
|
|
STDMETHODIMP QueryInterface( REFIID riid, LPVOID *ppvObj );
|
|
STDMETHODIMP_(ULONG) AddRef();
|
|
STDMETHODIMP_(ULONG) Release();
|
|
MAPI_IXPPROVIDER_METHODS(IMPL);
|
|
|
|
public :
|
|
CXPProvider( HINSTANCE hInst );
|
|
~CXPProvider();
|
|
|
|
private :
|
|
ULONG m_cRef;
|
|
CRITICAL_SECTION m_csTransport;
|
|
HINSTANCE m_hInstance;
|
|
};
|
|
|
|
|
|
class CXPLogon : public IXPLogon
|
|
{
|
|
public:
|
|
STDMETHODIMP QueryInterface( REFIID riid, LPVOID *ppvObj );
|
|
STDMETHODIMP_(ULONG) AddRef();
|
|
STDMETHODIMP_(ULONG) Release();
|
|
STDMETHODIMP InitializeStatusRow(ULONG ulFlags);
|
|
STDMETHODIMP GrowAddressList(LPADRLIST *ppAdrList, ULONG ulResizeBy, ULONG *pulOldAndNewCount);
|
|
MAPI_IXPLOGON_METHODS(IMPL);
|
|
|
|
private:
|
|
void WINAPI CheckSpoolerYield( BOOL fReset = FALSE );
|
|
void WINAPI UpdateStatus( BOOL fAddValidate=FALSE, BOOL fValidateOkState=FALSE );
|
|
BOOL WINAPI LoadStatusString( LPTSTR pString, UINT uStringSize );
|
|
DWORD SendFaxDocument(LPMESSAGE pMsgObj,LPSTREAM lpstmT,BOOL UseRichText,LPSPropValue pMsgProps,LPSRowSet pRecipRows, LPDWORD lpdwRecipientsLimit);
|
|
PVOID MyGetPrinter(LPTSTR PrinterName,DWORD Level);
|
|
|
|
DWORD PrintAttachmentToFile(IN LPMESSAGE pMsgObj,
|
|
IN PFAXXP_CONFIG pFaxConfig,
|
|
OUT LPTSTR* lpptstrOutAttachments);
|
|
|
|
BOOL PrintRichText(HWND hWndRichEdit,HDC hDC);
|
|
DWORD PrintPlainText(HDC hDC,LPSTREAM lpstmT,LPTSTR tszSubject, PFAXXP_CONFIG FaxConfig);
|
|
|
|
DWORD PrintFaxDocumentToFile(
|
|
IN LPMESSAGE pMsgObj,
|
|
IN LPSTREAM lpstmT,
|
|
IN BOOL UseRichText,
|
|
IN PFAXXP_CONFIG pFaxConfig,
|
|
IN LPTSTR tszSubject,
|
|
OUT LPTSTR* lpptstrMessageFileName
|
|
);
|
|
|
|
DWORD PrintMessageToFile(IN LPSTREAM lpstmT,
|
|
IN BOOL UseRichText,
|
|
IN PFAXXP_CONFIG pFaxConfig,
|
|
IN LPTSTR tszSubject,
|
|
OUT LPTSTR* lpptstrOutDocument);
|
|
|
|
|
|
public :
|
|
CXPLogon( HINSTANCE hInstance, LPMAPISUP pSupObj, LPTSTR ProfileName );
|
|
~CXPLogon();
|
|
|
|
inline void WINAPI AddStatusBits
|
|
(DWORD dwNewBits) { m_ulTransportStatus |= dwNewBits; }
|
|
inline void WINAPI RemoveStatusBits
|
|
(DWORD dwOldBits) { m_ulTransportStatus &= ~dwOldBits; }
|
|
inline DWORD WINAPI GetTransportStatusCode
|
|
() { return m_ulTransportStatus; }
|
|
|
|
private :
|
|
ULONG m_cRef;
|
|
HINSTANCE m_hInstance;
|
|
BOOL m_fABWDSInstalled;
|
|
ULONG m_ulTransportStatus;
|
|
LPWSTR m_CpBuffer;
|
|
DWORD m_CpBufferSize;
|
|
|
|
public :
|
|
LPMAPISUP m_pSupObj;
|
|
HANDLE m_hUIMutex;
|
|
HRESULT m_hRemoteActionErr;
|
|
BOOL m_fCancelPending;
|
|
};
|