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.
 
 
 
 
 
 

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;
}