/*************************************************************************
 *                        Microsoft Windows NT                           *
 *                                                                       *
 *                  Copyright(c) Microsoft Corp., 1994                   *
 *                                                                       *
 * Revision History:                                                     *
 *                                                                       *
 *   Jan. 22,94    Koti     Created                                      *
 *                                                                       *
 * Description:                                                          *
 *                                                                       *
 *   This file contains all externs and prototypes of functions.         *
 *                                                                       *
 *************************************************************************/


#include <tcpsvcs.h>


// externs

extern SERVICE_STATUS         ssSvcStatusGLB;

extern SERVICE_STATUS_HANDLE  hSvcHandleGLB;

extern HANDLE                 hEventShutdownGLB;

extern HANDLE                 hEventLastThreadGLB;

extern HANDLE                 hLogHandleGLB;

extern SOCKCONN               scConnHeadGLB;

extern CRITICAL_SECTION       csConnSemGLB;

extern COMMON_LPD             Common;

extern DWORD                  dwMaxUsersGLB;

extern DWORD                  MaxQueueLength;

extern BOOL                   fJobRemovalEnabledGLB;

extern BOOL                   fAllowPrintResumeGLB;

extern BOOL                   fAlwaysRawGLB;

extern DWORD                  dwRecvTimeout;

extern BOOL                   fShuttingDownGLB;

extern CHAR                   szNTVersion[8];

extern LIST_ENTRY             DbgMemList;

extern CHAR                  *g_ppszStrings[];




// Prototypes

VOID ServiceEntry( DWORD dwArgc, LPTSTR *lpszArgv,
                    PTCPSVCS_GLOBAL_DATA pGlobalData );

VOID LPDCntrlHandler( DWORD dwControl );

BOOL TellSrvcController( DWORD dwCurrentState, DWORD dwWin32ExitCode,
                            DWORD dwCheckPoint, DWORD dwWaitHint);

VOID LPDCntrlHandler( DWORD dwControl );

DWORD StartLPD( DWORD dwArgc, LPTSTR *lpszArgv );

VOID StopLPD( VOID );

DWORD LoopOnAccept( LPVOID lpArgv );

VOID SureCloseSocket( SOCKET sSockToClose );

DWORD ReplyToClient( PSOCKCONN pscConn, WORD wResponse );

DWORD GetCmdFromClient( PSOCKCONN pscConn );

DWORD GetControlFileFromClient( PSOCKCONN pscConn, DWORD FileSize, PCHAR FileName );

BOOL LicensingApproval( PSOCKCONN pscConn );

DWORD ReadData(   SOCKET sDestSock, PCHAR pchBuf, DWORD cbBytesToRead );
DWORD ReadDataEx( SOCKET sDestSock, PCHAR pchBuf, DWORD cbBytesToRead );

DWORD SendData( SOCKET sDestSock, PCHAR pchBuf, DWORD cbBytesToSend );

DWORD        ServiceTheClient( PSOCKCONN pscConn );
DWORD WINAPI WorkerThread(     LPVOID    pscConn );

VOID TerminateConnection( PSOCKCONN pscConn );

VOID ProcessJob( PSOCKCONN pscConn );

VOID SendQueueStatus( PSOCKCONN  pscConn, WORD  wMode );

DWORD RemoveJobs( PSOCKCONN pscConn );

DWORD ParseSubCommand( PSOCKCONN  pscConn, DWORD *FileLen, PCHAR *FileName );

DWORD ParseControlFile( PSOCKCONN pscConn, PCFILE_ENTRY pCFileEntry );

BOOL ParseQueueName( PSOCKCONN pscConn );

BOOL InitStuff( VOID );

DWORD ResumePrinting( PSOCKCONN pscConn );

DWORD InitializePrinter( PSOCKCONN pscConn );

DWORD UpdateJobInfo( PSOCKCONN pscConn, PCFILE_INFO pCFileInfo );

DWORD UpdateJobType( PSOCKCONN pscConn, PCHAR pchDataBuf, DWORD cbDataLen);

PCHAR StoreIpAddr( PSOCKCONN pscConn );

VOID ShutdownPrinter( PSOCKCONN pscConn );

DWORD SpoolData( HANDLE hSpoolFile, PCHAR pchDataBuf, DWORD cbDataBufLen );

DWORD PrintData( PSOCKCONN pcsConn );

DWORD PrintIt( PSOCKCONN pscConn, PCFILE_ENTRY pCFileEntry, PCFILE_INFO pCFileInfo, PCHAR pFileName );

VOID AbortThisJob( PSOCKCONN pscConn );

VOID LpdFormat( PCHAR pchDest, PCHAR pchSource, DWORD dwLimit );

DWORD ParseQueueRequest( PSOCKCONN pscConn, BOOL fAgent );

INT   FillJobStatus( PSOCKCONN pscConn, PCHAR pchDest,
                    PJOB_INFO_2 pji2QState, DWORD dwNumJobs );

VOID GetClientInfo( PSOCKCONN pscConn );

VOID GetServerInfo( PSOCKCONN pscConn );

BOOL InitLogging( VOID );

VOID LpdReportEvent( DWORD idMessage, WORD wNumStrings,
                     CHAR *aszStrings[], DWORD dwErrcode );

VOID EndLogging( VOID );

VOID ReadRegistryValues( VOID );

VOID CleanupCFile( PCFILE_ENTRY pCFile );

VOID CleanupDFile( PDFILE_ENTRY pDFile );

VOID FreeStrings();