windows-nt/Source/XPSP1/NT/net/rras/ip/nath323/emio.cpp

111 lines
2.3 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1998 - 2000 Microsoft Corporation
Module Name:
emio.cpp
Abstract:
Contains:
High-level Event Manager routines for asynchronous I/O
Environment:
User Mode - Win32
History:
1. 14-Feb-2000 -- File creation (based on Ilya Kleyman (ilyak)
previous work by AjayCh)
--*/
#include "stdafx.h"
/*++
Routine Description:
Called when asynchronous send, receive or accept completes
Arguments:
Status - status of the operation being completed
BytesTransferred - number of bytes transferred
Overlapped - internal data structure
Return Values:
None
Notes:
Callback
--*/
static void WINAPI EventMgrIoCompletionCallback (
IN DWORD Status,
IN DWORD BytesTransferred,
IN LPOVERLAPPED Overlapped)
{
PIOContext IoContext;
IoContext = (PIOContext) Overlapped;
CALL_BRIDGE& CallBridge = IoContext->pOvProcessor->GetCallBridge();
switch (IoContext -> reqType) {
case EMGR_OV_IO_REQ_ACCEPT:
HandleAcceptCompletion ((PAcceptContext) IoContext, Status);
break;
case EMGR_OV_IO_REQ_SEND:
HandleSendCompletion ((PSendRecvContext) IoContext, BytesTransferred, Status);
break;
case EMGR_OV_IO_REQ_RECV:
HandleRecvCompletion ((PSendRecvContext) IoContext, BytesTransferred, Status);
break;
default:
// This should never happen
DebugF(_T("H323: Unknown I/O completed: %d.\n"), IoContext -> reqType);
_ASSERTE(0);
break;
}
CallBridge.Release ();
}
/*++
Routine Description:
Designates a routine to be called when asynchrounous send, receive or accept completes
Arguments:
sock - socket handle to which a routine is being bound
Return Values:
Win32 error code
Notes:
Callback
--*/
HRESULT EventMgrBindIoHandle (SOCKET sock)
{
DWORD Result;
if (BindIoCompletionCallback ((HANDLE) sock, EventMgrIoCompletionCallback, 0))
return S_OK;
else {
Result = GetLastError ();
DebugF (_T("H323: Failed to bind i/o completion callback.\n"));
return HRESULT_FROM_WIN32 (Result);
}
}