// AdminDlg.cpp : implementation file // #include "stdafx.h" #include "dicomsrv.h" #include "AdminDlg.h" #include "SrvDlg.h" #include "UserPDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif extern CDICOMSRVApp theApp; ///////////////////////////////////////////////////////////////////////////// // CAdminDlg dialog CAdminDlg::CAdminDlg(CWnd* pParent /*=NULL*/) : CDialog(CAdminDlg::IDD, pParent) { //{{AFX_DATA_INIT(CAdminDlg) m_szAETitle = _T(""); m_lServerPort = 0; m_lServerTimeOut = 0; m_lMaxClients = 0; //}}AFX_DATA_INIT m_bEnableEdits = TRUE; m_pUserList = NULL; m_pEventLog = NULL; } void CAdminDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAdminDlg) DDX_Control(pDX, IDC_LIST2, m_EventLog); DDX_Control(pDX, IDC_LIST1, m_UserList); DDX_Text(pDX, IDC_EDIT1, m_szAETitle); DDX_Text(pDX, IDC_EDIT2, m_lServerPort); DDV_MinMaxLong(pDX, m_lServerPort, 1, 9999); DDX_Text(pDX, IDC_EDIT3, m_lServerTimeOut); DDV_MinMaxLong(pDX, m_lServerTimeOut, 1, 5); DDX_Text(pDX, IDC_EDIT4, m_lMaxClients); DDV_MinMaxLong(pDX, m_lMaxClients, 1, 99); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAdminDlg, CDialog) //{{AFX_MSG_MAP(CAdminDlg) ON_BN_CLICKED(IDC_BUTTON5, OnButton5) ON_BN_CLICKED(IDC_BUTTON6, OnButton6) ON_BN_CLICKED(IDC_BUTTON3, OnButton3) ON_BN_CLICKED(IDC_BUTTON1, OnButton1) ON_BN_CLICKED(IDC_BUTTON2, OnButton2) ON_BN_CLICKED(IDC_RADIO_SEC_ISCL, OnRadioSecurity) ON_BN_CLICKED(IDC_RADIO_SEC_NONE, OnRadioSecurity) ON_BN_CLICKED(IDC_RADIO_SEC_TLS, OnRadioSecurity) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CAdminDlg message handlers BOOL CAdminDlg::OnInitDialog() { CDialog::OnInitDialog(); long x; if(!m_bEnableEdits) { ::EnableWindow(GetDlgItem(IDC_EDIT1)->m_hWnd, FALSE); ::EnableWindow(GetDlgItem(IDC_EDIT2)->m_hWnd, FALSE); ::EnableWindow(GetDlgItem(IDC_EDIT3)->m_hWnd, FALSE); ::EnableWindow(GetDlgItem(IDC_EDIT4)->m_hWnd, FALSE); ::EnableWindow(GetDlgItem(IDC_RADIO_SEC_NONE)->m_hWnd, FALSE); ::EnableWindow(GetDlgItem(IDC_RADIO_SEC_ISCL)->m_hWnd, FALSE); ::EnableWindow(GetDlgItem(IDC_RADIO_SEC_TLS )->m_hWnd, FALSE); } if(!m_pUserList) EndDialog(IDCANCEL); if(!m_pEventLog) EndDialog(IDCANCEL); // image list CBitmap Bitmap; m_UserList.InsertColumn(0, "User", LVCFMT_LEFT, 100, 0); m_UserList.InsertColumn(1, "IP", LVCFMT_LEFT, 100, 1); m_UserList.InsertColumn(2, "Port", LVCFMT_LEFT, 50, 2); m_EventLog.InsertColumn(0, "Date", LVCFMT_LEFT, 175, 0); m_EventLog.InsertColumn(1, "User", LVCFMT_LEFT, 125, 1); m_EventLog.InsertColumn(2, "Event", LVCFMT_LEFT, 200, 2); m_Image.Create(16, 16, ILC_MASK, 0, 2); Bitmap.LoadBitmap(IDB_BITMAP1); m_Image.Add(&Bitmap, (COLORREF)0xFFFFFF); Bitmap.DeleteObject(); Bitmap.LoadBitmap(IDB_BITMAP2); m_Image.Add(&Bitmap, (COLORREF)0xFFFFFF); Bitmap.DeleteObject(); m_UserList.SetImageList(&m_Image, LVSIL_SMALL); m_EventLog.SetImageList(&m_Image, LVSIL_SMALL); CString szDate; CString szUser; CString szEvent; char buf[1024]; for(x=0; xGetItemCount(); x++) { szDate = ""; szUser = ""; szEvent = ""; LV_ITEM lvi; lvi.mask = LVIF_TEXT; lvi.iItem = x; lvi.iSubItem = 0; lvi.pszText = buf; lvi.cchTextMax = 1024; if(m_pEventLog->GetItem(&lvi)) { lvi.mask = LVIF_TEXT|LVIF_IMAGE; lvi.iImage = 0; m_EventLog.InsertItem(&lvi); lvi.mask = LVIF_TEXT; lvi.iSubItem = 1; if(m_pEventLog->GetItem(&lvi)) m_EventLog.SetItem(&lvi); lvi.mask = LVIF_TEXT; lvi.iSubItem = 2; if(m_pEventLog->GetItem(&lvi)) m_EventLog.SetItem(&lvi); } } CString szIP; CString szPort; for(x=0; xGetItemCount(); x++) { szUser = ""; szIP = ""; szPort = ""; LV_ITEM lvi; lvi.mask = LVIF_TEXT; lvi.iItem = x; lvi.iSubItem = 0; lvi.pszText = buf; lvi.cchTextMax = 1024; if(m_pUserList->GetItem(&lvi)) { lvi.mask = LVIF_TEXT|LVIF_IMAGE; lvi.iImage = 1; m_UserList.InsertItem(&lvi); lvi.mask = LVIF_TEXT; lvi.iSubItem = 1; if(m_pUserList->GetItem(&lvi)) m_UserList.SetItem(&lvi); lvi.iSubItem = 2; if(m_pUserList->GetItem(&lvi)) m_UserList.SetItem(&lvi); } } CheckRadioButton(IDC_RADIO_SEC_NONE, IDC_RADIO_SEC_TLS, IDC_RADIO_SEC_NONE+m_pDICOMSRVDlg->m_lNetSecurityModeIndex); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CAdminDlg::OnButton5() { //clear the event list m_pEventLog->DeleteAllItems(); m_EventLog.DeleteAllItems(); } void CAdminDlg::OnButton6() { EndDialog(IDOK); } void CAdminDlg::OnButton3() { int n; n = m_UserList.GetNextItem(-1, LVNI_SELECTED); if(n != -1) { CDICOMSRVDlg *pParent = (CDICOMSRVDlg*)GetParent(); pParent->LogEvent(pParent->m_szServerAE, "Removed User - " + m_UserList.GetItemText(n, 0)); m_UserList.DeleteItem(n); pParent->m_UserList.DeleteItem(n); } } void CAdminDlg::OnButton1() { CUserPropDlg dlg; char t[80]; int nPos; if(dlg.DoModal()==IDOK) { itoa(dlg.m_lPortNumber, t, 10); nPos = m_UserList.InsertItem(m_UserList.GetItemCount(), dlg.m_szAETitle, 1); if(nPos!=-1) { m_UserList.SetItemText(nPos, 1, dlg.m_szIPAddress); m_UserList.SetItemText(nPos, 2, t); } nPos = m_pUserList->InsertItem(m_pUserList->GetItemCount(), dlg.m_szAETitle); if(nPos!=-1) { m_pUserList->SetItemText(nPos, 1, dlg.m_szIPAddress); m_pUserList->SetItemText(nPos, 2, t); } CDICOMSRVDlg *pParent = (CDICOMSRVDlg*)GetParent(); pParent->LogEvent(pParent->m_szServerAE, "Added User - " + dlg.m_szAETitle); } } void CAdminDlg::OnButton2() { CUserPropDlg dlg; char t[80]; int nPos; nPos = m_UserList.GetNextItem(-1, LVNI_SELECTED); if(nPos != -1) { dlg.m_szAETitle = m_UserList.GetItemText(nPos, 0); dlg.m_szIPAddress = m_UserList.GetItemText(nPos, 1); dlg.m_lPortNumber = atoi(m_UserList.GetItemText(nPos, 2)); if(dlg.DoModal()==IDOK) { itoa(dlg.m_lPortNumber, t, 10); m_UserList.SetItemText(nPos, 0, dlg.m_szAETitle); m_UserList.SetItemText(nPos, 1, dlg.m_szIPAddress); m_UserList.SetItemText(nPos, 2, t); m_pUserList->SetItemText(nPos, 0, dlg.m_szAETitle); m_pUserList->SetItemText(nPos, 1, dlg.m_szIPAddress); m_pUserList->SetItemText(nPos, 2, t); } } } int CAdminDlg::GetServerPrivateKeyPassword(HWND hWndParent) { CDICOMSRVDlg *pDlg = (CDICOMSRVDlg *)GetParent(); int nRet = DICOM_SUCCESS; CString strServerCertName; theApp.m_hWndParent = hWndParent; if (!theApp.m_bValidPrivateKeyPassword) { _bstr_t bstrServerCertName = theApp.m_strServerCertName; nRet = pDlg->m_pLEADDICOMNETPassword->SetClientCertificateTLS(pDlg->m_pLEADDICOMNETPassword->hNet, bstrServerCertName, L_TLS_FILETYPE_PEM, bstrServerCertName); if (nRet == DICOM_SUCCESS) theApp.m_bValidPrivateKeyPassword = TRUE; else { theApp.m_strPrivateKeyPassword = ""; theApp.m_bValidPrivateKeyPassword = FALSE; } } return nRet; } void CAdminDlg::OnRadioSecurity() { m_pDICOMSRVDlg->m_lNetSecurityModeIndex = GetCheckedRadioButton(IDC_RADIO_SEC_NONE, IDC_RADIO_SEC_TLS) - IDC_RADIO_SEC_NONE; // Disable the OK button GetDlgItem(IDC_BUTTON6)->EnableWindow(FALSE); if (IsDlgButtonChecked(IDC_RADIO_SEC_TLS)) { // Check to make sure server.pem exists if (_access(theApp.m_strServerCertName, 4)!=0) { CString strMsg; strMsg.Format("Certificate file does not exist: %s", theApp.m_strServerCertName); MessageBox(strMsg, "Warning", MB_OK | MB_ICONEXCLAMATION); m_pDICOMSRVDlg->m_lNetSecurityModeIndex = 0; theApp.m_bValidPrivateKeyPassword = FALSE; CheckRadioButton(IDC_RADIO_SEC_NONE, IDC_RADIO_SEC_TLS, IDC_RADIO_SEC_NONE); } else if (DICOM_SUCCESS != GetServerPrivateKeyPassword(this->m_hWnd)) { MessageBox("Incorrect password for server certificate.", "Error", MB_OK | MB_ICONERROR); m_pDICOMSRVDlg->m_lNetSecurityModeIndex = 0; theApp.m_bValidPrivateKeyPassword = FALSE; CheckRadioButton(IDC_RADIO_SEC_NONE, IDC_RADIO_SEC_TLS, IDC_RADIO_SEC_NONE); } } // Enable the OK button GetDlgItem(IDC_BUTTON6)->EnableWindow(TRUE); }