#include "dicsrv.h" #include L_VOID AddUser(HWND hDlg, pSRVADMINDATA pData); L_VOID ModifyUser(HWND hDlg, pSRVADMINDATA pData); BOOL CALLBACK AdminDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { static pSRVADMINDATA pData=NULL; WORD wID; L_INT n; L_CHAR szUser[200]; L_CHAR szOut[200]; switch(uMsg) { case WM_INITDIALOG: pData = (pSRVADMINDATA)lParam; if(!pData) EndDialog(hDlg, IDCANCEL); else InitAdminDlg(hDlg, pData); return FALSE; case WM_COMMAND: wID = LOWORD(wParam); switch(wID) { case IDOK: UpdateData(hDlg, pData); EndDialog(hDlg, wID); return TRUE; case IDCANCEL: EndDialog(hDlg, wID); return TRUE; case IDC_BUTTON1: AddUser(hDlg, pData); return TRUE; case IDC_BUTTON2: ModifyUser(hDlg, pData); return TRUE; case IDC_BUTTON3: n = ListView_GetNextItem(GetDlgItem(hDlg, IDC_LIST1), -1, LVNI_SELECTED); if(n != -1) { ListView_GetItemText(GetDlgItem(hDlg, IDC_LIST1), n, 0, szUser, 200); wsprintf(szOut, "Removed User - %s", szUser); LogEvent(GetParent(hDlg), gszServerAETitle, szOut); ListView_DeleteItem(GetDlgItem(hDlg, IDC_LIST1), n); ListView_DeleteItem(pData->hUserList, n); } return TRUE; case IDC_BUTTON5: ClearEventsLog(hDlg, pData->hEventLog); return TRUE; case IDC_BUTTON6: if (UpdateData(hDlg, pData)) EndDialog(hDlg, IDOK); return TRUE; case IDC_SEC_TLS: { EnableWindow(GetDlgItem(hDlg, IDC_BUTTON6), FALSE); EnableWindow(GetDlgItem(hDlg, IDCANCEL), FALSE); if (IsDlgButtonChecked(hDlg, IDC_SEC_TLS)) { // Check to make sure server.pem exists char szServerCertName[_MAX_PATH]; GetCertName(SERVER_CERT_NAME, szServerCertName); if (_access(szServerCertName, 4)!=0) { char szMsg[200]; wsprintf(szMsg, "Certificate file does not exist: %s", szServerCertName); MessageBox(hDlg, szMsg, "Warning", MB_OK | MB_ICONEXCLAMATION); gSecureMode = DICOM_SECURE_NONE; gbValidPrivateKeyPassword = FALSE; CheckRadioButton(hDlg, IDC_SEC_NONE, IDC_SEC_TLS, IDC_SEC_NONE); } else if (DICOM_SUCCESS != GetServerPrivateKeyPassword(hDlg)) { MessageBox(hDlg, "Incorrect password for server certificate.", "Error", MB_OK | MB_ICONERROR); gSecureMode = DICOM_SECURE_NONE; gbValidPrivateKeyPassword = FALSE; CheckRadioButton(hDlg, IDC_SEC_NONE, IDC_SEC_TLS, IDC_SEC_NONE); } } EnableWindow(GetDlgItem(hDlg, IDC_BUTTON6), TRUE); EnableWindow(GetDlgItem(hDlg, IDCANCEL), TRUE); } return TRUE; } return FALSE; case WM_CLOSE: UpdateData(hDlg, pData); return FALSE; default: return FALSE; } return FALSE; } L_VOID InitAdminDlg(HWND hDlg, pSRVADMINDATA pData) { HBITMAP hBitmap; LV_COLUMN lvcol; L_CHAR buf[1024]; L_INT x; LV_ITEM lvi; HIMAGELIST hImageList=NULL; pData->hImageList=NULL; if(!pData->bEnableEdits) { EnableWindow(GetDlgItem(hDlg, IDC_EDIT1), FALSE); EnableWindow(GetDlgItem(hDlg, IDC_EDIT2), FALSE); EnableWindow(GetDlgItem(hDlg, IDC_EDIT3), FALSE); EnableWindow(GetDlgItem(hDlg, IDC_EDIT4), FALSE); EnableWindow(GetDlgItem(hDlg, IDC_SEC_NONE), FALSE); EnableWindow(GetDlgItem(hDlg, IDC_SEC_ISCL), FALSE); EnableWindow(GetDlgItem(hDlg, IDC_SEC_TLS), FALSE); } SetDlgItemText(hDlg, IDC_EDIT1, pData->szAETitle); SetDlgItemInt(hDlg, IDC_EDIT2, pData->lServerPort, FALSE); SetDlgItemInt(hDlg, IDC_EDIT3, pData->lServerTimeOut, FALSE); SetDlgItemInt(hDlg, IDC_EDIT4, pData->lMaxClients, FALSE); if(!IsWindow(pData->hUserList)) EndDialog(hDlg, IDCANCEL); if(!IsWindow(pData->hEventLog)) EndDialog(hDlg, IDCANCEL); lvcol.fmt = LVCFMT_LEFT; lvcol.cx = 100; lvcol.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH; lvcol.pszText = "User"; ListView_InsertColumn(GetDlgItem(hDlg, IDC_LIST1), 0, &lvcol); lvcol.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM; lvcol.pszText = "IP"; lvcol.iSubItem = 1; ListView_InsertColumn(GetDlgItem(hDlg, IDC_LIST1), 1, &lvcol); lvcol.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM; lvcol.pszText = "Port"; lvcol.iSubItem = 2; ListView_InsertColumn(GetDlgItem(hDlg, IDC_LIST1), 2, &lvcol); lvcol.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM; lvcol.pszText = "Timeout"; lvcol.iSubItem = 3; ListView_InsertColumn(GetDlgItem(hDlg, IDC_LIST1), 3, &lvcol); lvcol.fmt = LVCFMT_LEFT; lvcol.cx = 125; lvcol.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH; lvcol.pszText = "Date"; ListView_InsertColumn(GetDlgItem(hDlg, IDC_LIST2), 0, &lvcol); lvcol.cx = 100; lvcol.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM; lvcol.pszText = "User"; lvcol.iSubItem = 1; ListView_InsertColumn(GetDlgItem(hDlg, IDC_LIST2), 1, &lvcol); lvcol.cx = 300; lvcol.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM; lvcol.pszText = "Event"; lvcol.iSubItem = 2; ListView_InsertColumn(GetDlgItem(hDlg, IDC_LIST2), 2, &lvcol); /*image list*/ pData->hImageList = ImageList_Create(16, 16, ILC_COLOR, 2, 2); hBitmap = LoadBitmap(ghInstance, MAKEINTRESOURCE(IDB_BITMAP1)); ImageList_Add(hImageList, hBitmap, NULL); DeleteObject(hBitmap); hBitmap = LoadBitmap(ghInstance, MAKEINTRESOURCE(IDB_BITMAP2)); ImageList_Add(hImageList, hBitmap, NULL); DeleteObject(hBitmap); ListView_SetImageList(GetDlgItem(hDlg, IDC_LIST1), hImageList, LVSIL_SMALL); ListView_SetImageList(GetDlgItem(hDlg, IDC_LIST2), hImageList, LVSIL_SMALL); for(x=0; xhUserList); x++) { lvi.mask = LVIF_TEXT; lvi.iItem = x; lvi.iSubItem = 0; lvi.pszText = buf; lvi.cchTextMax = 1024; if(ListView_GetItem(pData->hUserList, &lvi)) { lvi.mask = LVIF_TEXT|LVIF_IMAGE; lvi.iImage = 0; ListView_InsertItem(GetDlgItem(hDlg, IDC_LIST1), &lvi); lvi.mask = LVIF_TEXT; lvi.iSubItem = 1; if(ListView_GetItem(pData->hUserList, &lvi)) ListView_SetItem(GetDlgItem(hDlg, IDC_LIST1), &lvi); lvi.mask = LVIF_TEXT; lvi.iSubItem = 2; if(ListView_GetItem(pData->hUserList, &lvi)) ListView_SetItem(GetDlgItem(hDlg, IDC_LIST1), &lvi); lvi.mask = LVIF_TEXT; lvi.iSubItem = 3; if (ListView_GetItem(pData->hUserList, &lvi)) ListView_SetItem(GetDlgItem(hDlg, IDC_LIST1), &lvi); } } for(x=0; xhEventLog); x++) { lvi.mask = LVIF_TEXT; lvi.iItem = x; lvi.iSubItem = 0; lvi.pszText = buf; lvi.cchTextMax = 1024; if(ListView_GetItem(pData->hEventLog, &lvi)) { lvi.mask = LVIF_TEXT|LVIF_IMAGE; lvi.iImage = 0; ListView_InsertItem(GetDlgItem(hDlg, IDC_LIST2), &lvi); lvi.mask = LVIF_TEXT; lvi.iSubItem = 1; if(ListView_GetItem(pData->hEventLog, &lvi)) ListView_SetItem(GetDlgItem(hDlg, IDC_LIST2), &lvi); lvi.mask = LVIF_TEXT; lvi.iSubItem = 2; if(ListView_GetItem(pData->hEventLog, &lvi)) ListView_SetItem(GetDlgItem(hDlg, IDC_LIST2), &lvi); } } // gSecureMode = DICOM_SECURE_NONE; switch (gSecureMode) { case DICOM_SECURE_NONE: { CheckRadioButton(hDlg, IDC_SEC_NONE, IDC_SEC_TLS, IDC_SEC_NONE); break; } case DICOM_SECURE_ISCL: { CheckRadioButton(hDlg, IDC_SEC_NONE, IDC_SEC_TLS, IDC_SEC_ISCL); break; } case DICOM_SECURE_TLS: { CheckRadioButton(hDlg, IDC_SEC_NONE, IDC_SEC_TLS, IDC_SEC_TLS); break; } } } L_BOOL UpdateData(HWND hDlg, pSRVADMINDATA pData) { L_BOOL bTranslated; L_INT lVal; L_INT nRet; if(pData) { GetDlgItemText(hDlg, IDC_EDIT1, pData->szAETitle, sizeof(pData->szAETitle) / sizeof(pData->szAETitle[0])); lVal = GetDlgItemInt(hDlg, IDC_EDIT2, &bTranslated, FALSE); if(bTranslated) pData->lServerPort = lVal; lVal = GetDlgItemInt(hDlg, IDC_EDIT3, &bTranslated, FALSE); if(bTranslated && (lVal <= 5)) pData->lServerTimeOut = lVal; lVal = GetDlgItemInt(hDlg, IDC_EDIT4, &bTranslated, FALSE); if(bTranslated) pData->lMaxClients = lVal; nRet = IsDlgButtonChecked(hDlg, IDC_SEC_NONE); if (nRet == BST_CHECKED) { gSecureMode = DICOM_SECURE_NONE; } nRet = IsDlgButtonChecked(hDlg, IDC_SEC_ISCL); if (nRet == BST_CHECKED) { gSecureMode = DICOM_SECURE_ISCL; } nRet = IsDlgButtonChecked(hDlg, IDC_SEC_TLS); if (nRet == BST_CHECKED) { gSecureMode = DICOM_SECURE_TLS; } } return TRUE; } typedef struct tagUSERPROP { L_CHAR szAETitle[20]; L_CHAR szIP[UID_MAX_SIZE + 1]; L_UINT lPort; L_UINT uTimeOut; } USERPROP, * pUSERPROP; L_VOID AddUser(HWND hDlg, pSRVADMINDATA pData) { L_INT nRet; L_INT nPos; HWND hUserList; HWND hEventLog; LV_ITEM Item; USERPROP User; L_CHAR szOut[128]; hUserList = GetDlgItem(hDlg, IDC_LIST1); hEventLog = GetDlgItem(hDlg, IDC_LIST2); lstrcpy(User.szAETitle, "CLIENT1"); lstrcpy(User.szIP, "1.1.1.1"); User.lPort = 1000; User.uTimeOut = 0; nRet = DialogBoxParam(ghInstance, MAKEINTRESOURCE(IDD_USERPROP), hDlg, UserPropDlgProc, (LPARAM) &User); if (nRet==IDOK) { memset(&Item, 0, sizeof(LV_ITEM)); Item.iItem = ListView_GetItemCount(hUserList); Item.iSubItem = 0; Item.mask = LVIF_TEXT | LVIF_IMAGE; Item.pszText = User.szAETitle; Item.iImage = 1; nPos = ListView_InsertItem(hUserList, &Item); if(nPos!=-1) { Item.iSubItem = 1; Item.mask = LVIF_TEXT; Item.pszText = User.szIP; ListView_SetItem(hUserList, &Item); wsprintf(szOut, "%u", User.lPort); Item.iSubItem = 2; Item.mask = LVIF_TEXT; Item.pszText = szOut; ListView_SetItem(hUserList, &Item); wsprintf(szOut, "%u", User.uTimeOut); Item.iSubItem = 3; Item.mask = LVIF_TEXT; Item.pszText = szOut; ListView_SetItem(hUserList, &Item); } Item.iItem = ListView_GetItemCount(pData->hUserList); Item.iSubItem = 0; Item.mask = LVIF_TEXT; Item.pszText = User.szAETitle; nPos = ListView_InsertItem(pData->hUserList, &Item); if(nPos!=-1) { Item.iSubItem = 1; Item.mask = LVIF_TEXT; Item.pszText = User.szIP; ListView_SetItem(pData->hUserList, &Item); wsprintf(szOut, "%u", User.lPort); Item.iSubItem = 2; Item.mask = LVIF_TEXT; Item.pszText = szOut; ListView_SetItem(pData->hUserList, &Item); wsprintf(szOut, "%u", User.uTimeOut); Item.iSubItem = 3; Item.mask = LVIF_TEXT; Item.pszText = szOut; ListView_SetItem(pData->hUserList, &Item); } wsprintf(szOut, "Added User - %s", User.szAETitle); LogEvent(GetParent(hDlg), gszServerAETitle, szOut); } } L_VOID ModifyUser(HWND hDlg, pSRVADMINDATA pData) { L_INT nRet; L_INT nPos; HWND hUserList; HWND hEventLog; LV_ITEM Item; USERPROP User; L_CHAR szOut[64]; hUserList = GetDlgItem(hDlg, IDC_LIST1); hEventLog = GetDlgItem(hDlg, IDC_LIST2); nPos = ListView_GetNextItem(hUserList, -1, LVNI_SELECTED); memset(&Item, 0, sizeof(LV_ITEM)); Item.iItem = nPos; Item.iSubItem = 0; Item.mask = LVIF_TEXT; Item.pszText = User.szAETitle; Item.cchTextMax = sizeof(User.szAETitle) / sizeof(User.szAETitle[0]); ListView_GetItem(hUserList, &Item); Item.iSubItem = 1; Item.mask = LVIF_TEXT; Item.pszText = User.szIP; Item.cchTextMax = sizeof(User.szIP) / sizeof(User.szIP[0]); ListView_GetItem(hUserList, &Item); Item.iSubItem = 2; Item.mask = LVIF_TEXT; Item.pszText = szOut; Item.cchTextMax = sizeof(szOut) / sizeof(szOut[0]); ListView_GetItem(hUserList, &Item); User.lPort = atoi(szOut); Item.iSubItem = 3; Item.mask = LVIF_TEXT; Item.pszText = szOut; Item.cchTextMax = sizeof(szOut) / sizeof(szOut[0]); ListView_GetItem(hUserList, &Item); User.uTimeOut = atoi(szOut); if(nPos!=-1) { nRet = DialogBoxParam(ghInstance, MAKEINTRESOURCE(IDD_USERPROP), hDlg, UserPropDlgProc, (LPARAM)&User); if(nRet==IDOK) { memset(&Item, 0, sizeof(LV_ITEM)); Item.iItem = nPos; Item.iSubItem = 0; Item.mask = LVIF_TEXT; Item.pszText = User.szAETitle; ListView_SetItem(hUserList, &Item); Item.iSubItem = 1; Item.mask = LVIF_TEXT; Item.pszText = User.szIP; ListView_SetItem(hUserList, &Item); wsprintf(szOut, "%u", User.lPort); Item.iSubItem = 2; Item.mask = LVIF_TEXT; Item.pszText = szOut; ListView_SetItem(hUserList, &Item); wsprintf(szOut, "%u", User.uTimeOut); Item.iSubItem = 3; Item.mask = LVIF_TEXT; Item.pszText = szOut; ListView_SetItem(hUserList, &Item); Item.iItem = nPos; Item.iSubItem = 0; Item.mask = LVIF_TEXT; Item.pszText = User.szAETitle; ListView_SetItem(pData->hUserList, &Item); Item.iSubItem = 1; Item.mask = LVIF_TEXT; Item.pszText = User.szIP; ListView_SetItem(pData->hUserList, &Item); wsprintf(szOut, "%u", User.lPort); Item.iSubItem = 2; Item.mask = LVIF_TEXT; Item.pszText = szOut; ListView_SetItem(pData->hUserList, &Item); wsprintf(szOut, "%u", User.uTimeOut); Item.iSubItem = 3; Item.mask = LVIF_TEXT; Item.pszText = szOut; ListView_SetItem(pData->hUserList, &Item); } } } BOOL CALLBACK UserPropDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { static pUSERPROP pData=NULL; WORD wID; L_BOOL bTranslated; L_INT lVal; switch(uMsg) { case WM_INITDIALOG: pData = (pUSERPROP)lParam; if(!pData) EndDialog(hDlg, IDCANCEL); else { SetDlgItemText(hDlg, IDC_EDIT1, pData->szAETitle); SetDlgItemText(hDlg, IDC_EDIT2, pData->szIP); SetDlgItemInt(hDlg, IDC_EDIT3, pData->lPort, FALSE); SetDlgItemInt(hDlg, IDC_EDIT_TIMEOUT, pData->uTimeOut, FALSE); } return FALSE; case WM_COMMAND: wID = LOWORD(wParam); switch(wID) { case IDOK: if(pData) { GetDlgItemText(hDlg, IDC_EDIT1, pData->szAETitle, sizeof(pData->szAETitle) / sizeof(pData->szAETitle[0])); GetDlgItemText(hDlg, IDC_EDIT2, pData->szIP, sizeof(pData->szIP) / sizeof(pData->szIP[0])); lVal = GetDlgItemInt(hDlg, IDC_EDIT3, &bTranslated, FALSE); if(bTranslated && (lVal > 0)) pData->lPort = lVal; lVal = GetDlgItemInt(hDlg, IDC_EDIT_TIMEOUT, &bTranslated, FALSE); if (bTranslated && lVal >= 0) pData->uTimeOut = lVal; } EndDialog(hDlg, wID); return TRUE; case IDCANCEL: EndDialog(hDlg, wID); return TRUE; } return FALSE; default: return FALSE; } return FALSE; } VOID CleanFolder(LPSTR pszPathName) { WIN32_FIND_DATA FindFileData; HANDLE hFind; char szPath[MAX_PATH], szFile[MAX_PATH]; if (!pszPathName) return; wsprintf(szPath, "%s\\*.*", pszPathName); hFind = FindFirstFile(szPath, &FindFileData); if (hFind != INVALID_HANDLE_VALUE) { while (TRUE) { if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if (lstrcmp(FindFileData.cFileName, ".") != 0 && lstrcmp(FindFileData.cFileName, "..") != 0) { wsprintf(szPath, "%s\\%s", pszPathName, FindFileData.cFileName); CleanFolder(szPath); RemoveDirectory(szPath); } } else { wsprintf(szFile, "%s\\%s", pszPathName, FindFileData.cFileName); DeleteFile(szFile); } if (!FindNextFile(hFind, &FindFileData)) break; } FindClose(hFind); } } VOID ClearEventsLog(HWND hDlg, HWND hEventsListCtrl) { ListView_DeleteAllItems(hEventsListCtrl); ListView_DeleteAllItems(GetDlgItem(hDlg, IDC_LIST2)); CleanFolder(gszLogFolder); }