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 ***********************/
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|