Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
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); } }
|