153 lines
4.2 KiB
C++
153 lines
4.2 KiB
C++
/*++
|
||
|
||
Copyright (c) 1995 Microsoft Corporation
|
||
|
||
Module Name :
|
||
|
||
igateway.hxx
|
||
|
||
Abstract:
|
||
|
||
This module declares functions and objects for Internet services
|
||
related gateway calls.
|
||
|
||
Author:
|
||
|
||
Murali R. Krishnan ( MuraliK ) Jan-25-1995
|
||
|
||
Environment:
|
||
|
||
User mode -- Win32
|
||
|
||
Project:
|
||
|
||
Internet Services Common DLL
|
||
|
||
Revision History:
|
||
|
||
--*/
|
||
|
||
# ifndef _IGATEWAY_HXX_
|
||
# define _IGATEWAY_HXX_
|
||
|
||
|
||
|
||
/************************************************************
|
||
* Include Headers
|
||
************************************************************/
|
||
|
||
# include "buffer.hxx"
|
||
# include "string.hxx"
|
||
|
||
|
||
/************************************************************
|
||
* Type Definitions
|
||
************************************************************/
|
||
|
||
/*++
|
||
|
||
The gateway callback function is called whenever data is read from the
|
||
gateway process. The function includes supplied context information and
|
||
error code for any errors.
|
||
The error code is NO_ERROR if there is valid data read.
|
||
The data buffer ( pDataBuffer) is the data buffer supplied as
|
||
pbDataFromGateway in the IGATEWAY_REQUEST to TsProcessGatewayRequest().
|
||
|
||
If there is a premature failure in data transfer from gateway process,
|
||
this function will get ERROR_BROKEN_PIPE. This is usually the error code
|
||
that is sent at the end after gateway process has finished sending all
|
||
o/p and closes the output handle.
|
||
|
||
If there are any other internal error, it will also be returned.
|
||
Generally the call-back function should be responsible for cleanup action
|
||
or destroying the context information itself at the end when it
|
||
gets an error code other than NO_ERROR.
|
||
The IO thread will cease to exist after the callback.
|
||
|
||
If there are any errors in the processing stage of callback,
|
||
then the callback function can perform the cleanup of client context
|
||
and notify the io thread by returning FALSE. In which case the thread
|
||
performs its own cleanup and winds up. Also the error code can
|
||
be recived using GetLastError();
|
||
--*/
|
||
typedef BOOL
|
||
( * PFN_IGATEWAY_READ_CALLBACK)
|
||
( IN PVOID pClientContext, // context provided by gateway invoker
|
||
IN DWORD dwError, // error code for any errors
|
||
IN PBYTE pDataBuffer, // data read from gateway
|
||
IN DWORD cbData); // count of bytes read
|
||
|
||
|
||
typedef struct _IGATEWAY_REQUEST {
|
||
|
||
HANDLE hUserToken;
|
||
LPCSTR pszCmdLine;
|
||
LPCSTR pszWorkingDir;
|
||
LPVOID lpvEnvironment;
|
||
|
||
LPBYTE pbDataToGateway; // user supplied data to be sent
|
||
DWORD cbDataToGateway; // number of bytes to be sent
|
||
|
||
} IGATEWAY_REQUEST, * PIGATEWAY_REQUEST;
|
||
|
||
|
||
|
||
|
||
/*++
|
||
|
||
TsProcessGatewayRequest()
|
||
|
||
Description:
|
||
This function creates a gateway processor object responsible for processing
|
||
gateway requests. It extracts the parameters required from input request
|
||
package ( IGATEWAY_REQUEST structure). It creates a separate process for
|
||
gateway request and a separate thread for handling I/O for the
|
||
gateway request. The thread uses buffers supplied for i/o in pigRequest.
|
||
On a completion of read, the thread calls the callback function for
|
||
processing the data retrieved. If the call back function returns any error
|
||
further procecssing in the thread is halted and the thread dies.
|
||
The process also will eventually die, since the pipes are broken.
|
||
|
||
|
||
Arguments:
|
||
pClientContext context information supplied by client
|
||
pigRequest pointer to IGATEWAY_REQUEST object.
|
||
pfnReadCallBack pointer to callback function for read completions.
|
||
|
||
Returns:
|
||
TRUE on success and FALSE if there is any failure.
|
||
Use GetLastError() to retrieve Win32 error code.
|
||
--*/
|
||
|
||
dllexp BOOL
|
||
TsProcessGatewayRequest(
|
||
IN LPVOID pClientContext,
|
||
IN PIGATEWAY_REQUEST pIGatewayRequest,
|
||
PFN_IGATEWAY_READ_CALLBACK pfnReadCallBack);
|
||
|
||
|
||
|
||
#if DBG
|
||
|
||
dllexp VOID
|
||
PrintIGatewayRequest( IN const IGATEWAY_REQUEST * pigRequest);
|
||
|
||
#else
|
||
|
||
dllexp VOID
|
||
PrintIGatewayRequest( IN const IGATEWAY_REQUEST * pigRequest)
|
||
{ ; }
|
||
|
||
#endif // !DBG
|
||
|
||
# endif // _IGATEWAY_HXX_
|
||
|
||
/************************ End of File ***********************/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|