/**********************************************************************/ /** Microsoft Windows/NT **/ /** Copyright(c) Microsoft Corporation, 1997 - 1999 **/ /**********************************************************************/ /* pgnetwk.cpp Implemenation of CPgNetworking -- property page to edit profile attributes related to inter-networking FILE HISTORY: */ // PgNetwk.cpp : implementation file // #include "stdafx.h" #include "resource.h" // #include "dlgfilt.h" #include "PgNetwk.h" #include "hlptable.h" #include "mprapi.h" #include "std.h" #include "mprsnap.h" #include "infobase.h" #include "router.h" #include "mprfltr.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CPgNetworkingMerge property page IMPLEMENT_DYNCREATE(CPgNetworkingMerge, CManagedPage) CPgNetworkingMerge::CPgNetworkingMerge(CRASProfileMerge* profile) : CManagedPage(CPgNetworkingMerge::IDD), m_pProfile(profile), m_bInited(false), m_dwStaticIP(0) { //{{AFX_DATA_INIT(CPgNetworkingMerge) m_nRadioStatic = -1; //}}AFX_DATA_INIT m_pBox = NULL; m_nFiltersSize = 0; if(!(m_pProfile->m_dwAttributeFlags & PABF_msRADIUSFramedIPAddress)) // not defined in policy { m_nRadioStatic = 2; } else { m_dwStaticIP = m_pProfile->m_dwFramedIPAddress; switch(m_dwStaticIP) { case RAS_IP_USERSELECT: m_nRadioStatic = 1; break; case RAS_IP_SERVERASSIGN: m_nRadioStatic = 0; break; default: m_nRadioStatic = 3; break; } } // filters if((BSTR)m_pProfile->m_cbstrFilters) { m_cbstrFilters.AssignBSTR(m_pProfile->m_cbstrFilters); } SetHelpTable(g_aHelpIDs_IDD_NETWORKING_MERGE); } CPgNetworkingMerge::~CPgNetworkingMerge() { delete m_pBox; } void CPgNetworkingMerge::DoDataExchange(CDataExchange* pDX) { ASSERT(m_pProfile); CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPgNetworkingMerge) DDX_Radio(pDX, IDC_RADIOSERVER, m_nRadioStatic); //}}AFX_DATA_MAP if(pDX->m_bSaveAndValidate) // save data to this class { // ip adress control SendDlgItemMessage(IDC_EDIT_STATIC_IP_ADDRESS, IPM_GETADDRESS, 0, (LPARAM)&m_dwStaticIP); } else // put to dialog { // ip adress control if(m_bInited) { SendDlgItemMessage(IDC_EDIT_STATIC_IP_ADDRESS, IPM_SETADDRESS, 0, m_dwStaticIP); } else { SendDlgItemMessage(IDC_EDIT_STATIC_IP_ADDRESS, IPM_CLEARADDRESS, 0, m_dwStaticIP); } } } BEGIN_MESSAGE_MAP(CPgNetworkingMerge, CPropertyPage) //{{AFX_MSG_MAP(CPgNetworkingMerge) ON_BN_CLICKED(IDC_RADIOCLIENT, OnRadioclient) ON_BN_CLICKED(IDC_RADIOSERVER, OnRadioserver) ON_WM_HELPINFO() ON_WM_CONTEXTMENU() ON_BN_CLICKED(IDC_RADIODEFAULT, OnRadiodefault) ON_BN_CLICKED(IDC_RADIOSTATIC, OnRadioStatic) ON_BN_CLICKED(IDC_BUTTON_TOCLIENT, OnButtonToclient) ON_BN_CLICKED(IDC_BUTTON_FROMCLIENT, OnButtonFromclient) ON_EN_CHANGE(IDC_EDIT_STATIC_IP_ADDRESS, OnStaticIPAddressChanged) //}}AFX_MSG_MAP END_MESSAGE_MAP() // ON_NOTIFY(EN_CHANGE, IDC_EDIT_STATIC_IP_ADDRESS, OnStaticIPAddressChanged) // ON_BN_CLICKED(IDC_EDIT_STATIC_IP_ADDRESS, OnStaticIPAddress) ///////////////////////////////////////////////////////////////////////////// // CPgNetworking message handlers BOOL CPgNetworkingMerge::OnInitDialog() { // necessary? AFX_MANAGE_STATE(AfxGetStaticModuleState()); CPropertyPage::OnInitDialog(); m_bInited = true; // tperraut HACK should be replaced by a proper init of the control CWnd* IPWnd = GetDlgItem(IDC_EDIT_STATIC_IP_ADDRESS); if (IPWnd != NULL) { IPWnd->EnableWindow(TRUE); } SendDlgItemMessage(IDC_EDIT_STATIC_IP_ADDRESS, IPM_SETADDRESS, 0, m_dwStaticIP); if (m_nRadioStatic == 3) { CWnd* IPWnd = GetDlgItem(IDC_EDIT_STATIC_IP_ADDRESS); if (IPWnd != NULL) { IPWnd->EnableWindow(TRUE); } } else { CWnd* IPWnd = GetDlgItem(IDC_EDIT_STATIC_IP_ADDRESS); if (IPWnd != NULL) { IPWnd->EnableWindow(FALSE); } } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CPgNetworkingMerge::OnRadioclient() { CWnd* IPWnd = GetDlgItem(IDC_EDIT_STATIC_IP_ADDRESS); if (IPWnd != NULL) { IPWnd->EnableWindow(FALSE); } SendDlgItemMessage(IDC_EDIT_STATIC_IP_ADDRESS, IPM_SETADDRESS, 0, m_dwStaticIP); SetModified(); } void CPgNetworkingMerge::OnRadioserver() { CWnd* IPWnd = GetDlgItem(IDC_EDIT_STATIC_IP_ADDRESS); if (IPWnd != NULL) { IPWnd->EnableWindow(FALSE); } SendDlgItemMessage(IDC_EDIT_STATIC_IP_ADDRESS, IPM_SETADDRESS, 0, m_dwStaticIP); SetModified(); } void CPgNetworkingMerge::OnRadiodefault() { CWnd* IPWnd = GetDlgItem(IDC_EDIT_STATIC_IP_ADDRESS); if (IPWnd != NULL) { IPWnd->EnableWindow(FALSE); } SetModified(); } void CPgNetworkingMerge::OnRadioStatic() { if (m_bInited) { CWnd* IPWnd = GetDlgItem(IDC_EDIT_STATIC_IP_ADDRESS); if (IPWnd != NULL) { IPWnd->EnableWindow(TRUE); } } SetModified(); } void CPgNetworkingMerge::OnStaticIPAddressChanged() { SetModified(); } void CPgNetworkingMerge::EnableFilterSettings(BOOL bEnable) { m_pBox->Enable(bEnable); } BOOL CPgNetworkingMerge::OnApply() { if (!GetModified()) return TRUE; // get the IP policy value switch(m_nRadioStatic) { // tperraut: check what kind of IP first? case 3: { m_pProfile->m_dwAttributeFlags |= PABF_msRADIUSFramedIPAddress; m_pProfile->m_dwFramedIPAddress = m_dwStaticIP; break; } case 2: // default server settings { m_pProfile->m_dwFramedIPAddress = 0; m_pProfile->m_dwAttributeFlags &= ~PABF_msRADIUSFramedIPAddress; // not defined in policy break; } case 1: // client requre { m_pProfile->m_dwAttributeFlags |= PABF_msRADIUSFramedIPAddress; m_pProfile->m_dwFramedIPAddress = RAS_IP_USERSELECT; break; // server assign } case 0: { m_pProfile->m_dwAttributeFlags |= PABF_msRADIUSFramedIPAddress; m_pProfile->m_dwFramedIPAddress = RAS_IP_SERVERASSIGN; break; } default: { // assert ? break; } } // filters m_pProfile->m_cbstrFilters.AssignBSTR((BSTR)m_cbstrFilters); m_pProfile->m_nFiltersSize = m_nFiltersSize; return CManagedPage::OnApply(); } BOOL CPgNetworkingMerge::OnHelpInfo(HELPINFO* pHelpInfo) { return CManagedPage::OnHelpInfo(pHelpInfo); } void CPgNetworkingMerge::OnContextMenu(CWnd* pWnd, CPoint point) { CManagedPage::OnContextMenu(pWnd, point); } void CPgNetworkingMerge::OnButtonToclient() { // Create Info base, SPIInfoBase spInfoBase; HRESULT hr = S_OK; PBYTE pByte = NULL; SAFEARRAY* pSA = NULL; DWORD size = 0; CHECK_HR( hr = CreateInfoBase(&spInfoBase) ); size = m_cbstrFilters.ByteLen(); pByte = (PBYTE)(BSTR)m_cbstrFilters; if(size && pByte) { CHECK_HR(hr = spInfoBase->LoadFrom(size, pByte)); } pByte = NULL; // call API to bring up the UI to edit filter CHECK_HR( hr = MprUIFilterConfigInfoBase(GetSafeHwnd(), spInfoBase, NULL, PID_IP, FILTER_TO_USER)); if(hr == S_OK) { int iBlocks = 0; spInfoBase->GetInfo(&size, &iBlocks); CHECK_HR( hr = spInfoBase->WriteTo(&pByte, &size)); m_cbstrFilters.AssignBlob((const char*)pByte, size); m_nFiltersSize = size; SetModified(); } // if user chooses OK, then set back the value, and set dirty bit L_ERR: CoTaskMemFree(pByte); return; } void CPgNetworkingMerge::OnButtonFromclient() { // Create Info base, SPIInfoBase spInfoBase; HRESULT hr = S_OK; PBYTE pByte = NULL; DWORD size = 0; CHECK_HR( hr = CreateInfoBase(&spInfoBase) ); size = m_cbstrFilters.ByteLen(); pByte = (PBYTE)(BSTR)m_cbstrFilters; if(size && pByte) { CHECK_HR(hr = spInfoBase->LoadFrom(size, pByte)); } pByte = NULL; // call API to bring up the UI to edit filter CHECK_HR( hr = MprUIFilterConfigInfoBase(GetSafeHwnd(), spInfoBase, NULL, PID_IP, FILTER_FROM_USER)); if(hr == S_OK) { int iBlocks = 0; spInfoBase->GetInfo(&size, &iBlocks); CHECK_HR( hr = spInfoBase->WriteTo(&pByte, &size)); m_cbstrFilters.AssignBlob((const char*)pByte, size); m_nFiltersSize = size; SetModified(); } // if user chooses OK, then set back the value, and set dirty bit L_ERR: CoTaskMemFree(pByte); return; }