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.
169 lines
4.8 KiB
169 lines
4.8 KiB
// --------------------------------------------------------------------------------
|
|
// Rascall.cpp
|
|
// --------------------------------------------------------------------------------
|
|
#include "pch.h"
|
|
#include "iconsole.h"
|
|
#include "rascall.h"
|
|
|
|
// --------------------------------------------------------------------------------
|
|
// HrCreateRASTransport
|
|
// --------------------------------------------------------------------------------
|
|
HRESULT HrCreateRASTransport(IRASTransport **ppRAS)
|
|
{
|
|
// Locals
|
|
HRESULT hr;
|
|
CRASCallback *pCallback=NULL;
|
|
|
|
// Create callback object
|
|
pCallback = new CRASCallback();
|
|
if (NULL == pCallback)
|
|
{
|
|
printf("Memory allocation failure\n");
|
|
return E_OUTOFMEMORY;
|
|
}
|
|
|
|
// Load SMTP Transport
|
|
hr = CoCreateInstance(CLSID_IRASTransport, NULL, CLSCTX_INPROC_SERVER, IID_IRASTransport, (LPVOID *)ppRAS);
|
|
if (FAILED(hr))
|
|
{
|
|
pCallback->Release();
|
|
printf("Unable to load CLSID_IMNXPORT - IID_IRASTransport\n");
|
|
return E_FAIL;
|
|
}
|
|
|
|
// InitNew
|
|
hr = (*ppRAS)->InitNew(pCallback);
|
|
if (FAILED(hr))
|
|
{
|
|
pCallback->Release();
|
|
printf("Unable to load CLSID_IMNXPORT - IID_IRASTransport\n");
|
|
return E_FAIL;
|
|
}
|
|
|
|
// Done
|
|
pCallback->Release();
|
|
return S_OK;
|
|
}
|
|
|
|
// --------------------------------------------------------------------------------
|
|
// CRASCallback::CRASCallback
|
|
// --------------------------------------------------------------------------------
|
|
CRASCallback::CRASCallback(void)
|
|
{
|
|
m_cRef = 1;
|
|
}
|
|
|
|
// --------------------------------------------------------------------------------
|
|
// CRASCallback::~CRASCallback
|
|
// --------------------------------------------------------------------------------
|
|
CRASCallback::~CRASCallback(void)
|
|
{
|
|
}
|
|
|
|
// --------------------------------------------------------------------------------
|
|
// CRASCallback::QueryInterface
|
|
// --------------------------------------------------------------------------------
|
|
STDMETHODIMP CRASCallback::QueryInterface(REFIID riid, LPVOID *ppv)
|
|
{
|
|
// Locals
|
|
HRESULT hr=S_OK;
|
|
|
|
// Bad param
|
|
if (ppv == NULL)
|
|
{
|
|
hr = E_INVALIDARG;
|
|
goto exit;
|
|
}
|
|
|
|
// Init
|
|
*ppv=NULL;
|
|
|
|
// IID_IUnknown
|
|
if (IID_IUnknown == riid)
|
|
*ppv = (IUnknown *)this;
|
|
|
|
// IID_IRASCallback
|
|
else if (IID_IRASCallback == riid)
|
|
*ppv = (IRASCallback *)this;
|
|
|
|
// If not null, addref it and return
|
|
if (NULL != *ppv)
|
|
{
|
|
((LPUNKNOWN)*ppv)->AddRef();
|
|
goto exit;
|
|
}
|
|
|
|
// No Interface
|
|
hr = E_NOINTERFACE;
|
|
|
|
exit:
|
|
// Done
|
|
return hr;
|
|
}
|
|
|
|
// --------------------------------------------------------------------------------
|
|
// CRASCallback::AddRef
|
|
// --------------------------------------------------------------------------------
|
|
STDMETHODIMP_(ULONG) CRASCallback::AddRef(void)
|
|
{
|
|
return ++m_cRef;
|
|
}
|
|
|
|
// --------------------------------------------------------------------------------
|
|
// CRASCallback::Release
|
|
// --------------------------------------------------------------------------------
|
|
STDMETHODIMP_(ULONG) CRASCallback::Release(void)
|
|
{
|
|
if (0 != --m_cRef)
|
|
return m_cRef;
|
|
delete this;
|
|
return 0;
|
|
}
|
|
|
|
STDMETHODIMP CRASCallback::OnReconnect(
|
|
LPSTR pszCurrentConnectoid,
|
|
LPSTR pszNewConnectoid,
|
|
IRASTransport *pTransport)
|
|
{
|
|
printf("CRASCallback::OnReconnect - %s --> %s\n", pszCurrentConnectoid, pszNewConnectoid);
|
|
return S_OK;
|
|
}
|
|
|
|
STDMETHODIMP CRASCallback::OnLogonPrompt(
|
|
LPIXPRASLOGON pRasLogon,
|
|
IRASTransport *pTransport)
|
|
{
|
|
printf("CRASCallback::OnLogonPrompt\n");
|
|
return S_OK;
|
|
}
|
|
|
|
STDMETHODIMP CRASCallback::OnRasDialStatus(
|
|
RASCONNSTATE rasconnstate,
|
|
DWORD dwError,
|
|
IRASTransport *pTransport)
|
|
{
|
|
printf("CRASCallback::OnRasDialStatus - State: %d, dwError: %d\n", rasconnstate, dwError);
|
|
if (dwError || (rasconnstate == RASCS_Connected || rasconnstate == RASCS_Disconnected))
|
|
{
|
|
if (dwError)
|
|
{
|
|
CHAR szError[1024];
|
|
DWORD dwResult;
|
|
|
|
g_pRAS->GetRasErrorString(dwError, szError, 1024, &dwResult);
|
|
if (dwResult == 0)
|
|
printf("Ras Error: %s\n", szError);
|
|
}
|
|
PostThreadMessage(GetCurrentThreadId(), g_msgRAS, RAS_CONNECT, 0);
|
|
}
|
|
return S_OK;
|
|
}
|
|
|
|
STDMETHODIMP CRASCallback::OnDisconnect(
|
|
LPSTR pszCurrentConnectoid,
|
|
boolean fConnectionOwner,
|
|
IRASTransport *pTransport)
|
|
{
|
|
printf("CRASCallback::OnDisconnect - %s, Connection Owner: %d\n", pszCurrentConnectoid, fConnectionOwner);
|
|
return S_OK;
|
|
}
|