//+--------------------------------------------------------------------------- // // 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(&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, NETCON_MAX_NAME_LEN); } } 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; }