320 lines
8 KiB
C++
320 lines
8 KiB
C++
/**********************************************************************/
|
|
/** Microsoft Windows NT **/
|
|
/** Copyright(c) Microsoft Corp., 1993 **/
|
|
/**********************************************************************/
|
|
|
|
/*
|
|
inline.hxx
|
|
|
|
Contains simple inline functions that can't included inline due to
|
|
circular dependencies
|
|
|
|
FILE HISTORY:
|
|
Johnl 10-Sept-1996 Created
|
|
|
|
*/
|
|
|
|
|
|
#ifndef _INLINE_H_
|
|
#define _INLINE_H_
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: CLIENT_CONN::ReadFile
|
|
|
|
SYNOPSIS: Simple wrapper around AtqReadSocket
|
|
|
|
HISTORY:
|
|
Johnl 24-Aug-1994 Created
|
|
|
|
********************************************************************/
|
|
|
|
inline
|
|
BOOL CLIENT_CONN::ReadFile( LPVOID lpBuffer,
|
|
DWORD BytesToRead )
|
|
{
|
|
WSABUF wsaBuf = { BytesToRead, (CHAR * ) lpBuffer};
|
|
|
|
Reference();
|
|
if ( !AtqReadSocket( QueryAtqContext(),
|
|
&wsaBuf,
|
|
1,
|
|
NULL ))
|
|
{
|
|
Dereference();
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: CLIENT_CONN::WriteFile
|
|
|
|
SYNOPSIS: Simple wrapper around AtqWriteSocket
|
|
|
|
HISTORY:
|
|
Johnl 24-Aug-1994 Created
|
|
|
|
********************************************************************/
|
|
|
|
inline
|
|
BOOL CLIENT_CONN::WriteFile( LPVOID lpBuffer,
|
|
DWORD BytesToWrite )
|
|
{
|
|
WSABUF wsaBuf = { BytesToWrite, (CHAR * ) lpBuffer};
|
|
PATQ_CONTEXT pAtqContext = QueryAtqContext();
|
|
Reference();
|
|
if ( !AtqWriteSocket( pAtqContext,
|
|
&wsaBuf,
|
|
1,
|
|
&pAtqContext->Overlapped ))
|
|
{
|
|
Dereference();
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: CLIENT_CONN::SyncWsaSend
|
|
|
|
SYNOPSIS: Simple wrapper around AtqSyncWsaSend
|
|
for writing an array of WSABUFs synchronously
|
|
|
|
HISTORY:
|
|
DaveK 5-Aug-1997 Created
|
|
|
|
********************************************************************/
|
|
|
|
inline
|
|
BOOL CLIENT_CONN::SyncWsaSend( WSABUF * rgWsaBuffers,
|
|
DWORD cWsaBuffers,
|
|
LPDWORD pcbWritten
|
|
)
|
|
{
|
|
Reference();
|
|
BOOL fRes = AtqSyncWsaSend( QueryAtqContext(),
|
|
rgWsaBuffers,
|
|
cWsaBuffers,
|
|
pcbWritten );
|
|
Dereference();
|
|
|
|
return fRes;
|
|
}
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: CLIENT_CONN::TransmitFile
|
|
|
|
SYNOPSIS: Simple wrapper around AtqTransmitFile
|
|
|
|
HISTORY:
|
|
Johnl 24-Aug-1994 Created
|
|
|
|
********************************************************************/
|
|
|
|
inline
|
|
BOOL CLIENT_CONN::TransmitFile( HANDLE hFile,
|
|
DWORD Offset,
|
|
DWORD BytesToWrite,
|
|
DWORD dwFlags,
|
|
PVOID pHead,
|
|
DWORD HeadLength,
|
|
PVOID pTail,
|
|
DWORD TailLength )
|
|
|
|
{
|
|
TRANSMIT_FILE_BUFFERS tfb;
|
|
|
|
dwFlags &= (TF_DISCONNECT | TF_REUSE_SOCKET);
|
|
|
|
tfb.Head = pHead;
|
|
tfb.HeadLength = HeadLength;
|
|
tfb.Tail = pTail;
|
|
tfb.TailLength = TailLength;
|
|
|
|
Reference();
|
|
QueryAtqContext()->Overlapped.Offset = Offset;
|
|
if ( !AtqTransmitFile( QueryAtqContext(),
|
|
hFile,
|
|
BytesToWrite,
|
|
&tfb,
|
|
dwFlags ))
|
|
{
|
|
Dereference();
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: CLIENT_CONN::TransmitFileAndRecv
|
|
|
|
SYNOPSIS: Simple wrapper around AtqTransmitFileAndRecv
|
|
|
|
HISTORY:
|
|
JBallard 13-Nov-1996 Created
|
|
|
|
********************************************************************/
|
|
|
|
inline
|
|
BOOL CLIENT_CONN::TransmitFileAndRecv( HANDLE hFile,
|
|
DWORD Offset,
|
|
DWORD BytesToWrite,
|
|
DWORD dwFlags,
|
|
PVOID pHead,
|
|
DWORD HeadLength,
|
|
PVOID pTail,
|
|
DWORD TailLength,
|
|
LPVOID lpBuffer,
|
|
DWORD BytesToRead )
|
|
|
|
{
|
|
DBG_ASSERT( g_fUseAndRecv );
|
|
|
|
TRANSMIT_FILE_BUFFERS tfb;
|
|
WSABUF wsaBuf = { BytesToRead, (CHAR * ) lpBuffer};
|
|
|
|
dwFlags &= (TF_DISCONNECT | TF_REUSE_SOCKET);
|
|
|
|
tfb.Head = pHead;
|
|
tfb.HeadLength = HeadLength;
|
|
tfb.Tail = pTail;
|
|
tfb.TailLength = TailLength;
|
|
|
|
Reference();
|
|
QueryAtqContext()->Overlapped.Offset = Offset;
|
|
if ( !AtqTransmitFileAndRecv( QueryAtqContext(),
|
|
hFile,
|
|
BytesToWrite,
|
|
&tfb,
|
|
dwFlags,
|
|
&wsaBuf,
|
|
1 ))
|
|
{
|
|
Dereference();
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: CLIENT_CONN::WriteFileAndRecv
|
|
|
|
SYNOPSIS: Simple wrapper around AtqSendAndRecv
|
|
|
|
HISTORY:
|
|
JBallard 13-Nov-1996 Created
|
|
|
|
********************************************************************/
|
|
|
|
inline
|
|
BOOL CLIENT_CONN::WriteFileAndRecv( LPVOID lpSendBuffer,
|
|
DWORD BytesToWrite,
|
|
LPVOID lpRecvBuffer,
|
|
DWORD BytesToRead )
|
|
{
|
|
DBG_ASSERT( g_fUseAndRecv );
|
|
|
|
WSABUF wsaSendBuf = { BytesToWrite, (CHAR * ) lpSendBuffer};
|
|
WSABUF wsaRecvBuf = { BytesToRead, (CHAR * ) lpRecvBuffer};
|
|
Reference();
|
|
if ( !AtqSendAndRecv( QueryAtqContext(),
|
|
&wsaSendBuf,
|
|
1,
|
|
&wsaRecvBuf,
|
|
1 ))
|
|
{
|
|
Dereference();
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
inline
|
|
BOOL
|
|
CLIENT_CONN::PostCompletionStatus(
|
|
DWORD BytesTransferred
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Posts a completion status to this connection's ATQ context
|
|
|
|
Arguments:
|
|
|
|
BytesTransferred - Count of bytes sent or received from buffer
|
|
|
|
Return Value:
|
|
|
|
TRUE on success, FALSE on failure (call GetLastError)
|
|
|
|
--*/
|
|
{
|
|
Reference();
|
|
if ( !AtqPostCompletionStatus( QueryAtqContext(),
|
|
BytesTransferred ))
|
|
{
|
|
Dereference();
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/*******************************************************************
|
|
|
|
NAME: HTTP_REQ_BASE::Disconnect
|
|
|
|
SYNOPSIS: Forwards the disconnect request to the client connection
|
|
|
|
ENTRY: Same as for CLIENT_CONN::Disconnect
|
|
|
|
HISTORY:
|
|
Johnl 24-Aug-1994 Created
|
|
|
|
********************************************************************/
|
|
|
|
inline
|
|
VOID HTTP_REQ_BASE::Disconnect( DWORD htResp,
|
|
DWORD dwError2,
|
|
BOOL fDoShutdown,
|
|
LPBOOL pfFinished )
|
|
{
|
|
_pClientConn->Disconnect( this, htResp, dwError2, fDoShutdown, pfFinished );
|
|
}
|
|
|
|
inline
|
|
DWORD HTTP_REQ_BASE::Reference( VOID )
|
|
{
|
|
return _pClientConn->Reference();
|
|
}
|
|
|
|
inline
|
|
DWORD HTTP_REQ_BASE::Dereference( VOID )
|
|
{
|
|
return _pClientConn->Dereference();
|
|
}
|
|
|
|
inline
|
|
DWORD HTTP_REQ_BASE::QueryRefCount( VOID )
|
|
{
|
|
return _pClientConn->QueryRefCount();
|
|
}
|
|
|
|
|
|
#pragma hdrstop
|
|
#endif // _W3P_H_
|
|
|
|
|