Leaked source code of windows server 2003
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.
 
 
 
 
 
 

192 lines
4.0 KiB

/*++
Copyright (c) 2001 Microsoft Corporation
Module Name :
sslconfigchangeprovclient.cxx
Abstract:
SSL CONFIG CHANGE PROV client
Receives SSL configuration change parameters detected by server side
User of this class shold inherit it class and implement
PipeListener() to process notifications
Author:
Jaroslav Dunajsky April-24-2001
Environment:
Win32 - User Mode
Project:
Stream Filter Worker Process
--*/
#include "precomp.hxx"
HRESULT
SSL_CONFIG_CHANGE_PROV_CLIENT::StartListeningForChanges(
IN SSL_CONFIG_CHANGE_CALLBACK * pSslConfigChangeCallback,
IN OPTIONAL PVOID pvParam
)
/*++
Routine Description:
Create thread to handle SSL configuration change notification
Arguments:
pSslConfigChangeCallback - callback function that receives change details
pvParam - optional parameter that will be passed as first param to callback
Return Value:
HRESULT
--*/
{
HRESULT hr = E_FAIL;
IF_DEBUG( TRACE )
{
DBGPRINTF(( DBG_CONTEXT,
"SSL_CONFIG_CHANGE_PROV_CLIENT::StartListeningForChanges()\n"
));
}
if ( pSslConfigChangeCallback == NULL )
{
DBG_ASSERT( pSslConfigChangeCallback != NULL );
return HRESULT_FROM_WIN32( ERROR_INVALID_PARAMETER );
}
//
// store the callback function pointer, and first parameter
//
_pSslConfigChangeCallback = pSslConfigChangeCallback;
_pSslConfigChangeCallbackParameter = pvParam;
//
// Initialize parent (it will handle all the pipe initialization)
//
hr = SSL_CONFIG_PIPE::PipeInitializeClient( WSZ_SSL_CONFIG_CHANGE_PIPE );
if ( FAILED( hr ) )
{
return hr;
}
//
// Connect pipe
//
hr = SSL_CONFIG_PIPE::PipeConnect( );
if ( SUCCEEDED( hr ) )
{
_fConnected = TRUE;
}
return hr;
}
HRESULT
SSL_CONFIG_CHANGE_PROV_CLIENT::StopListeningForChanges(
VOID
)
/*++
Routine Description:
Close named pipe for SSL config change notifications
Arguments:
Return Value:
HRESULT
--*/
{
IF_DEBUG( TRACE )
{
DBGPRINTF(( DBG_CONTEXT,
"SSL_CONFIG_CHANGE_PROV_CLIENT::StopListeningForChanges\n"
));
}
//
// Disconnect pipe
//
SSL_CONFIG_PIPE::PipeDisconnect( );
_fConnected = FALSE;
return SSL_CONFIG_PIPE::PipeTerminate( );
}
//virtual
HRESULT
SSL_CONFIG_CHANGE_PROV_CLIENT::PipeListener(
VOID
)
/*++
Routine Description:
Pipe listener on the client side handles SSL Config change notifications
Function is started on private thread launched by
base class SSL_CONFIG_PIPE during pipe initialization
Arguments:
Return Value:
HRESULT
--*/
{
SSL_CONFIG_PIPE_COMMAND Command;
HRESULT hr = E_FAIL;
DWORD dwSiteId;
//
// Listen on pipe to receive commands
// and handle them
//
while ( TRUE )
{
hr = PipeReceiveCommand( &Command );
if ( FAILED( hr ) )
{
//
// failure may simply mean that
// termination has started and
// pipe handle was closed
//
goto Cleanup;
}
dwSiteId = Command.dwParameter1;
//
// make the callback
//
DBG_ASSERT( _pSslConfigChangeCallback != NULL );
(* _pSslConfigChangeCallback) (
_pSslConfigChangeCallbackParameter,
static_cast<SSL_CONFIG_CHANGE_COMMAND_ID>
( Command.dwCommandId ),
dwSiteId );
}
return S_OK;
Cleanup:
_fConnected = FALSE;
DBG_ASSERT( FAILED( hr ) );
return hr;
}