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