844 lines
24 KiB
C
844 lines
24 KiB
C
|
/*****************************************************************************\
|
||
|
* MODULE: webipp.h
|
||
|
*
|
||
|
* This is the header module for webipp.c. This contains the IPP 1.1 parser
|
||
|
* that encodes/decodes data for transfering across the HTTP wire.
|
||
|
*
|
||
|
*
|
||
|
* Copyright (C) 1996-1998 Microsoft Corporation
|
||
|
* Copyright (C) 1996-1998 Hewlett Packard
|
||
|
*
|
||
|
* history:
|
||
|
* 27-Oct-1997 <chriswil/v-chrisw> created.
|
||
|
*
|
||
|
\*****************************************************************************/
|
||
|
#ifndef _WEBIPP_H
|
||
|
#define _WEBIPP_H
|
||
|
|
||
|
#include <time.h>
|
||
|
|
||
|
#ifdef __cplusplus // Place this here to prevent decorating of symbols
|
||
|
extern "C" { // when doing C++ stuff.
|
||
|
#endif
|
||
|
|
||
|
/***********************************************\
|
||
|
* Common Macros
|
||
|
*
|
||
|
\***********************************************/
|
||
|
#define offs(type, identifier) ((ULONG_PTR)&(((type)0)->identifier))
|
||
|
|
||
|
|
||
|
/***********************************************\
|
||
|
* Constant Values
|
||
|
*
|
||
|
\***********************************************/
|
||
|
#define IPP_BLOCK_SIZE 1024
|
||
|
#define IPP_VERSION ((WORD)0x0100)
|
||
|
#define IPP_GETJOB_ALL ((DWORD)0x7FFFFFFF)
|
||
|
|
||
|
#define IPPOBJ_MASK_SIZE 2
|
||
|
|
||
|
|
||
|
#define IPPTYPE_UNKNOWN 0
|
||
|
#define IPPTYPE_PRT 1
|
||
|
#define IPPTYPE_JOB 2
|
||
|
#define IPPTYPE_AUTH 3
|
||
|
|
||
|
|
||
|
|
||
|
#define IPP_ATR_ABSOLUTE 0
|
||
|
#define IPP_ATR_OFFSET -1
|
||
|
#define IPP_ATR_OFFSETCONV -2
|
||
|
#define IPP_ATR_TAG -4
|
||
|
|
||
|
|
||
|
/***********************************************\
|
||
|
* IPP Element Sizes
|
||
|
*
|
||
|
* These are used to identify the size of
|
||
|
* IPP element values.
|
||
|
*
|
||
|
\***********************************************/
|
||
|
#define IPP_SIZEOFREQ sizeof(WORD) // 2 bytes
|
||
|
#define IPP_SIZEOFVER sizeof(WORD) // 2 bytes
|
||
|
#define IPP_SIZEOFLEN sizeof(WORD) // 2 bytes
|
||
|
#define IPP_SIZEOFTAG sizeof(BYTE) // 1 byte
|
||
|
#define IPP_SIZEOFINT sizeof(DWORD) // 4 bytes
|
||
|
#define IPP_SIZEOFBYTE sizeof(BYTE) // 1 bytes
|
||
|
#define IPP_SIZEOFHDR (IPP_SIZEOFVER + IPP_SIZEOFREQ + IPP_SIZEOFINT)
|
||
|
|
||
|
|
||
|
/***********************************************\
|
||
|
* IPP Attribute Sizes
|
||
|
*
|
||
|
\***********************************************/
|
||
|
#define SIZE_TEXT 1023
|
||
|
#define SIZE_NAME 255
|
||
|
#define SIZE_KEYWORD 255
|
||
|
#define SIZE_KEYWORDNAME 255
|
||
|
#define SIZE_ENUM 4
|
||
|
#define SIZE_URI 1023
|
||
|
#define SIZE_URISCHEME 63
|
||
|
#define SIZE_CHARSET 63
|
||
|
#define SIZE_NATLANG 63
|
||
|
#define SIZE_MIMEMEDIA 63
|
||
|
#define SIZE_OCTSTRING 1023
|
||
|
#define SIZE_BOOLEAN 1
|
||
|
#define SIZE_INTEGER 4
|
||
|
#define SIZE_RANGEINTEGER 8
|
||
|
#define SIZE_DATETIME 11
|
||
|
#define SIZE_RESOLUTION 9
|
||
|
|
||
|
|
||
|
/***********************************************\
|
||
|
* IPP Job-State Codes
|
||
|
*
|
||
|
\***********************************************/
|
||
|
#define IPP_JOBSTATE_UNKNOWN ((BYTE)0)
|
||
|
#define IPP_JOBSTATE_PENDING ((BYTE)3)
|
||
|
#define IPP_JOBSTATE_PENDINGHELD ((BYTE)4)
|
||
|
#define IPP_JOBSTATE_PROCESSING ((BYTE)5)
|
||
|
#define IPP_JOBSTATE_PROCESSEDSTOPPED ((BYTE)6)
|
||
|
#define IPP_JOBSTATE_CANCELLED ((BYTE)7)
|
||
|
#define IPP_JOBSTATE_ABORTED ((BYTE)8)
|
||
|
#define IPP_JOBSTATE_COMPLETED ((BYTE)9)
|
||
|
|
||
|
|
||
|
/***********************************************\
|
||
|
* IPP Printer-State Codes
|
||
|
*
|
||
|
\***********************************************/
|
||
|
#define IPP_PRNSTATE_UNKNOWN ((DWORD)0)
|
||
|
#define IPP_PRNSTATE_IDLE ((DWORD)3)
|
||
|
#define IPP_PRNSTATE_PROCESSING ((DWORD)4)
|
||
|
#define IPP_PRNSTATE_STOPPED ((DWORD)5)
|
||
|
|
||
|
|
||
|
/***********************************************\
|
||
|
* IPP Request/Response Codes
|
||
|
*
|
||
|
\***********************************************/
|
||
|
#define IPP_REQ_GETOPERATION ((WORD)0x0001)
|
||
|
#define IPP_REQ_PRINTJOB ((WORD)0x0002) // Implemented
|
||
|
#define IPP_REQ_PRINTURI ((WORD)0x0003)
|
||
|
#define IPP_REQ_VALIDATEJOB ((WORD)0x0004) // Implemented
|
||
|
#define IPP_REQ_CREATEJOB ((WORD)0x0005)
|
||
|
#define IPP_REQ_SENDDOC ((WORD)0x0006)
|
||
|
#define IPP_REQ_SENDURI ((WORD)0x0007)
|
||
|
#define IPP_REQ_CANCELJOB ((WORD)0x0008) // Implemented
|
||
|
#define IPP_REQ_GETJOB ((WORD)0x0009) // Implemented
|
||
|
#define IPP_REQ_ENUJOB ((WORD)0x000A) // Implemented
|
||
|
#define IPP_REQ_GETPRN ((WORD)0x000B) // Implemented
|
||
|
#define IPP_REQ_PAUSEJOB ((WORD)0x000C) // Implemented
|
||
|
#define IPP_REQ_RESUMEJOB ((WORD)0x000D) // Implemented
|
||
|
#define IPP_REQ_RESTARTJOB ((WORD)0x000E) // Implemented
|
||
|
#define IPP_REQ_REPROCESSJOB ((WORD)0x000F)
|
||
|
#define IPP_REQ_PAUSEPRN ((WORD)0x0010) // Implemented
|
||
|
#define IPP_REQ_RESUMEPRN ((WORD)0x0011) // Implemented
|
||
|
#define IPP_REQ_CANCELPRN ((WORD)0x0012) // Implemented
|
||
|
#define IPP_REQ_FORCEAUTH ((WORD)0x4000)
|
||
|
|
||
|
#define IPP_RESPONSE ((WORD)0x1000)
|
||
|
#define IPP_RET_PRINTJOB (IPP_RESPONSE | IPP_REQ_PRINTJOB)
|
||
|
#define IPP_RET_VALIDATEJOB (IPP_RESPONSE | IPP_REQ_VALIDATEJOB)
|
||
|
#define IPP_RET_CANCELJOB (IPP_RESPONSE | IPP_REQ_CANCELJOB)
|
||
|
#define IPP_RET_GETJOB (IPP_RESPONSE | IPP_REQ_GETJOB)
|
||
|
#define IPP_RET_ENUJOB (IPP_RESPONSE | IPP_REQ_ENUJOB)
|
||
|
#define IPP_RET_GETPRN (IPP_RESPONSE | IPP_REQ_GETPRN)
|
||
|
#define IPP_RET_PAUSEJOB (IPP_RESPONSE | IPP_REQ_PAUSEJOB)
|
||
|
#define IPP_RET_RESUMEJOB (IPP_RESPONSE | IPP_REQ_RESUMEJOB)
|
||
|
#define IPP_RET_RESTARTJOB (IPP_RESPONSE | IPP_REQ_RESTARTJOB)
|
||
|
#define IPP_RET_PAUSEPRN (IPP_RESPONSE | IPP_REQ_PAUSEPRN)
|
||
|
#define IPP_RET_RESUMEPRN (IPP_RESPONSE | IPP_REQ_RESUMEPRN)
|
||
|
#define IPP_RET_CANCELPRN (IPP_RESPONSE | IPP_REQ_CANCELPRN)
|
||
|
#define IPP_RET_FORCEAUTH (IPP_RESPONSE | IPP_REQ_FORCEAUTH)
|
||
|
|
||
|
|
||
|
/***********************************************\
|
||
|
* IPP Response Error Codes
|
||
|
*
|
||
|
\***********************************************/
|
||
|
#define IPPRSP_SUCCESS ((WORD)0x0000) // Standard
|
||
|
#define IPPRSP_SUCCESS1 ((WORD)0x0001) // Standard
|
||
|
#define IPPRSP_SUCCESS2 ((WORD)0x0002) // Standard
|
||
|
|
||
|
#define IPPRSP_ERROR_400 ((WORD)0x0400) // Standard
|
||
|
#define IPPRSP_ERROR_401 ((WORD)0x0401) // Standard
|
||
|
#define IPPRSP_ERROR_402 ((WORD)0x0402) // Standard
|
||
|
#define IPPRSP_ERROR_403 ((WORD)0x0403) // Standard
|
||
|
#define IPPRSP_ERROR_404 ((WORD)0x0404) // Standard
|
||
|
#define IPPRSP_ERROR_405 ((WORD)0x0405) // Standard
|
||
|
#define IPPRSP_ERROR_406 ((WORD)0x0406) // Standard
|
||
|
#define IPPRSP_ERROR_407 ((WORD)0x0407) // Standard
|
||
|
#define IPPRSP_ERROR_408 ((WORD)0x0408) // Standard
|
||
|
#define IPPRSP_ERROR_409 ((WORD)0x0409) // Standard
|
||
|
#define IPPRSP_ERROR_40A ((WORD)0x040A) // Standard
|
||
|
#define IPPRSP_ERROR_40B ((WORD)0x040B) // Standard
|
||
|
#define IPPRSP_ERROR_40C ((WORD)0x040C) // Standard
|
||
|
#define IPPRSP_ERROR_40D ((WORD)0x040D) // Standard
|
||
|
#define IPPRSP_ERROR_40E ((WORD)0x040E) // Standard
|
||
|
#define IPPRSP_ERROR_500 ((WORD)0x0500) // Standard
|
||
|
#define IPPRSP_ERROR_501 ((WORD)0x0501) // Standard
|
||
|
#define IPPRSP_ERROR_502 ((WORD)0x0502) // Standard
|
||
|
#define IPPRSP_ERROR_503 ((WORD)0x0503) // Standard
|
||
|
#define IPPRSP_ERROR_504 ((WORD)0x0504) // Standard
|
||
|
#define IPPRSP_ERROR_505 ((WORD)0x0505) // Standard
|
||
|
#define IPPRSP_ERROR_506 ((WORD)0x0506) // Standard
|
||
|
#define IPPRSP_ERROR_540 ((WORD)0x0540) // Extended
|
||
|
|
||
|
#define SUCCESS_RANGE(wRsp) ((BOOL)((wRsp >= 0x0000) && (wRsp <= 0x00FF)))
|
||
|
|
||
|
#define ERROR_RANGE(wReq) \
|
||
|
(((wReq >= IPPRSP_ERROR_400) && (wReq <= IPPRSP_ERROR_40E)) || \
|
||
|
((wReq >= IPPRSP_ERROR_500) && (wReq <= IPPRSP_ERROR_506)) || \
|
||
|
((wReq == IPPRSP_ERROR_540)))
|
||
|
|
||
|
|
||
|
#define REQID_RANGE(idReq) (((DWORD)idReq >= 1) && ((DWORD)idReq <= 0x7FFFFFFF))
|
||
|
|
||
|
|
||
|
/***********************************************\
|
||
|
* IPP Attribute Delimiter Tags
|
||
|
*
|
||
|
\***********************************************/
|
||
|
#define IPP_TAG_DEL_RESERVED ((BYTE)0x00) //
|
||
|
#define IPP_TAG_DEL_OPERATION ((BYTE)0x01) //
|
||
|
#define IPP_TAG_DEL_JOB ((BYTE)0x02) //
|
||
|
#define IPP_TAG_DEL_DATA ((BYTE)0x03) //
|
||
|
#define IPP_TAG_DEL_PRINTER ((BYTE)0x04) //
|
||
|
#define IPP_TAG_DEL_UNSUPPORTED ((BYTE)0x05) //
|
||
|
|
||
|
#define IPP_TAG_OUT_UNSUPPORTED ((BYTE)0x10) //
|
||
|
#define IPP_TAG_OUT_DEFAULT ((BYTE)0x11) //
|
||
|
#define IPP_TAG_OUT_NONE ((BYTE)0x12) //
|
||
|
#define IPP_TAG_OUT_COMPOUND ((BYTE)0x13) //
|
||
|
|
||
|
#define IPP_TAG_INT_INTEGER ((BYTE)0x21) // sizeof(DWORD)
|
||
|
#define IPP_TAG_INT_BOOLEAN ((BYTE)0x22) // sizeof(BYTE)
|
||
|
#define IPP_TAG_INT_ENUM ((BYTE)0x23) // sizeof(DWORD)
|
||
|
|
||
|
#define IPP_TAG_OCT_STRING ((BYTE)0x30) // UTF-8
|
||
|
#define IPP_TAG_OCT_DATETIME ((BYTE)0x31) // UTF-8
|
||
|
#define IPP_TAG_OCT_RESOLUTION ((BYTE)0x32) // UTF-8
|
||
|
#define IPP_TAG_OCT_RANGEOFINT ((BYTE)0x33) // UTF-8
|
||
|
#define IPP_TAG_OCT_DICTIONARY ((BYTE)0x34) // UTF-8
|
||
|
#define IPP_TAG_OCT_TXTWITHLANG ((BYTE)0x35)
|
||
|
#define IPP_TAG_OCT_NMEWITHLANG ((BYTE)0x36)
|
||
|
|
||
|
#define IPP_TAG_CHR_TEXT ((BYTE)0x41) // CharSet Dependent
|
||
|
#define IPP_TAG_CHR_NAME ((BYTE)0x42) // CharSet Dependent
|
||
|
#define IPP_TAG_CHR_KEYWORD ((BYTE)0x44) // US-ASCII
|
||
|
#define IPP_TAG_CHR_URI ((BYTE)0x45) // US-ASCII
|
||
|
#define IPP_TAG_CHR_URISCHEME ((BYTE)0x46) // US-ASCII
|
||
|
#define IPP_TAG_CHR_CHARSET ((BYTE)0x47) // US-ASCII
|
||
|
#define IPP_TAG_CHR_NATURAL ((BYTE)0x48) // US-ASCII
|
||
|
#define IPP_TAG_CHR_MEDIA ((BYTE)0x49) // US-ASCII
|
||
|
|
||
|
|
||
|
#define IPP_MANDITORY ((BYTE)0x00)
|
||
|
#define IPP_OPTIONAL ((BYTE)0x10)
|
||
|
#define IPP_MULTIPLE ((BYTE)0x20)
|
||
|
#define IPP_HIT ((BYTE)0x80)
|
||
|
|
||
|
/***********************************************\
|
||
|
* IPP Tag-Value Ranges
|
||
|
*
|
||
|
\***********************************************/
|
||
|
#define IS_TAG_DELIMITER(bTag) ((BOOL)((bTag >= 0x00) && (bTag <= 0x0F)))
|
||
|
#define IS_TAG_ATTRIBUTE(bTag) ((BOOL)((bTag >= 0x10) && (bTag <= 0xFF)))
|
||
|
#define IS_TAG_OUTBOUND(bTag) ((BOOL)((bTag >= 0x10) && (bTag <= 0x1F)))
|
||
|
#define IS_TAG_INTEGER(bTag) ((BOOL)((bTag >= 0x20) && (bTag <= 0x2F)))
|
||
|
#define IS_TAG_OCTSTR(bTag) ((BOOL)((bTag >= 0x30) && (bTag <= 0x3F)))
|
||
|
#define IS_TAG_CHRSTR(bTag) ((BOOL)((bTag >= 0x40) && (bTag <= 0x5F)))
|
||
|
#define IS_TAG_CHARSETSTR(bTag) ((BOOL)((bTag == 0x41) || (bTag == 0x42)))
|
||
|
#define IS_RANGE_DELIMITER(bTag) ((BOOL)((bTag >= 0x00) && (bTag <= 0x05)))
|
||
|
|
||
|
#define IS_TAG_COMPOUND(bTag) ((BOOL)((bTag == 0x35) || (bTag == 0x36)))
|
||
|
|
||
|
/***********************************************\
|
||
|
* IPP Request Flags
|
||
|
*
|
||
|
\***********************************************/
|
||
|
|
||
|
#define RA_JOBURI 0x00000001
|
||
|
#define RA_JOBID 0x00000002
|
||
|
#define RA_JOBSTATE 0x00000004
|
||
|
#define RA_JOBNAME 0x00000008
|
||
|
#define RA_JOBSIZE 0x00000010
|
||
|
#define RA_JOBUSER 0x00000020
|
||
|
#define RA_JOBPRIORITY 0x00000040
|
||
|
#define RA_JOBFORMAT 0x00000080
|
||
|
#define RA_JOBSTATE_REASONS 0x00000100
|
||
|
#define RA_JOBSTATE_MESSAGE 0x00000200
|
||
|
#define RA_JOBCOUNT 0x00000400
|
||
|
#define RA_SHEETSTOTAL 0x00000800
|
||
|
#define RA_SHEETSCOMPLETED 0x00001000
|
||
|
#define RA_PRNURI 0x00002000
|
||
|
#define RA_PRNSTATE 0x00004000
|
||
|
#define RA_PRNNAME 0x00008000
|
||
|
#define RA_PRNMAKE 0x00010000
|
||
|
#define RA_URISUPPORTED 0x00020000
|
||
|
#define RA_URISECURITY 0x00040000
|
||
|
#define RA_ACCEPTINGJOBS 0x00080000
|
||
|
#define RA_CHRSETCONFIGURED 0x00100000
|
||
|
#define RA_CHRSETSUPPORTED 0x00200000
|
||
|
#define RA_NATLNGCONFIGURED 0x00400000
|
||
|
#define RA_NATLNGSUPPORTED 0x00800000
|
||
|
#define RA_DOCDEFAULT 0x01000000
|
||
|
#define RA_DOCSUPPORTED 0x02000000
|
||
|
#define RA_PDLOVERRIDE 0x04000000
|
||
|
#define RA_UPTIME 0x08000000
|
||
|
#define RA_OPSSUPPORTED 0x10000001
|
||
|
#define RA_JOBKSUPPORTED 0x10000002
|
||
|
#define RA_JOBSCOMPLETED 0x10000004
|
||
|
#define RA_JOBSUNCOMPLETED 0x10000008
|
||
|
#define RA_TIMEATCREATION 0x10000010
|
||
|
|
||
|
|
||
|
|
||
|
#define IPP_REQALL_IDX 8
|
||
|
#define IPP_REQENU_IDX 9
|
||
|
#define IPP_REQJDSC_IDX 10
|
||
|
#define IPP_REQJTMP_IDX 11
|
||
|
#define IPP_REQPDSC_IDX 12
|
||
|
#define IPP_REQPTMP_IDX 13
|
||
|
#define IPP_REQCLEAR_IDX 14
|
||
|
|
||
|
#define IPP_REQALL ((DWORD)0x80000000)
|
||
|
#define IPP_REQENU ((DWORD)0x90000000)
|
||
|
#define IPP_REQJDSC ((DWORD)0xA0000000)
|
||
|
#define IPP_REQJTMP ((DWORD)0xB0000000)
|
||
|
#define IPP_REQPDSC ((DWORD)0xC0000000)
|
||
|
#define IPP_REQPTMP ((DWORD)0xD0000000)
|
||
|
#define IPP_REQCLEAR ((DWORD)0xE0000000)
|
||
|
|
||
|
|
||
|
/***********************************************\
|
||
|
* WebIppRcvData Return Codes
|
||
|
*
|
||
|
* Receive API codes. These are our internal
|
||
|
* return-codes for the WebIpp routines. They
|
||
|
* have no connection to the IPP spec, but are
|
||
|
* needed to let the caller know status of our
|
||
|
* IPP handler-routines.
|
||
|
*
|
||
|
\***********************************************/
|
||
|
#define WEBIPP_OK 0
|
||
|
#define WEBIPP_FAIL 1
|
||
|
#define WEBIPP_MOREDATA 2
|
||
|
#define WEBIPP_BADHANDLE 3
|
||
|
#define WEBIPP_NOMEMORY 4
|
||
|
|
||
|
|
||
|
/***********************************************\
|
||
|
* IPP Job/Printer Structures
|
||
|
*
|
||
|
* These are meant to provide additional
|
||
|
* information to the standard W32 Spooler
|
||
|
* structures.
|
||
|
*
|
||
|
\***********************************************/
|
||
|
typedef struct _JOB_INFO_IPP {
|
||
|
|
||
|
LPTSTR pPrnUri;
|
||
|
LPTSTR pJobUri;
|
||
|
DWORD cJobs;
|
||
|
|
||
|
} JOB_INFO_IPP;
|
||
|
typedef JOB_INFO_IPP *PJOB_INFO_IPP;
|
||
|
typedef JOB_INFO_IPP *LPJOB_INFO_IPP;
|
||
|
|
||
|
typedef struct _IPPJI2 {
|
||
|
|
||
|
JOB_INFO_2 ji2;
|
||
|
JOB_INFO_IPP ipp;
|
||
|
|
||
|
} IPPJI2;
|
||
|
typedef IPPJI2 *PIPPJI2;
|
||
|
typedef IPPJI2 *LPIPPJI2;
|
||
|
|
||
|
typedef struct _PRINTER_INFO_IPP {
|
||
|
|
||
|
LPTSTR pPrnUri;
|
||
|
LPTSTR pUsrName;
|
||
|
time_t dwPowerUpTime; // This stores the T0 time of the printer in UCT, it is intentionally
|
||
|
// signed so that we can support Printers who's T0 is smaller than
|
||
|
// our T0 (1 Jan 1970)
|
||
|
} PRINTER_INFO_IPP;
|
||
|
|
||
|
typedef PRINTER_INFO_IPP *PPRINTER_INFO_IPP;
|
||
|
typedef PRINTER_INFO_IPP *LPPRINTER_INFO_IPP;
|
||
|
|
||
|
typedef struct _IPPPI2 {
|
||
|
|
||
|
PRINTER_INFO_2 pi2;
|
||
|
PRINTER_INFO_IPP ipp;
|
||
|
|
||
|
} IPPPI2;
|
||
|
typedef IPPPI2 *PIPPPI2;
|
||
|
typedef IPPPI2 *LPIPPPI2;
|
||
|
|
||
|
|
||
|
/***********************************************\
|
||
|
* IPP Return Structures
|
||
|
*
|
||
|
* IPPRET_JOB - Job Information Response.
|
||
|
* IPPRET_PRN - Printer Information Response.
|
||
|
* IPPRET_ENUJOB - Enum-Job.
|
||
|
* IPPRET_AUTH - Authentication.
|
||
|
*
|
||
|
\***********************************************/
|
||
|
typedef struct _IPPRET_ALL {
|
||
|
|
||
|
DWORD cbSize; // Size of entire structure.
|
||
|
DWORD dwLastError; // LastError.
|
||
|
WORD wRsp; // Response Code.
|
||
|
BOOL bRet; // Return Code.
|
||
|
|
||
|
} IPPRET_ALL;
|
||
|
typedef IPPRET_ALL *PIPPRET_ALL;
|
||
|
typedef IPPRET_ALL *LPIPPRET_ALL;
|
||
|
|
||
|
typedef IPPRET_ALL *PIPPRET_AUTH;
|
||
|
typedef IPPRET_ALL *LPIPPRET_AUTH;
|
||
|
|
||
|
typedef struct _IPPRET_JOB {
|
||
|
|
||
|
DWORD cbSize; // Size of entire structure.
|
||
|
DWORD dwLastError; // LastError for failed calls.
|
||
|
WORD wRsp; // Response Code.
|
||
|
BOOL bRet; // Return code for job calls.
|
||
|
BOOL bValidate; // Is this only a validation request.
|
||
|
IPPJI2 ji; // Job-Information.
|
||
|
|
||
|
} IPPRET_JOB;
|
||
|
typedef IPPRET_JOB *PIPPRET_JOB;
|
||
|
typedef IPPRET_JOB *LPIPPRET_JOB;
|
||
|
|
||
|
typedef struct _IPPRET_PRN {
|
||
|
|
||
|
DWORD cbSize; // Size of entire structure.
|
||
|
DWORD dwLastError; // LastError for failed calls.
|
||
|
WORD wRsp; // Response Code.
|
||
|
BOOL bRet; // Return code for printer calls.
|
||
|
IPPPI2 pi; // Printer-Information.
|
||
|
|
||
|
} IPPRET_PRN;
|
||
|
typedef IPPRET_PRN *PIPPRET_PRN;
|
||
|
typedef IPPRET_PRN *LPIPPRET_PRN;
|
||
|
|
||
|
typedef struct _IPPRET_ENUJOB {
|
||
|
|
||
|
DWORD cbSize; // Size of entire structure (including enum-data).
|
||
|
DWORD dwLastError; // LastError for failed calls.
|
||
|
WORD wRsp; // Response Code.
|
||
|
BOOL bRet; // EnumJob/Get Return-Code.
|
||
|
DWORD cItems; // Number of items in enum.
|
||
|
DWORD cbItems; // Size of Enum Data.
|
||
|
LPIPPJI2 pItems; //
|
||
|
|
||
|
} IPPRET_ENUJOB;
|
||
|
typedef IPPRET_ENUJOB *PIPPRET_ENUJOB;
|
||
|
typedef IPPRET_ENUJOB *LPIPPRET_ENUJOB;
|
||
|
|
||
|
|
||
|
/***********************************************\
|
||
|
* IPP Request Structures
|
||
|
*
|
||
|
* IPPREQ_PRTJOB - Print-Job/Validate-Job.
|
||
|
* IPPREQ_ENUJOB - Enum-Job.
|
||
|
* IPPREQ_GETJOB - Get-Job.
|
||
|
* IPPREQ_SETJOB - Set-Job.
|
||
|
* IPPREQ_GETPRN - Get-Printer.
|
||
|
* IPPREQ_SETPRN - Set-Printer.
|
||
|
* IPPREQ_AUTH - Authentication.
|
||
|
*
|
||
|
\***********************************************/
|
||
|
typedef struct _IPPREQ_ALL {
|
||
|
|
||
|
DWORD cbSize; // Size of entire structure.
|
||
|
|
||
|
} IPPREQ_ALL;
|
||
|
typedef IPPREQ_ALL *PIPPREQ_ALL;
|
||
|
typedef IPPREQ_ALL *LPIPPREQ_ALL;
|
||
|
|
||
|
typedef IPPREQ_ALL IPPREQ_AUTH;
|
||
|
typedef IPPREQ_ALL *PIPPREQ_AUTH;
|
||
|
typedef IPPREQ_ALL *LPIPPREQ_AUTH;
|
||
|
|
||
|
typedef struct _IPPREQ_PRTJOB {
|
||
|
|
||
|
DWORD cbSize; // Size of entire structure.
|
||
|
BOOL bValidate; // Indicates whether this is only a validation.
|
||
|
LPTSTR pDocument; // Document name.
|
||
|
LPTSTR pUserName; // Requesting User name.
|
||
|
LPTSTR pPrnUri; // Printer Uri string.
|
||
|
|
||
|
} IPPREQ_PRTJOB;
|
||
|
typedef IPPREQ_PRTJOB *PIPPREQ_PRTJOB;
|
||
|
typedef IPPREQ_PRTJOB *LPIPPREQ_PRTJOB;
|
||
|
|
||
|
typedef struct _IPPREQ_SETJOB {
|
||
|
|
||
|
DWORD cbSize; // Size of entire structure.
|
||
|
DWORD dwCmd; // Job command.
|
||
|
DWORD idJob; // Job ID.
|
||
|
LPTSTR pPrnUri; // Job Uri.
|
||
|
|
||
|
} IPPREQ_SETJOB;
|
||
|
typedef IPPREQ_SETJOB *PIPPREQ_SETJOB;
|
||
|
typedef IPPREQ_SETJOB *LPIPPREQ_SETJOB;
|
||
|
|
||
|
typedef struct _IPPREQ_ENUJOB {
|
||
|
|
||
|
DWORD cbSize;
|
||
|
DWORD cJobs;
|
||
|
LPTSTR pPrnUri;
|
||
|
|
||
|
} IPPREQ_ENUJOB;
|
||
|
typedef IPPREQ_ENUJOB *PIPPREQ_ENUJOB;
|
||
|
typedef IPPREQ_ENUJOB *LPIPPREQ_ENUJOB;
|
||
|
|
||
|
typedef struct _IPPREQ_GETPRN {
|
||
|
|
||
|
DWORD cbSize;
|
||
|
DWORD dwAttr;
|
||
|
LPTSTR pPrnUri;
|
||
|
|
||
|
} IPPREQ_GETPRN;
|
||
|
typedef IPPREQ_GETPRN *PIPPREQ_GETPRN;
|
||
|
typedef IPPREQ_GETPRN *LPIPPREQ_GETPRN;
|
||
|
|
||
|
typedef struct _IPPREQ_GETJOB {
|
||
|
|
||
|
DWORD cbSize;
|
||
|
DWORD idJob;
|
||
|
LPTSTR pPrnUri;
|
||
|
|
||
|
} IPPREQ_GETJOB;
|
||
|
typedef IPPREQ_GETJOB *PIPPREQ_GETJOB;
|
||
|
typedef IPPREQ_GETJOB *LPIPPREQ_GETJOB;
|
||
|
|
||
|
typedef struct _IPPREQ_SETPRN {
|
||
|
|
||
|
DWORD cbSize;
|
||
|
DWORD dwCmd;
|
||
|
LPTSTR pUserName;
|
||
|
LPTSTR pPrnUri;
|
||
|
|
||
|
} IPPREQ_SETPRN;
|
||
|
typedef IPPREQ_SETPRN *PIPPREQ_SETPRN;
|
||
|
typedef IPPREQ_SETPRN *LPIPPREQ_SETPRN;
|
||
|
|
||
|
|
||
|
/***********************************************\
|
||
|
* IPP Attribute Structure.
|
||
|
*
|
||
|
\***********************************************/
|
||
|
typedef struct _IPPATTR {
|
||
|
|
||
|
BYTE bTag;
|
||
|
WORD cbName;
|
||
|
LPTSTR lpszName;
|
||
|
WORD cbValue;
|
||
|
LPVOID lpValue;
|
||
|
|
||
|
} IPPATTR;
|
||
|
typedef IPPATTR *PIPPATTR;
|
||
|
typedef IPPATTR *LPIPPATTR;
|
||
|
|
||
|
|
||
|
/***********************************************\
|
||
|
* IPP Error-Mappings
|
||
|
*
|
||
|
\***********************************************/
|
||
|
typedef struct _IPPERROR {
|
||
|
|
||
|
WORD wRsp;
|
||
|
DWORD dwLE;
|
||
|
PCTSTR pszStr;
|
||
|
|
||
|
} IPPERROR;
|
||
|
typedef IPPERROR *PIPPERROR;
|
||
|
typedef IPPERROR *LPIPPERROR;
|
||
|
|
||
|
|
||
|
/***********************************************\
|
||
|
* IPP Default-Error-Mappings
|
||
|
*
|
||
|
\***********************************************/
|
||
|
typedef struct _IPPDEFERROR {
|
||
|
|
||
|
DWORD dwLE;
|
||
|
WORD wRsp;
|
||
|
|
||
|
} IPPDEFERROR;
|
||
|
typedef IPPDEFERROR *PIPPDEFERROR;
|
||
|
typedef IPPDEFERROR *LPIPPDEFERROR;
|
||
|
|
||
|
#define IPPFLG_VALID 1
|
||
|
#define IPPFLG_CHARSET 2
|
||
|
#define IPPFLG_NATLANG 4
|
||
|
#define IPPFLG_USEFIDELITY 8
|
||
|
|
||
|
/***********************************************\
|
||
|
* IPP Object Structure.
|
||
|
*
|
||
|
\***********************************************/
|
||
|
typedef struct _IPPOBJ {
|
||
|
|
||
|
WORD wReq; // Open Request being processed.
|
||
|
WORD wError; // Used to store ipp errors during receive processing.
|
||
|
DWORD idReq; // Request Id.
|
||
|
UINT uCPRcv; // Codepage translation for receiving IPP Streams.
|
||
|
DWORD fState; //
|
||
|
DWORD cbIppMax; // Maximum size of hdr-Buffer.
|
||
|
DWORD cbIppHdr; // Current size of hdr-buffer data.
|
||
|
LPBYTE lpIppHdr; // Buffer to contain IPP-Stream-Header.
|
||
|
LPBYTE lpRawDta; // Aligned (temporary) data buffer.
|
||
|
LPWEBLST pwlUns; // Unsupported attributes list.
|
||
|
|
||
|
DWORD fReq[IPPOBJ_MASK_SIZE];
|
||
|
|
||
|
} IPPOBJ;
|
||
|
typedef IPPOBJ *PIPPOBJ;
|
||
|
typedef IPPOBJ *LPIPPOBJ;
|
||
|
|
||
|
|
||
|
/***********************************************\
|
||
|
* Request Info
|
||
|
*
|
||
|
\***********************************************/
|
||
|
typedef struct _REQINFO {
|
||
|
|
||
|
DWORD idReq;
|
||
|
UINT cpReq;
|
||
|
PWEBLST pwlUns;
|
||
|
BOOL bFidelity;
|
||
|
DWORD fReq[IPPOBJ_MASK_SIZE];
|
||
|
|
||
|
} REQINFO;
|
||
|
typedef REQINFO *PREQINFO;
|
||
|
typedef REQINFO *LPREQINFO;
|
||
|
|
||
|
/***********************************************\
|
||
|
* TypeDefs
|
||
|
*
|
||
|
\***********************************************/
|
||
|
typedef DWORD (*PFNRET)(LPIPPOBJ lpObj, LPBYTE* lplpRawHdr, LPDWORD lpcbRawHdr);
|
||
|
|
||
|
|
||
|
/***********************************************\
|
||
|
* IPP Attribute Structre (X)
|
||
|
*
|
||
|
\***********************************************/
|
||
|
typedef struct _IPPATTRX {
|
||
|
|
||
|
BYTE bTag;
|
||
|
DWORD fReq;
|
||
|
int nVal;
|
||
|
LPCTSTR pszNam;
|
||
|
LPVOID pvVal;
|
||
|
|
||
|
} IPPATTRX;
|
||
|
typedef IPPATTRX *PIPPATTRX;
|
||
|
typedef IPPATTRX *LPIPPATTRX;
|
||
|
|
||
|
|
||
|
/***********************************************\
|
||
|
* IPP Attribute Structre (Y)
|
||
|
*
|
||
|
\***********************************************/
|
||
|
typedef struct _IPPATTRY {
|
||
|
|
||
|
LPSTR pszNam;
|
||
|
DWORD cbNam;
|
||
|
LPSTR pszVal;
|
||
|
DWORD cbVal;
|
||
|
|
||
|
} IPPATTRY;
|
||
|
typedef IPPATTRY *PIPPATTRY;
|
||
|
typedef IPPATTRY *LPIPPATTRY;
|
||
|
|
||
|
/***********************************************\
|
||
|
* IPP Conversion Structure
|
||
|
*
|
||
|
\***********************************************/
|
||
|
typedef struct _IPPSNDRCV {
|
||
|
|
||
|
WORD wReq;
|
||
|
PBYTE pbReqForm;
|
||
|
PBYTE pbRspForm;
|
||
|
LPIPPATTRX paReq;
|
||
|
DWORD cbReq;
|
||
|
LPIPPATTRX paRsp;
|
||
|
DWORD cbRsp;
|
||
|
PFNRET pfnRcvRet;
|
||
|
|
||
|
} IPPSNDRCV;
|
||
|
typedef IPPSNDRCV *PIPPSNDRCV;
|
||
|
typedef IPPSNDRCV *LPIPPSNDRCV;
|
||
|
|
||
|
|
||
|
/***********************************************\
|
||
|
* Flag/String Structure.
|
||
|
*
|
||
|
\***********************************************/
|
||
|
typedef struct _FLGSTR {
|
||
|
|
||
|
DWORD fFlag;
|
||
|
LPCTSTR pszStr;
|
||
|
|
||
|
} FLGSTR;
|
||
|
typedef FLGSTR *PFLGSTR;
|
||
|
typedef FLGSTR *LPFLGSTR;
|
||
|
|
||
|
|
||
|
/************************************************
|
||
|
** Definition of Allocator (for outside functions)
|
||
|
************************************************/
|
||
|
typedef LPVOID (*ALLOCATORFN)(DWORD cb);
|
||
|
|
||
|
/***********************************************\
|
||
|
* WebIpp Object routines.
|
||
|
*
|
||
|
\***********************************************/
|
||
|
DWORD WebIppSndData(
|
||
|
WORD wReq,
|
||
|
LPREQINFO lpri,
|
||
|
LPBYTE lpDta,
|
||
|
DWORD cbDta,
|
||
|
LPBYTE* lpOut,
|
||
|
LPDWORD lpcbOut);
|
||
|
|
||
|
HANDLE WebIppRcvOpen(
|
||
|
WORD);
|
||
|
|
||
|
DWORD WebIppRcvData(
|
||
|
HANDLE hIpp,
|
||
|
LPBYTE lpData,
|
||
|
DWORD cbData,
|
||
|
LPBYTE *lplpHdr,
|
||
|
LPDWORD lpdwHdr,
|
||
|
LPBYTE *lplpDta,
|
||
|
LPDWORD lpdwDta);
|
||
|
|
||
|
BOOL WebIppRcvClose(
|
||
|
HANDLE hIpp);
|
||
|
|
||
|
WORD WebIppGetError(
|
||
|
HANDLE hIpp);
|
||
|
|
||
|
WORD WebIppLeToRsp(
|
||
|
DWORD dwLastError);
|
||
|
|
||
|
DWORD WebIppRspToLe(
|
||
|
WORD wRsp);
|
||
|
|
||
|
BOOL WebIppGetReqInfo(
|
||
|
HANDLE hIpp,
|
||
|
LPREQINFO lpri);
|
||
|
|
||
|
BOOL WebIppFreeMem(
|
||
|
LPVOID lpMem);
|
||
|
|
||
|
LPIPPJI2 WebIppCvtJI2toIPPJI2(
|
||
|
IN LPCTSTR lpszJobBase,
|
||
|
IN OUT LPDWORD lpcbJobs,
|
||
|
IN DWORD cJobs,
|
||
|
IN LPJOB_INFO_2 lpJI2Src);
|
||
|
|
||
|
LPJOB_INFO_2 WebIppPackJI2(
|
||
|
IN LPJOB_INFO_2 lpji2,
|
||
|
OUT LPDWORD lpcbSize,
|
||
|
IN ALLOCATORFN pfnAlloc
|
||
|
);
|
||
|
|
||
|
/***********************************************\
|
||
|
* Request Creation Routines
|
||
|
*
|
||
|
\***********************************************/
|
||
|
PIPPREQ_PRTJOB WebIppCreatePrtJobReq(
|
||
|
BOOL bValidate,
|
||
|
LPCTSTR lpszUser,
|
||
|
LPCTSTR lpszDoc,
|
||
|
LPCTSTR lpszPrnUri);
|
||
|
|
||
|
PIPPREQ_ENUJOB WebIppCreateEnuJobReq(
|
||
|
DWORD cJobs,
|
||
|
LPCTSTR lpszPrnUri);
|
||
|
|
||
|
PIPPREQ_SETJOB WebIppCreateSetJobReq(
|
||
|
DWORD idJob,
|
||
|
DWORD dwCmd,
|
||
|
LPCTSTR lpszPrnUri);
|
||
|
|
||
|
PIPPREQ_GETJOB WebIppCreateGetJobReq(
|
||
|
DWORD idJob,
|
||
|
LPCTSTR lpszPrnUri);
|
||
|
|
||
|
PIPPREQ_GETPRN WebIppCreateGetPrnReq(
|
||
|
DWORD dwAttr,
|
||
|
LPCTSTR lpszPrnUri);
|
||
|
|
||
|
PIPPREQ_SETPRN WebIppCreateSetPrnReq(
|
||
|
DWORD dwCmd,
|
||
|
LPCTSTR lpszPrnName,
|
||
|
LPCTSTR lpszPrnUri);
|
||
|
|
||
|
PIPPREQ_AUTH WebIppCreateAuthReq(VOID);
|
||
|
|
||
|
|
||
|
/***********************************************\
|
||
|
* Response Creation Routines
|
||
|
*
|
||
|
\***********************************************/
|
||
|
PIPPRET_JOB WebIppCreateJobRet(
|
||
|
WORD wRsp,
|
||
|
BOOL bRet,
|
||
|
BOOL bValidate,
|
||
|
LPJOB_INFO_2 lpji2,
|
||
|
LPJOB_INFO_IPP lpipp);
|
||
|
|
||
|
PIPPRET_PRN WebIppCreatePrnRet(
|
||
|
WORD wRsp,
|
||
|
BOOL bRet,
|
||
|
LPPRINTER_INFO_2 lppi2,
|
||
|
LPPRINTER_INFO_IPP lpipp);
|
||
|
|
||
|
|
||
|
PIPPRET_ENUJOB WebIppCreateEnuJobRet(
|
||
|
WORD wRsp,
|
||
|
BOOL bRet,
|
||
|
DWORD cbJobs,
|
||
|
DWORD cJobs,
|
||
|
LPIPPJI2 lpbJobs);
|
||
|
|
||
|
PIPPRET_ALL WebIppCreateBadRet(
|
||
|
WORD wRsp,
|
||
|
BOOL bRet);
|
||
|
|
||
|
PIPPRET_AUTH WebIppCreateAuthRet(
|
||
|
WORD wRsp,
|
||
|
BOOL bRet);
|
||
|
|
||
|
BOOL WebIppConvertSystemTime(
|
||
|
IN OUT LPSYSTEMTIME pSystemTime,
|
||
|
IN time_t dwPrinterT0);
|
||
|
|
||
|
|
||
|
#ifdef UNICODE
|
||
|
|
||
|
#define WEB_IPP_ASSERT(Expr) ASSERT(Expr)
|
||
|
|
||
|
#else
|
||
|
|
||
|
#define WEB_IPP_ASSERT(Expr) // Need to figure out what to do here
|
||
|
|
||
|
#endif
|
||
|
|
||
|
#ifdef __cplusplus // Place this here to prevent decorating of symbols
|
||
|
} // when doing C++ stuff.
|
||
|
#endif //
|
||
|
#endif
|