/************************************************************************* * Microsoft Windows NT * * * * Copyright(c) Microsoft Corp., 1994 * * * * Revision History: * * * * Jan. 22,94 Koti Created * * 23-Jan-97 MohsinA Fixes * * * * Description: * * * * This file contains structure and data type definitions used for LPD * * * *************************************************************************/ // see rfc1179, section 7.0 and the following structure will be obvious struct _controlfile_info { PCHAR pchClass; // 'C' PCHAR pchHost; // 'H' (must exist) DWORD dwCount; // 'I' PCHAR pchJobName; // 'J' PCHAR pchBannerName; // 'L' PCHAR pchMailName; // 'M' (not implemented) PCHAR pchSrcFile; // 'N' PCHAR pchUserName; // 'P' (must exist) PCHAR pchSymLink; // 'S' (not implemented) PCHAR pchTitle; // 'T' PCHAR pchUnlink; // 'U' (not implemented) DWORD dwWidth; // 'W' PCHAR pchTrfRFile; // '1' (not implemented) PCHAR pchTrfIFile; // '2' (not implemented) PCHAR pchTrfBFile; // '3' (not implemented) PCHAR pchTrfSFile; // '4' (not implemented) PCHAR pchCIFFile; // 'c' (not implemented) PCHAR pchDVIFile; // 'd' (not implemented) PCHAR pchFrmtdFile; // 'f' PCHAR pchPlotFile; // 'g' (not implemented) PCHAR pchUnfrmtdFile; // 'l' PCHAR pchDitroffFile; // 'n' (not implemented) PCHAR pchPscrptFile; // 'o' PCHAR pchPRFrmtFile; // 'p' (not implemented) PCHAR pchFortranFile; // 'r' (not implemented) PCHAR pchTroffFile; // 't' (not implemented) PCHAR pchRasterFile; // 'v' (not implemented) // what did we conclude from the control file? PCHAR szPrintFormat; USHORT usNumCopies; // not in rfc, but we will put it in! }; typedef struct _controlfile_info CFILE_INFO; typedef CFILE_INFO *PCFILE_INFO; // if client request status of jobs for specific users and/or jobs, then // he can only specify a max of these many users and a max of these many // job ids in one lpq command (yes, this should be ample!) #define LPD_SP_STATUSQ_LIMIT 10 struct _qstatus { PCHAR pchUserName; PCHAR ppchUsers[LPD_SP_STATUSQ_LIMIT]; DWORD cbActualUsers; DWORD adwJobIds[LPD_SP_STATUSQ_LIMIT]; DWORD cbActualJobIds; }; typedef struct _qstatus QSTATUS; typedef QSTATUS *PQSTATUS; struct _cfile_entry { LIST_ENTRY Link; PCHAR pchCFileName; // 0x20 name of control file PCHAR pchCFile; // 0x24 control file DWORD cbCFileLen; // 0x28 length of control file }; typedef struct _cfile_entry CFILE_ENTRY; typedef CFILE_ENTRY *PCFILE_ENTRY; struct _dfile_entry { LIST_ENTRY Link; PCHAR pchDFileName; // 0xa0 name of data file DWORD cbDFileLen; // 0xa8 how many bytes in bufr are data HANDLE hDataFile; }; typedef struct _dfile_entry DFILE_ENTRY; typedef DFILE_ENTRY *PDFILE_ENTRY; struct _sockconn { struct _sockconn *pNext; // WORD cbClients; // used only by the Head SOCKET sSock; // socket which connects us to client DWORD dwThread; // thread id of this thread WORD wState; // state of the connection BOOL fLogGenericEvent; // whether any specific event is logged PCHAR pchCommand; // request command from client DWORD cbCommandLen; // length of the request command LIST_ENTRY CFile_List; // Linked list of control files LIST_ENTRY DFile_List; // Linked list of data files PCHAR pchUserName; // name of user PCHAR pchPrinterName; // name of printer we have to print to HANDLE hPrinter; // handle to this printer DWORD dwJobId; // id of this job as spooler sees it LS_HANDLE LicenseHandle; // handle used in licensing approval BOOL fMustFreeLicense; // so that we know when to free it PQSTATUS pqStatus; // used only if client requests status CHAR szIPAddr[INET6_ADDRSTRLEN]; // ip address of the client BOOL bDataTypeOverride;// Whether or not we auto-sensed a job type CHAR szServerIPAddr[INET6_ADDRSTRLEN]; // ip address of the server struct _sockconn *pPrev; // doubly linked list, queue. #ifdef PROFILING time_t time_queued; time_t time_start; time_t time_done; #endif }; typedef struct _sockconn SOCKCONN; typedef SOCKCONN *PSOCKCONN; // // All thread share this data. // Update to this always protected by CRITICAL_SECTION csConnSemGLB. // struct _common_lpd { int AliveThreads; int TotalAccepts; int MaxThreads; int TotalErrors; int IdleCounter; int QueueLength; }; typedef struct _common_lpd COMMON_LPD;