396 lines
8.8 KiB
C++
396 lines
8.8 KiB
C++
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1997.
|
|
//
|
|
// File: I N B U I . C P P
|
|
//
|
|
// Contents: Inbound Connection UI object.
|
|
//
|
|
// Notes:
|
|
//
|
|
// Author: shaunco 15 Nov 1997
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#include "pch.h"
|
|
#pragma hdrstop
|
|
#include "inbui.h"
|
|
#include "nccom.h"
|
|
#include "rasui.h"
|
|
|
|
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: CInboundConnectionUi::CInboundConnectionUi
|
|
//
|
|
// Purpose: Constructor/Destructor
|
|
//
|
|
// Arguments:
|
|
// (none)
|
|
//
|
|
// Returns:
|
|
//
|
|
// Author: shaunco 20 Oct 1997
|
|
//
|
|
// Notes:
|
|
//
|
|
CInboundConnectionUi::CInboundConnectionUi ()
|
|
{
|
|
m_pCon = NULL;
|
|
m_hRasSrvConn = NULL;
|
|
m_pvContext = NULL;
|
|
m_dwRasWizType = RASWIZ_TYPE_INCOMING;
|
|
}
|
|
|
|
CInboundConnectionUi::~CInboundConnectionUi ()
|
|
{
|
|
ReleaseObj (m_pCon);
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
// INetConnectionPropertyUi2
|
|
//
|
|
STDMETHODIMP
|
|
CInboundConnectionUi::SetConnection (
|
|
INetConnection* pCon)
|
|
{
|
|
// Enter our critical section to protect the use of m_pCon.
|
|
//
|
|
CExceptionSafeComObjectLock EsLock (this);
|
|
|
|
HRESULT hr = S_OK;
|
|
HRASSRVCONN hRasSrvConn = NULL;
|
|
|
|
// If we were given a connection, verify it by QI'ing for
|
|
// INetInboundConnection and calling the GetServerConnectionHandle method.
|
|
// This also gives us m_hRasSrvConn which we need later anyway.
|
|
//
|
|
if (pCon)
|
|
{
|
|
INetInboundConnection* pInboundCon;
|
|
hr = HrQIAndSetProxyBlanket(pCon, &pInboundCon);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
hr = pInboundCon->GetServerConnectionHandle (
|
|
reinterpret_cast<ULONG_PTR*>(&hRasSrvConn));
|
|
|
|
ReleaseObj (pInboundCon);
|
|
}
|
|
else if (E_NOINTERFACE == hr)
|
|
{
|
|
// If the connection object, doesn't support the interface, it's
|
|
// not our object. The client has messed up and passed us a bogus
|
|
// argument.
|
|
//
|
|
hr = E_INVALIDARG;
|
|
}
|
|
}
|
|
|
|
// Only change our state if the above succeeded.
|
|
//
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
ReleaseObj (m_pCon);
|
|
m_pCon = pCon;
|
|
AddRefObj (m_pCon);
|
|
m_hRasSrvConn = hRasSrvConn;
|
|
}
|
|
|
|
TraceError ("CInboundConnectionUi::SetConnection", hr);
|
|
return hr;
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CInboundConnectionUi::AddPages (
|
|
HWND hwndParent,
|
|
LPFNADDPROPSHEETPAGE pfnAddPage,
|
|
LPARAM lParam)
|
|
{
|
|
HRESULT hr;
|
|
|
|
// Validate parameters.
|
|
//
|
|
if (!pfnAddPage)
|
|
{
|
|
hr = E_POINTER;
|
|
}
|
|
// Must have called SetConnection prior to this.
|
|
//
|
|
else if (!m_pCon)
|
|
{
|
|
hr = E_UNEXPECTED;
|
|
}
|
|
else
|
|
{
|
|
DWORD dwErr = RasSrvAddPropPages (
|
|
m_hRasSrvConn,
|
|
hwndParent,
|
|
pfnAddPage,
|
|
lParam,
|
|
&m_pvContext);
|
|
|
|
hr = HRESULT_FROM_WIN32 (dwErr);
|
|
TraceError ("RasSrvAddPropPages", hr);
|
|
}
|
|
TraceError ("CInboundConnectionUi::AddPages (INetConnectionPropertyUi)", hr);
|
|
return hr;
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CInboundConnectionUi::GetIcon (
|
|
DWORD dwSize,
|
|
HICON *phIcon )
|
|
{
|
|
HRESULT hr;
|
|
Assert (phIcon);
|
|
|
|
hr = HrGetIconFromMediaType(dwSize, NCM_NONE, NCSM_NONE, 7, 0, phIcon);
|
|
|
|
TraceError ("CLanConnectionUi::GetIcon (INetConnectionPropertyUi2)", hr);
|
|
return hr;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
// INetConnectionWizardUi
|
|
//
|
|
STDMETHODIMP
|
|
CInboundConnectionUi::QueryMaxPageCount (
|
|
INetConnectionWizardUiContext* pContext,
|
|
DWORD* pcMaxPages)
|
|
{
|
|
HRESULT hr = S_OK;
|
|
|
|
// Validate parameters.
|
|
//
|
|
if (!pcMaxPages)
|
|
{
|
|
hr = E_POINTER;
|
|
}
|
|
else
|
|
{
|
|
*pcMaxPages = RasWizQueryMaxPageCount (m_dwRasWizType);
|
|
}
|
|
TraceError ("CInboundConnectionUi::QueryMaxPageCount", hr);
|
|
return hr;
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CInboundConnectionUi::AddPages (
|
|
INetConnectionWizardUiContext* pContext,
|
|
LPFNADDPROPSHEETPAGE pfnAddPage,
|
|
LPARAM lParam)
|
|
{
|
|
HRESULT hr;
|
|
|
|
// Validate parameters.
|
|
//
|
|
if (!pfnAddPage)
|
|
{
|
|
hr = E_POINTER;
|
|
}
|
|
else
|
|
{
|
|
DWORD dwErr = RasSrvAddWizPages (pfnAddPage, lParam, &(m_pvContext));
|
|
|
|
hr = HRESULT_FROM_WIN32 (dwErr);
|
|
TraceError ("RasSrvAddWizPages", hr);
|
|
}
|
|
TraceError ("CInboundConnectionUi::AddPages (INetConnectionWizardUi)", hr);
|
|
return hr;
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CInboundConnectionUi::GetSuggestedConnectionName (
|
|
PWSTR* ppszwSuggestedName)
|
|
{
|
|
HRESULT hr;
|
|
|
|
// Validate parameters.
|
|
//
|
|
if (!ppszwSuggestedName)
|
|
{
|
|
hr = E_POINTER;
|
|
}
|
|
else
|
|
{
|
|
*ppszwSuggestedName = NULL;
|
|
|
|
WCHAR pszName[MAX_PATH];
|
|
DWORD dwErr;
|
|
dwErr = RasWizGetSuggestedEntryName (
|
|
m_dwRasWizType, m_pvContext, pszName);
|
|
|
|
hr = HRESULT_FROM_WIN32 (dwErr);
|
|
TraceError ("RasWizGetSuggestedEntryName", hr);
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
hr = HrCoTaskMemAllocAndDupSz (
|
|
pszName,
|
|
ppszwSuggestedName);
|
|
}
|
|
|
|
}
|
|
TraceError ("CInboundConnectionUi::GetSuggestedConnectionName", hr);
|
|
return hr;
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CInboundConnectionUi::GetNewConnectionInfo (
|
|
DWORD* pdwFlags,
|
|
NETCON_MEDIATYPE* pMediaType)
|
|
{
|
|
HRESULT hr = S_OK;
|
|
|
|
*pMediaType = NCM_NONE;
|
|
|
|
if (!pdwFlags)
|
|
{
|
|
hr = E_POINTER;
|
|
}
|
|
else
|
|
{
|
|
*pdwFlags = 0;
|
|
|
|
Assert (m_pvContext);
|
|
|
|
DWORD dwRasFlags;
|
|
DWORD dwErr = RasWizGetNCCFlags (
|
|
m_dwRasWizType,
|
|
m_pvContext,
|
|
&dwRasFlags);
|
|
|
|
hr = HRESULT_FROM_WIN32 (dwErr);
|
|
TraceError ("RasWizGetNCCFlags", hr);
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
if (dwRasFlags & NCC_FLAG_CREATE_INCOMING)
|
|
{
|
|
*pdwFlags |= NCWF_INCOMINGCONNECTION;
|
|
}
|
|
|
|
if (dwRasFlags & NCC_FLAG_FIREWALL)
|
|
{
|
|
*pdwFlags |= NCWF_FIREWALLED;
|
|
}
|
|
|
|
if (dwRasFlags & NCC_FLAG_SHARED)
|
|
{
|
|
*pdwFlags |= NCWF_SHARED;
|
|
}
|
|
|
|
if (dwRasFlags & NCC_FLAG_ALL_USERS)
|
|
{
|
|
*pdwFlags |= NCWF_ALLUSER_CONNECTION;
|
|
}
|
|
|
|
if (dwRasFlags & NCC_FLAG_GLOBALCREDS)
|
|
{
|
|
*pdwFlags |= NCWF_GLOBAL_CREDENTIALS;
|
|
}
|
|
|
|
if (dwRasFlags & NCC_FLAG_DEFAULT_INTERNET)
|
|
{
|
|
*pdwFlags |= NCWF_DEFAULT;
|
|
}
|
|
}
|
|
else if (E_INVALIDARG == hr)
|
|
{
|
|
hr = E_UNEXPECTED;
|
|
}
|
|
}
|
|
|
|
BOOL fAllowRename;
|
|
DWORD dwErr = RasWizIsEntryRenamable (
|
|
m_dwRasWizType,
|
|
m_pvContext,
|
|
&fAllowRename);
|
|
|
|
hr = HRESULT_FROM_WIN32 (dwErr);
|
|
TraceError ("RasWizIsEntryRenamable", hr);
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
if (!fAllowRename)
|
|
{
|
|
*pdwFlags |= NCWF_RENAME_DISABLE;
|
|
}
|
|
}
|
|
|
|
TraceError ("CInboundConnectionUi::GetNewConnectionInfo", hr);
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
STDMETHODIMP
|
|
CInboundConnectionUi::SetConnectionName (
|
|
PCWSTR pszwConnectionName)
|
|
{
|
|
HRESULT hr;
|
|
|
|
// Validate parameters.
|
|
//
|
|
if (!pszwConnectionName)
|
|
{
|
|
hr = E_POINTER;
|
|
}
|
|
else
|
|
{
|
|
DWORD dwErr = RasWizSetEntryName (
|
|
m_dwRasWizType,
|
|
m_pvContext,
|
|
pszwConnectionName);
|
|
|
|
hr = HRESULT_FROM_WIN32 (dwErr);
|
|
TraceError ("RasWizSetEntryName", hr);
|
|
}
|
|
TraceError ("CInboundConnectionUi::SetConnectionName", hr);
|
|
return hr;
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CInboundConnectionUi::GetNewConnection (
|
|
INetConnection** ppCon)
|
|
{
|
|
HRESULT hr;
|
|
|
|
// Validate parameters.
|
|
//
|
|
if (!ppCon)
|
|
{
|
|
hr = E_POINTER;
|
|
}
|
|
/*
|
|
// Must have called SetConnectionName prior to this.
|
|
//
|
|
else if (m_strConnectionName.empty())
|
|
{
|
|
hr = E_UNEXPECTED;
|
|
}
|
|
*/
|
|
else
|
|
{
|
|
*ppCon = NULL;
|
|
|
|
// Commit the settings made in the wizard.
|
|
//
|
|
DWORD dwErr = RasWizCreateNewEntry (
|
|
m_dwRasWizType,
|
|
m_pvContext, NULL, NULL, NULL);
|
|
|
|
hr = HRESULT_FROM_WIN32 (dwErr);
|
|
TraceError ("RasWizCreateNewEntry", hr);
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
hr = HrCreateInboundConfigConnection (ppCon);
|
|
}
|
|
}
|
|
TraceError ("CInboundConnectionUi::GetNewConnection", hr);
|
|
return hr;
|
|
}
|