|
|
#include "stdafx.h"
#include "MyAdapterNotify.h"
/////////////////////////////////////////////////////////////////////////////
// CMyAdapterNotify
//
IcqPrx * g_IcqPrxp = NULL;
ULONG g_MyPublicIp = 0L;
ULONG g_MyPrivateIp = 0L;
//
// This function will be call when a new adapter is made active
//
STDMETHODIMP CMyAdapterNotify::AdapterAdded( IAdapterInfo* pAdapter ) { ULONG AdapterIndex = 0; ALG_ADAPTER_TYPE AdapterType ; ULONG AddressCount = 0; PULONG AddressArrayp = NULL;
HRESULT Result = S_OK;
ICQ_TRC(TM_IF, TL_TRACE, ("CMyAdapterNotify::AdapterAdded"));
return S_OK; }
//
// This function will be call when a adapter is remove and/or disable
//
STDMETHODIMP CMyAdapterNotify::AdapterRemoved( IAdapterInfo* pAdapter ) { ULONG AdapterIndex = 0; ALG_ADAPTER_TYPE AdapterType ; ULONG AddressCount = 0; PULONG AddressArrayp = NULL;
HRESULT Result = S_OK; ICQ_TRC(TM_IF, TL_TRACE, ("CMyAdapterNotify::AdapterRemoved"));
Result = pAdapter->GetAdapterIndex(&AdapterIndex);
if ( FAILED(Result) ) { ICQ_TRC(TM_IF, TL_ERROR, ("AdapterIndex has failed"));
return S_FALSE; }
Result = pAdapter->GetAdapterType(&AdapterType);
if ( FAILED(Result) ) { ICQ_TRC(TM_IF, TL_ERROR, ("Adapter Type has failed"));
return S_FALSE; }
Result = pAdapter->GetAdapterAddresses(&AddressCount, &AddressArrayp);
if ( FAILED(Result) ) { ICQ_TRC(TM_IF, TL_ERROR, ("Adapter Addresses has failed"));
return S_FALSE; }
//
// Create a report on the gathered information
//
ICQ_TRC(TM_IF, TL_TRACE, (" Interface FW %u: BD %u: PV %u ", ALG_IFC_FW(AdapterType), ALG_IFC_BOUNDARY(AdapterType), ALG_IFC_PRIVATE(AdapterType)) );
ICQ_TRC(TM_IF, TL_TRACE, ("Interface index: %u addr count %u", AdapterIndex, AddressCount));
for(ULONG i = 0; i < AddressCount; i++) { ICQ_TRC(TM_IF, TL_TRACE, ("Adapter Address[%u] is %s", i, INET_NTOA(AddressArrayp[i])) ); }
//
// Remove ICQ PROXY HERE
//
if( (ALG_IFC_FW(AdapterType) || ALG_IFC_BOUNDARY(AdapterType)) ) { ASSERT( g_IcqPrxp != NULL );
STOP_COMPONENT( g_IcqPrxp ); DEREF_COMPONENT( g_IcqPrxp, eRefInitialization ); } else { g_MyPrivateIp = 0; }
return S_OK; }
//
// This function will be call when a adapter is modified
//
STDMETHODIMP CMyAdapterNotify::AdapterModified( IAdapterInfo* pAdapter ) { ULONG AdapterIndex = 0; ALG_ADAPTER_TYPE AdapterType ; ULONG AddressCount = 0; PULONG AddressArrayp = NULL;
HRESULT Result = S_OK; ICQ_TRC(TM_IF, TL_TRACE, ("CMyAdapterNotify::AdapterModified"));
Result = pAdapter->GetAdapterIndex(&AdapterIndex);
if ( FAILED(Result) ) { ICQ_TRC(TM_IF, TL_ERROR, ("AdapterIndex has failed"));
return S_FALSE; }
Result = pAdapter->GetAdapterType(&AdapterType);
if ( FAILED(Result) ) { ICQ_TRC(TM_IF, TL_ERROR, ("Adapter Type has failed"));
return S_FALSE; }
Result = pAdapter->GetAdapterAddresses(&AddressCount, &AddressArrayp);
if ( FAILED(Result) ) { ICQ_TRC(TM_IF, TL_ERROR, ("Adapter Addresses has failed"));
return S_FALSE; }
//
// Create a report on the gathered information
//
ICQ_TRC(TM_IF, TL_TRACE, (" Interface FW %u: BD %u: PV %u ", ALG_IFC_FW(AdapterType), ALG_IFC_BOUNDARY(AdapterType), ALG_IFC_PRIVATE(AdapterType)) );
ICQ_TRC(TM_IF, TL_TRACE, ("Interface index: %u addr count %u", AdapterIndex, AddressCount));
for(ULONG i = 0; i < AddressCount; i++) { ICQ_TRC(TM_IF, TL_TRACE, ("Adapter Address[%u] is %s", i, INET_NTOA(AddressArrayp[i])) ); }
//
// Initialize the ICQ Proxy here with the appropriate IP
//
if( (ALG_IFC_FW(AdapterType) || ALG_IFC_BOUNDARY(AdapterType)) && (AddressCount > 0) && (AddressArrayp != NULL) ) { ASSERT( g_IcqPrxp is NULL );
NEW_OBJECT( g_IcqPrxp, IcqPrx );
if(g_IcqPrxp is NULL) { ASSERT(FALSE); } else { //
// Use the first IP on the List of IPs belonging to this
// Interface
//
Result = g_IcqPrxp->RunIcq99Proxy(AddressArrayp[0]);
if(Result) { ICQ_TRC(TM_IF, TL_ERROR, ("** !! ICQ PRX RUN FAILED !! **")); } } } else if( (AddressCount > 0) && (AddressArrayp != NULL) ) { ICQ_TRC(TM_IF, TL_ERROR, ("** !! ICQ PRX WONT RUN !! **"));
g_MyPrivateIp = AddressArrayp[0]; } return S_OK; }
|