|
|
/*++
Copyright (C) Microsoft Corporation, 1997 - 1999
Module Name:
ciolecmd.cxx
Abstract:
This file contains the implementation of the IOleCommandTarget interface for receiving events from IE5.
Author:
Gopal Parupudi <GopalP>
Notes:
These events are not used on NT5. They are used on Win9x and NT4 platforms.
Revision History:
GopalP 1/26/1998 Start.
--*/
#include <precomp.hxx>
#include <onestop.cxx> // This is a source file!
//
// IOleCommandTarget group for WININET events.
//
// Should have the IE5 folks put it in a header file. This is moot as this
// file is no longer used on any platform.
//
CLSID CLSID_EVENTGROUP_WININET = { /* ab8ed004-b86a-11d1-b1f8-00c04fa357fa */ 0xab8ed004, 0xb86a, 0x11d1, {0xb1, 0xf8, 0x00, 0xc0, 0x4f, 0xa3, 0x57, 0xfa} };
//
// Globals
//
LONG g_cCommandObj; // Count of active components
LONG g_cCommandLock; // Count of Server locks
//
// Constructors and Destructors
//
CImpIOleCommandTarget::CImpIOleCommandTarget( void ) : m_cRef(1L) // Add a reference.
{ InterlockedIncrement(&g_cCommandObj); }
CImpIOleCommandTarget::~CImpIOleCommandTarget( void ) { InterlockedDecrement(&g_cCommandObj); }
//
// Standard QueryInterface
//
STDMETHODIMP CImpIOleCommandTarget::QueryInterface( REFIID riid, LPVOID *ppv ) { HRESULT hr;
DebugTraceGuid("CImpIOleCommandTarget:QueryInterface()", riid);
hr = S_OK; *ppv = NULL;
// IUnknown
if (IsEqualIID(riid, IID_IUnknown)) { *ppv = (IOleCommandTarget *) this; } else // IOleCommandTarget
if (IsEqualIID(riid, IID_IOleCommandTarget)) { *ppv = (IOleCommandTarget *) this; } else { hr = E_NOINTERFACE; }
if (NULL != *ppv) { ((LPUNKNOWN)*ppv)->AddRef(); }
return hr; }
//
// Standard AddRef and Release
//
STDMETHODIMP_(ULONG) CImpIOleCommandTarget::AddRef( void ) { return InterlockedIncrement(&m_cRef); }
STDMETHODIMP_(ULONG) CImpIOleCommandTarget::Release( void ) { LONG cRefT;
SensPrint(SENS_INFO, (SENS_STRING("\t| CImpIOleCommandTarget::Release(m_cRef = %d) called.\n"), m_cRef));
cRefT = InterlockedDecrement((PLONG) &m_cRef);
if (0 == m_cRef) { delete this; }
return cRefT; }
//
// IOleCommandTarget Implementation.
//
STDMETHODIMP CImpIOleCommandTarget::QueryStatus( const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText ) { SensPrint(SENS_INFO, (SENS_STRING("---------------------------------------------------------\n"))); SensPrint(SENS_INFO, (SENS_STRING("CImpIOleCommandTarget::QueryStatus() called\n\n"))); SensPrint(SENS_INFO, (SENS_STRING(" pguidCmdGroup - 0x%x\n"), pguidCmdGroup)); SensPrint(SENS_INFO, (SENS_STRING(" cCmds - 0x%x\n"), cCmds)); SensPrint(SENS_INFO, (SENS_STRING("---------------------------------------------------------\n")));
if (IsEqualGUID(*pguidCmdGroup, CLSID_EVENTGROUP_WININET)) { // Subscribe to WININET events
return S_OK; }
return(OLECMDERR_E_UNKNOWNGROUP); }
STDMETHODIMP CImpIOleCommandTarget::Exec( const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut ) { HRESULT hr;
hr = S_OK;
SensPrint(SENS_INFO, (SENS_STRING("---------------------------------------------------------\n"))); SensPrint(SENS_INFO, (SENS_STRING("CImpIOleCommandTarget::Exec() called\n\n"))); SensPrint(SENS_INFO, (SENS_STRING(" pguidCmdGroup - 0x%x\n"), pguidCmdGroup)); SensPrint(SENS_INFO, (SENS_STRING(" cCmds - 0x%x\n"), nCmdID)); SensPrint(SENS_INFO, (SENS_STRING(" cCmdexecopt - 0x%x\n"), nCmdexecopt)); SensPrint(SENS_INFO, (SENS_STRING("---------------------------------------------------------\n")));
if ( (NULL == pguidCmdGroup) || (FALSE == IsEqualGUID(*pguidCmdGroup, CLSID_EVENTGROUP_WININET))) { return(E_NOTIMPL); }
//
// Handle WININET events...
//
switch (nCmdID) { case INETEVT_RAS_CONNECT: ASSERT(VT_BSTR == pvaIn->vt); hr = WininetRasConnect(pvaIn->bstrVal); break;
case INETEVT_RAS_DISCONNECT: ASSERT(VT_BSTR == pvaIn->vt); hr = WininetRasDisconnect(pvaIn->bstrVal); break;
case INETEVT_ONLINE: hr = WininetOnline(); break;
case INETEVT_OFFLINE: hr = WininetOffline(); break;
case INETEVT_LOGON: ASSERT(VT_BSTR == pvaIn->vt); hr = WininetLogon(pvaIn->bstrVal); break;
case INETEVT_LOGOFF: //ASSERT(VT_BSTR == pvaIn->vt);
//hr = WininetLogoff(pvaIn->bstrVal);
hr = WininetLogoff(SENS_BSTR("<Not Available>")); break; } // switch
return S_OK; }
HRESULT WininetRasConnect( BSTR bstrPhonebookEntry ) /*++
Routine Description:
Arguments:
Return Value:
--*/ { HRESULT hr; ULONG ulIgnore; SENSEVENT_RAS Data;
hr = S_OK;
SensPrintA(SENS_INFO, ("WininetRasConnect() - RAS Connect Event!\n")); Data.eType = SENS_EVENT_RAS_CONNECT; Data.hConnection = NULL; SensFireEvent(&Data);
// Do necessary work here
EvaluateConnectivity(TYPE_WAN);
return hr; }
HRESULT WininetRasDisconnect( BSTR bstrPhonebookEntry ) /*++
Routine Description:
Arguments:
Return Value:
--*/ { HRESULT hr; ULONG ulIgnore; SENSEVENT_RAS Data;
hr = S_OK;
SensPrintA(SENS_INFO, ("WininetRasDisconnect() - RAS Disconnect Event!\n")); Data.eType = SENS_EVENT_RAS_DISCONNECT; Data.hConnection = NULL; SensFireEvent(&Data);
// Do necessary work here
EvaluateConnectivity(TYPE_WAN);
return hr; }
HRESULT WininetOnline( void ) /*++
Routine Description:
Arguments:
Return Value:
--*/ { HRESULT hr;
hr = S_OK;
return hr; }
HRESULT WininetOffline( void ) /*++
Routine Description:
Arguments:
Return Value:
--*/ { HRESULT hr;
hr = S_OK;
return hr; }
HRESULT WininetLogon( BSTR bstrUserName ) /*++
Routine Description:
Arguments:
Return Value:
--*/ { HRESULT hr; SENS_NOTIFY_WINLOGON Data;
hr = S_OK;
//
// Setup the data.
//
memset(&Data.Info, 0x0, sizeof(SENS_NOTIFY_WINLOGON));
Data.eType = SENS_EVENT_LOGON; Data.Info.Size = sizeof(WINLOGON_INFO); Data.Info.Flags = 0x0; Data.Info.UserName = bstrUserName; Data.Info.Domain = NULL; Data.Info.WindowStation = NULL; Data.Info.hToken = NULL;;
// First order of business - start OneStop if necessary.
if (IsAutoSyncEnabled(NULL, AUTOSYNC_ON_STARTSHELL)) { hr = SensNotifyOneStop(NULL, SYNC_MANAGER_LOGON, FALSE); LogMessage((SENSLOGN "SensNotifyOneStop() returned 0x%x\n", hr)); }
// Fire the event.
SensFireEvent(&Data);
return hr; }
HRESULT WininetLogoff( BSTR bstrUserName ) /*++
Routine Description:
Arguments:
Return Value:
--*/ { HRESULT hr; SENS_NOTIFY_WINLOGON Data;
hr = S_OK;
//
// Setup the data.
//
memset(&Data.Info, 0x0, sizeof(SENS_NOTIFY_WINLOGON));
Data.eType = SENS_EVENT_LOGOFF; Data.Info.Size = sizeof(WINLOGON_INFO); Data.Info.Flags = 0x0; Data.Info.UserName = bstrUserName; Data.Info.Domain = NULL; Data.Info.WindowStation = NULL; Data.Info.hToken = NULL;;
// First order of business - start OneStop if necessary.
if (IsAutoSyncEnabled(NULL, AUTOSYNC_ON_LOGOFF)) { hr = SensNotifyOneStop(NULL, SYNC_MANAGER_LOGOFF, FALSE); LogMessage((SENSLOGN "SensNotifyOneStop() returned 0x%x\n", hr)); }
// Fire the event.
SensFireEvent(&Data);
return hr; }
|