/*****************************************************************************\ * 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 created. * \*****************************************************************************/ #ifndef _WEBIPP_H #define _WEBIPP_H #include #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