summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Hazan <ghazan@miranda.im>2022-01-24 15:01:41 +0300
committerGeorge Hazan <ghazan@miranda.im>2022-01-24 15:01:41 +0300
commit41ae1ce5bec8ba343750345972b26770129d81f8 (patch)
treeed4ac64f671acf2a0ed9556732776b156fd0362a
parent4fd4a2cecfb875fd432b5010ec68d3384c55f949 (diff)
fixes #3006 again + massive code cleaning
-rw-r--r--plugins/Ping/src/options.cpp629
-rw-r--r--plugins/Ping/src/ping.cpp11
-rw-r--r--plugins/Ping/src/pinggraph.cpp20
-rw-r--r--plugins/Ping/src/pinglist.cpp91
-rw-r--r--plugins/Ping/src/pinglist.h47
-rw-r--r--plugins/Ping/src/pingthread.cpp65
-rw-r--r--plugins/Ping/src/pingthread.h2
-rw-r--r--plugins/Ping/src/stdafx.h31
-rw-r--r--plugins/Ping/src/utils.cpp108
9 files changed, 472 insertions, 532 deletions
diff --git a/plugins/Ping/src/options.cpp b/plugins/Ping/src/options.cpp
index 953b72dc0a..549300c979 100644
--- a/plugins/Ping/src/options.cpp
+++ b/plugins/Ping/src/options.cpp
@@ -2,165 +2,12 @@
PingOptions options;
-// main ping options
-static INT_PTR CALLBACK DlgProcOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
-{
- switch (msg) {
- case WM_INITDIALOG:
- TranslateDialogDefault(hwndDlg);
-
- if (ServiceExists(MS_CLIST_FRAMES_ADDFRAME))
- EnableWindow(GetDlgItem(hwndDlg, IDC_CHK_ATTACH), FALSE);
-
- CheckDlgButton(hwndDlg, IDC_CHK_ATTACH, options.attach_to_clist ? BST_CHECKED : BST_UNCHECKED);
-
- SetDlgItemInt(hwndDlg, IDC_PPM, options.ping_period, FALSE);
- SetDlgItemInt(hwndDlg, IDC_PT, options.ping_timeout, FALSE);
- CheckDlgButton(hwndDlg, IDC_CHECKPOPUP, options.show_popup ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hwndDlg, IDC_CHECKPOPUP2, options.show_popup2 ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hwndDlg, IDC_CHK_BLOCK, options.block_reps ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hwndDlg, IDC_CHK_LOG, options.logging ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hwndDlg, IDC_CHK_LOGCSV, options.log_csv ? BST_CHECKED : BST_UNCHECKED);
- CheckDlgButton(hwndDlg, IDC_CHK_NOTESTICON, options.no_test_icon ? BST_CHECKED : BST_UNCHECKED);
-
- SendDlgItemMessage(hwndDlg, IDC_SP_INDENT, UDM_SETRANGE, 0, (LPARAM)MAKELONG(500, 0));
- SendDlgItemMessage(hwndDlg, IDC_SP_INDENT, UDM_SETPOS, 0, options.indent);
- SendDlgItemMessage(hwndDlg, IDC_SP_ROWHEIGHT, UDM_SETRANGE, 0, (LPARAM)MAKELONG(500, 6));
- SendDlgItemMessage(hwndDlg, IDC_SP_ROWHEIGHT, UDM_SETPOS, 0, options.row_height);
-
- SetDlgItemInt(hwndDlg, IDC_RPT, options.retries, FALSE);
-
- SetDlgItemText(hwndDlg, IDC_ED_FILENAME, options.log_filename);
- if (!options.logging) {
- EnableWindow(GetDlgItem(hwndDlg, IDC_ED_FILENAME), FALSE);
- EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_LOGBROWSE), FALSE);
- EnableWindow(GetDlgItem(hwndDlg, IDC_CHK_LOGCSV), FALSE);
- }
- return TRUE;
-
- case WM_COMMAND:
- if (HIWORD(wParam) == EN_CHANGE && (HWND)lParam == GetFocus()) {
- switch (LOWORD(wParam)) {
- case IDC_PPM:
- case IDC_PT:
- case IDC_ED_FILENAME:
- case IDC_RPT:
- SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
- }
- break;
- }
-
- if (HIWORD(wParam) == CBN_SELCHANGE) {
- SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
- break;
- }
-
- if (HIWORD(wParam) == BN_CLICKED) {
- switch (LOWORD(wParam)) {
- case IDC_CHK_LOG:
- EnableWindow(GetDlgItem(hwndDlg, IDC_ED_FILENAME), IsDlgButtonChecked(hwndDlg, IDC_CHK_LOG));
- EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_LOGBROWSE), IsDlgButtonChecked(hwndDlg, IDC_CHK_LOG));
- EnableWindow(GetDlgItem(hwndDlg, IDC_CHK_LOGCSV), IsDlgButtonChecked(hwndDlg, IDC_CHK_LOG));
- // drop through
- case IDC_CHK_LOGCSV:
- case IDC_CHECKPOPUP:
- case IDC_CHECKPOPUP2:
- case IDC_CHK_BLOCK:
- case IDC_CHK_MINMAX:
- case IDC_CHK_NOTESTICON:
- case IDC_CHK_ATTACH:
- SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
- break;
- case IDC_BTN_VIEWLOG:
- CallService(MODULENAME "/ViewLogData", 0, 0);
- break;
- case IDC_BTN_LOGBROWSE:
- {
- wchar_t filter[MAX_PATH];
- mir_snwprintf(filter, L"%s%c*.txt%c%s%c*.*%c", TranslateT("Text Files (*.txt)"), 0, 0, TranslateT("All Files"), 0, 0);
- OPENFILENAME ofn = { 0 };
- ofn.lStructSize = sizeof(ofn);
- ofn.lpstrFile = options.log_filename;
- ofn.hwndOwner = hwndDlg;
- ofn.nMaxFile = _countof(options.log_filename);
- ofn.lpstrTitle = TranslateT("Open log file");
- ofn.lpstrFilter = filter;
- ofn.nFilterIndex = 1;
- ofn.lpstrFileTitle = nullptr;
- ofn.nMaxFileTitle = 0;
- ofn.lpstrInitialDir = nullptr;
- ofn.Flags = OFN_PATHMUSTEXIST;
-
- if (GetOpenFileName(&ofn) == TRUE) {
- SetDlgItemText(hwndDlg, IDC_ED_FILENAME, ofn.lpstrFile);
- SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
- }
- }
- break;
- }
- break;
- }
- break;
-
- case WM_NOTIFY:
- if (((LPNMHDR)lParam)->code == UDN_DELTAPOS) {
- SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
- }
- if (((LPNMHDR)lParam)->code == PSN_APPLY) {
-
- BOOL trans_success;
-
- uint32_t new_ping_period = GetDlgItemInt(hwndDlg, IDC_PPM, &trans_success, FALSE);
- if (trans_success) {
- options.ping_period = new_ping_period;
- }
- uint32_t new_ping_timeout = GetDlgItemInt(hwndDlg, IDC_PT, &trans_success, FALSE);
- if (trans_success) {
- options.ping_timeout = new_ping_timeout;
- }
- options.show_popup = IsDlgButtonChecked(hwndDlg, IDC_CHECKPOPUP) == BST_CHECKED;
- options.show_popup2 = IsDlgButtonChecked(hwndDlg, IDC_CHECKPOPUP2) == BST_CHECKED;
- options.block_reps = IsDlgButtonChecked(hwndDlg, IDC_CHK_BLOCK) == BST_CHECKED;
- options.logging = IsDlgButtonChecked(hwndDlg, IDC_CHK_LOG) == BST_CHECKED;
- options.log_csv = IsDlgButtonChecked(hwndDlg, IDC_CHK_LOGCSV) == BST_CHECKED;
- GetDlgItemText(hwndDlg, IDC_ED_FILENAME, options.log_filename, _countof(options.log_filename));
-
- options.no_test_icon = IsDlgButtonChecked(hwndDlg, IDC_CHK_NOTESTICON) == BST_CHECKED;
-
- options.indent = SendDlgItemMessage(hwndDlg, IDC_SP_INDENT, UDM_GETPOS, 0, 0);
- options.row_height = SendDlgItemMessage(hwndDlg, IDC_SP_ROWHEIGHT, UDM_GETPOS, 0, 0);
-
- uint32_t new_retries = GetDlgItemInt(hwndDlg, IDC_RPT, &trans_success, FALSE);
- if (trans_success) {
- options.retries = new_retries;
- }
-
- bool new_attach = (IsDlgButtonChecked(hwndDlg, IDC_CHK_ATTACH) == BST_CHECKED);
- if (!ServiceExists(MS_CLIST_FRAMES_ADDFRAME) && options.attach_to_clist != new_attach)
- AttachToClist(new_attach);
-
- options.attach_to_clist = new_attach;
-
- SaveOptions();
-
- RefreshWindow(0, 0);
-
- Log(L"options changed");
-
- if (hWakeEvent)
- SetEvent(hWakeEvent);
- return TRUE;
- }
- break;
- }
-
- return FALSE;
-}
+/////////////////////////////////////////////////////////////////////////////////////////
+// host edit
PINGLIST temp_list;
PINGADDRESS add_edit_addr;
-// host edit
INT_PTR CALLBACK DlgProcDestEdit(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM)
{
switch (msg) {
@@ -207,7 +54,7 @@ INT_PTR CALLBACK DlgProcDestEdit(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM)
// ? doesn't work? ?
SetFocus(GetDlgItem(hwndDlg, IDC_ED_DESTLAB));
return FALSE;
-
+
case WM_COMMAND:
if (HIWORD(wParam) == LBN_SELCHANGE && LOWORD(wParam) == IDC_COMBO_DESTPROTO) {
int sel = SendDlgItemMessage(hwndDlg, IDC_COMBO_DESTPROTO, CB_GETCURSEL, 0, 0);
@@ -222,7 +69,7 @@ INT_PTR CALLBACK DlgProcDestEdit(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM)
case IDC_CHK_DESTTCP:
EnableWindow(GetDlgItem(hwndDlg, IDC_ED_DESTPORT), IsDlgButtonChecked(hwndDlg, IDC_CHK_DESTTCP));
break;
-
+
case IDOK:
GetDlgItemText(hwndDlg, IDC_ED_DESTADDR, add_edit_addr.pszName, _countof(add_edit_addr.pszName));
GetDlgItemText(hwndDlg, IDC_ED_DESTLAB, add_edit_addr.pszLabel, _countof(add_edit_addr.pszLabel));
@@ -254,9 +101,9 @@ INT_PTR CALLBACK DlgProcDestEdit(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM)
else add_edit_addr.port = -1;
EndDialog(hwndDlg, IDOK);
- RefreshWindow(0, 0);
+ RefreshWindow();
break;
-
+
case IDCANCEL:
EndDialog(hwndDlg, IDCANCEL);
break;
@@ -279,203 +126,324 @@ bool Edit(HWND hwnd, PINGADDRESS &addr)
return false;
}
-// ping hosts list window
-static INT_PTR CALLBACK DlgProcOpts2(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+/////////////////////////////////////////////////////////////////////////////////////////
+// main ping options
+
+class CMainOptsDlg : public CDlgBase
{
- switch (msg) {
- case WM_INITDIALOG:
- TranslateDialogDefault(hwndDlg);
- {
- mir_cslock lck(data_list_cs);
- temp_list = data_list;
+ CCtrlCheck chkLog;
+ CCtrlButton btnViewLog, btnBrowse;
+
+public:
+ CMainOptsDlg() :
+ CDlgBase(g_plugin, IDD_DIALOG1),
+ chkLog(this, IDC_CHK_LOG),
+ btnBrowse(this, IDC_BTN_LOGBROWSE),
+ btnViewLog(this, IDC_BTN_VIEWLOG)
+ {
+ chkLog.OnChange = Callback(this, &CMainOptsDlg::onChange_Log);
+
+ btnBrowse.OnClick = Callback(this, &CMainOptsDlg::onClick_Browse);
+ btnViewLog.OnClick = Callback(this, &CMainOptsDlg::onClick_ViewLog);
+ }
- for (pinglist_it i = temp_list.begin(); i != temp_list.end(); ++i) {
- int index = SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_INSERTSTRING, (WPARAM)-1, (LPARAM)i->pszLabel);
- SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_SETITEMDATA, index, (LPARAM) & (*i));
- }
- }
- return TRUE;
+ bool OnInitDialog() override
+ {
+ if (ServiceExists(MS_CLIST_FRAMES_ADDFRAME))
+ EnableWindow(GetDlgItem(m_hwnd, IDC_CHK_ATTACH), FALSE);
- case WM_COMMAND:
- if (HIWORD(wParam) == LBN_SELCHANGE && LOWORD(wParam) == IDC_LST_DEST) {
- int sel = SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_GETCURSEL, 0, 0);
- if (sel != LB_ERR) {
- EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_DESTREM), TRUE);
- EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_DESTEDIT), TRUE);
-
- EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_DESTUP), (sel > 0));
- int count = SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_GETCOUNT, 0, 0);
- EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_DESTDOWN), (sel < count - 1));
- }
+ CheckDlgButton(m_hwnd, IDC_CHK_ATTACH, options.attach_to_clist ? BST_CHECKED : BST_UNCHECKED);
+
+ SetDlgItemInt(m_hwnd, IDC_PPM, options.ping_period, FALSE);
+ SetDlgItemInt(m_hwnd, IDC_PT, options.ping_timeout, FALSE);
+ CheckDlgButton(m_hwnd, IDC_CHECKPOPUP, options.show_popup ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(m_hwnd, IDC_CHECKPOPUP2, options.show_popup2 ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(m_hwnd, IDC_CHK_BLOCK, options.block_reps ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(m_hwnd, IDC_CHK_LOG, options.logging ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(m_hwnd, IDC_CHK_LOGCSV, options.log_csv ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(m_hwnd, IDC_CHK_NOTESTICON, options.no_test_icon ? BST_CHECKED : BST_UNCHECKED);
+
+ SendDlgItemMessage(m_hwnd, IDC_SP_INDENT, UDM_SETRANGE, 0, (LPARAM)MAKELONG(500, 0));
+ SendDlgItemMessage(m_hwnd, IDC_SP_INDENT, UDM_SETPOS, 0, options.indent);
+ SendDlgItemMessage(m_hwnd, IDC_SP_ROWHEIGHT, UDM_SETRANGE, 0, (LPARAM)MAKELONG(500, 6));
+ SendDlgItemMessage(m_hwnd, IDC_SP_ROWHEIGHT, UDM_SETPOS, 0, options.row_height);
+
+ SetDlgItemInt(m_hwnd, IDC_RPT, options.retries, FALSE);
+
+ SetDlgItemText(m_hwnd, IDC_ED_FILENAME, options.log_filename);
+ if (!options.logging) {
+ EnableWindow(GetDlgItem(m_hwnd, IDC_ED_FILENAME), FALSE);
+ EnableWindow(GetDlgItem(m_hwnd, IDC_BTN_LOGBROWSE), FALSE);
+ EnableWindow(GetDlgItem(m_hwnd, IDC_CHK_LOGCSV), FALSE);
}
+ return true;
+ }
- if (HIWORD(wParam) == BN_CLICKED) {
- switch (LOWORD(wParam)) {
- case IDC_BTN_DESTEDIT:
- {
- int sel = SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_GETCURSEL, 0, 0);
- if (sel != LB_ERR) {
- PINGADDRESS *item = (PINGADDRESS *)SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_GETITEMDATA, sel, 0);
- PINGADDRESS temp = *item;
- if (Edit(hwndDlg, temp)) {
- *item = temp;
- SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_DELETESTRING, (WPARAM)sel, 0);
- SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_INSERTSTRING, (WPARAM)sel, (LPARAM)item->pszLabel);
- SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_SETITEMDATA, (WPARAM)sel, (LPARAM)item);
- SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_SETCURSEL, (WPARAM)sel, 0);
-
- EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_DESTREM), TRUE);
- EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_DESTEDIT), TRUE);
- EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_DESTUP), sel > 0);
- int count = SendDlgItemMessage(hwndDlg, IDC_BTN_DESTDOWN, LB_GETCOUNT, 0, 0);
- EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_DESTDOWN), (sel < count - 1));
-
- SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
- }
- }
- }
- break;
+ bool OnApply() override
+ {
+ BOOL trans_success;
+ uint32_t new_ping_period = GetDlgItemInt(m_hwnd, IDC_PPM, &trans_success, FALSE);
+ if (trans_success)
+ options.ping_period = new_ping_period;
- case IDC_BTN_DESTADD:
- memset(&add_edit_addr, 0, sizeof(add_edit_addr));
- add_edit_addr.cbSize = sizeof(add_edit_addr);
- add_edit_addr.port = -1;
- add_edit_addr.set_status = ID_STATUS_ONLINE;
- add_edit_addr.get_status = ID_STATUS_OFFLINE;
- add_edit_addr.status = PS_NOTRESPONDING;
- add_edit_addr.item_id = 0;
- add_edit_addr.index = (int)temp_list.size();
+ uint32_t new_ping_timeout = GetDlgItemInt(m_hwnd, IDC_PT, &trans_success, FALSE);
+ if (trans_success)
+ options.ping_timeout = new_ping_timeout;
- if (DialogBox(g_plugin.getInst(), MAKEINTRESOURCE(IDD_DIALOG3), hwndDlg, DlgProcDestEdit) == IDOK) {
- temp_list.push_back(add_edit_addr);
+ options.show_popup = IsDlgButtonChecked(m_hwnd, IDC_CHECKPOPUP) == BST_CHECKED;
+ options.show_popup2 = IsDlgButtonChecked(m_hwnd, IDC_CHECKPOPUP2) == BST_CHECKED;
+ options.block_reps = IsDlgButtonChecked(m_hwnd, IDC_CHK_BLOCK) == BST_CHECKED;
+ options.logging = IsDlgButtonChecked(m_hwnd, IDC_CHK_LOG) == BST_CHECKED;
+ options.log_csv = IsDlgButtonChecked(m_hwnd, IDC_CHK_LOGCSV) == BST_CHECKED;
+ GetDlgItemText(m_hwnd, IDC_ED_FILENAME, options.log_filename, _countof(options.log_filename));
- int index = SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_INSERTSTRING, (WPARAM)-1, (LPARAM)add_edit_addr.pszLabel);
- SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_SETCURSEL, (WPARAM)index, 0);
- SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_SETITEMDATA, (WPARAM)index, (LPARAM) & (temp_list.back()));
+ options.no_test_icon = IsDlgButtonChecked(m_hwnd, IDC_CHK_NOTESTICON) == BST_CHECKED;
- EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_DESTREM), TRUE);
- EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_DESTEDIT), TRUE);
+ options.indent = SendDlgItemMessage(m_hwnd, IDC_SP_INDENT, UDM_GETPOS, 0, 0);
+ options.row_height = SendDlgItemMessage(m_hwnd, IDC_SP_ROWHEIGHT, UDM_GETPOS, 0, 0);
- int sel = (int)temp_list.size() - 1;
- EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_DESTUP), (sel > 0));
- int count = SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_GETCOUNT, 0, 0);
- EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_DESTDOWN), (sel < count - 1));
+ uint32_t new_retries = GetDlgItemInt(m_hwnd, IDC_RPT, &trans_success, FALSE);
+ if (trans_success)
+ options.retries = new_retries;
- SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
- }
- break;
+ bool new_attach = (IsDlgButtonChecked(m_hwnd, IDC_CHK_ATTACH) == BST_CHECKED);
+ if (!ServiceExists(MS_CLIST_FRAMES_ADDFRAME) && options.attach_to_clist != new_attach)
+ AttachToClist(new_attach);
- case IDC_BTN_DESTREM:
- {
- int sel = SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_GETCURSEL, 0, 0);
- if (sel != LB_ERR) {
- PINGADDRESS *item = (PINGADDRESS *)SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_GETITEMDATA, sel, 0);
- SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_DELETESTRING, (WPARAM)sel, 0);
- temp_list.remove(*item);
- }
+ options.attach_to_clist = new_attach;
- EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_DESTREM), FALSE);
- EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_DESTEDIT), FALSE);
- EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_DESTUP), FALSE);
- EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_DESTDOWN), FALSE);
+ SaveOptions();
- SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
- RefreshWindow(0, 0);
- }
- break;
+ RefreshWindow();
- case IDC_BTN_DESTDOWN:
- {
- int sel2 = SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_GETCURSEL, 0, 0);
- if (sel2 != LB_ERR) {
- PINGADDRESS *item = (PINGADDRESS *)SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_GETITEMDATA, sel2, 0),
- *item2 = (PINGADDRESS *)SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_GETITEMDATA, sel2 + 1, 0);
- if (item && item2) {
- add_edit_addr = *item;
- *item = *item2;
- *item2 = add_edit_addr;
-
- // keep indexes the same, as they're used for sorting the binary tree
- int index = item->index, index2 = item2->index;
- item->index = index2;
- item2->index = index;
-
- SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_DELETESTRING, (WPARAM)sel2, 0);
- SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_INSERTSTRING, (WPARAM)sel2, (LPARAM)item->pszLabel);
- SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_SETITEMDATA, (WPARAM)sel2, (LPARAM)item);
- SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_DELETESTRING, (WPARAM)(sel2 + 1), 0);
- SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_INSERTSTRING, (WPARAM)(sel2 + 1), (LPARAM)item2->pszLabel);
- SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_SETITEMDATA, (WPARAM)(sel2 + 1), (LPARAM)item2);
- SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_SETCURSEL, (WPARAM)(sel2 + 1), 0);
-
- EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_DESTUP), (sel2 + 1 > 0));
- int count = SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_GETCOUNT, 0, 0);
- EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_DESTDOWN), (sel2 + 1 < count - 1));
-
- SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
- }
- }
- }
- break;
+ Log(L"options changed");
- case IDC_BTN_DESTUP:
- {
- int sel2 = SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_GETCURSEL, 0, 0);
- if (sel2 != LB_ERR) {
- PINGADDRESS *item = (PINGADDRESS *)SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_GETITEMDATA, sel2, 0),
- *item2 = (PINGADDRESS *)SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_GETITEMDATA, sel2 - 1, 0);
+ if (hWakeEvent)
+ SetEvent(hWakeEvent);
+ return true;
+ }
- if (item && item2) {
- add_edit_addr = *item;
- *item = *item2;
- *item2 = add_edit_addr;
+ void onChange_Log(CCtrlButton *)
+ {
+ bool bEnabled = IsDlgButtonChecked(m_hwnd, IDC_CHK_LOG);
+ EnableWindow(GetDlgItem(m_hwnd, IDC_ED_FILENAME), bEnabled);
+ EnableWindow(GetDlgItem(m_hwnd, IDC_BTN_LOGBROWSE), bEnabled);
+ EnableWindow(GetDlgItem(m_hwnd, IDC_CHK_LOGCSV), bEnabled);
+ }
- // keep indexes the same, as they're used for sorting the binary tree
- int index = item->index, index2 = item2->index;
- item->index = index2;
- item2->index = index;
+ void onClick_ViewLog(CCtrlButton *)
+ {
+ CallService(MODULENAME "/ViewLogData", 0, 0);
+ }
- SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_DELETESTRING, (WPARAM)sel2, 0);
- SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_INSERTSTRING, (WPARAM)sel2, (LPARAM)item->pszLabel);
- SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_SETITEMDATA, (WPARAM)sel2, (LPARAM)item);
+ void onClick_Browse(CCtrlButton *)
+ {
+ wchar_t filter[MAX_PATH];
+ mir_snwprintf(filter, L"%s%c*.txt%c%s%c*.*%c", TranslateT("Text Files (*.txt)"), 0, 0, TranslateT("All Files"), 0, 0);
+ OPENFILENAME ofn = { 0 };
+ ofn.lStructSize = sizeof(ofn);
+ ofn.lpstrFile = options.log_filename;
+ ofn.hwndOwner = m_hwnd;
+ ofn.nMaxFile = _countof(options.log_filename);
+ ofn.lpstrTitle = TranslateT("Open log file");
+ ofn.lpstrFilter = filter;
+ ofn.nFilterIndex = 1;
+ ofn.lpstrFileTitle = nullptr;
+ ofn.nMaxFileTitle = 0;
+ ofn.lpstrInitialDir = nullptr;
+ ofn.Flags = OFN_PATHMUSTEXIST;
+
+ if (GetOpenFileName(&ofn) == TRUE) {
+ SetDlgItemText(m_hwnd, IDC_ED_FILENAME, ofn.lpstrFile);
+ SendMessage(GetParent(m_hwnd), PSM_CHANGED, 0, 0);
+ }
+ }
+};
- SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_DELETESTRING, (WPARAM)(sel2 - 1), 0);
- SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_INSERTSTRING, (WPARAM)(sel2 - 1), (LPARAM)item2->pszLabel);
- SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_SETITEMDATA, (WPARAM)(sel2 - 1), (LPARAM)item2);
+/////////////////////////////////////////////////////////////////////////////////////////
+// ping hosts list window
- SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_SETCURSEL, (WPARAM)(sel2 - 1), 0);
+class CHostOptsDlg : public CDlgBase
+{
+ CCtrlButton btnAdd, btnEdit, btnRemove, btnDown, btnUp;
+ CCtrlListBox m_list;
+
+public:
+ CHostOptsDlg() :
+ CDlgBase(g_plugin, IDD_DIALOG2),
+ m_list(this, IDC_LST_DEST),
+ btnUp(this, IDC_BTN_DESTUP),
+ btnAdd(this, IDC_BTN_DESTADD),
+ btnDown(this, IDC_BTN_DESTDOWN),
+ btnEdit(this, IDC_BTN_DESTEDIT),
+ btnRemove(this, IDC_BTN_DESTREM)
+ {
+ m_list.OnSelChange = Callback(this, &CHostOptsDlg::onSelChange_List);
+
+ btnAdd.OnClick = Callback(this, &CHostOptsDlg::onClick_Add);
+ btnEdit.OnClick = Callback(this, &CHostOptsDlg::onClick_Edit);
+ btnRemove.OnClick = Callback(this, &CHostOptsDlg::onClick_Remove);
+
+ btnUp.OnClick = Callback(this, &CHostOptsDlg::onClick_Up);
+ btnDown.OnClick = Callback(this, &CHostOptsDlg::onClick_Down);
+ }
- EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_DESTUP), (sel2 - 1 > 0));
- int count = SendDlgItemMessage(hwndDlg, IDC_LST_DEST, LB_GETCOUNT, 0, 0);
- EnableWindow(GetDlgItem(hwndDlg, IDC_BTN_DESTDOWN), (sel2 - 1 < count - 1));
+ bool OnInitDialog() override
+ {
+ mir_cslock lck(data_list_cs);
+ temp_list = data_list;
- SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
- }
- }
- }
+ for (auto &it : temp_list)
+ m_list.InsertString(it.pszLabel, -1, (LPARAM)&it);
- break;
+ return true;
+ }
+
+ bool OnApply() override
+ {
+ SetAndSavePingList(temp_list);
+ GetPingList(temp_list);
+
+ RefreshWindow();
+
+ // the following will be affected due to list rebuild event
+ if (hWakeEvent)
+ SetEvent(hWakeEvent);
+ return true;
+ }
+
+ void onSelChange_List(CCtrlListBox*)
+ {
+ int sel = m_list.GetCurSel();
+ if (sel != LB_ERR) {
+ btnEdit.Enable();
+ btnRemove.Enable();
+
+ btnUp.Enable(sel > 0);
+ btnDown.Enable(sel < m_list.GetCount() - 1);
+ }
+ }
+
+ void onClick_Edit(CCtrlButton*)
+ {
+ int sel = m_list.GetCurSel();
+ if (sel != LB_ERR) {
+ PINGADDRESS *item = (PINGADDRESS *)m_list.GetItemData(sel);
+ PINGADDRESS temp = *item;
+ if (Edit(m_hwnd, temp)) {
+ *item = temp;
+ m_list.DeleteString(sel);
+ m_list.InsertString(item->pszLabel, sel, (LPARAM)item);
+ m_list.SetCurSel(sel);
+
+ onSelChange_List(0);
+ NotifyChange();
}
}
- if (LOWORD(wParam) == IDC_BGCOL
- || LOWORD(wParam) == IDC_SP_INDENT || LOWORD(wParam) == IDC_SP_ROWHEIGHT) {
- SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ }
+
+ void onClick_Add(CCtrlButton *)
+ {
+ memset(&add_edit_addr, 0, sizeof(add_edit_addr));
+ add_edit_addr.cbSize = sizeof(add_edit_addr);
+ add_edit_addr.port = -1;
+ add_edit_addr.set_status = ID_STATUS_ONLINE;
+ add_edit_addr.get_status = ID_STATUS_OFFLINE;
+ add_edit_addr.status = PS_NOTRESPONDING;
+ add_edit_addr.item_id = 0;
+ add_edit_addr.index = (int)temp_list.size();
+
+ if (DialogBox(g_plugin.getInst(), MAKEINTRESOURCE(IDD_DIALOG3), m_hwnd, DlgProcDestEdit) == IDOK) {
+ temp_list.push_back(add_edit_addr);
+
+ int index = m_list.InsertString(add_edit_addr.pszLabel, -1, (LPARAM)&temp_list.back());
+ m_list.SetCurSel(index);
+
+ onSelChange_List(0);
+ NotifyChange();
}
- break;
-
- case WM_NOTIFY:
- if (((LPNMHDR)lParam)->code == PSN_APPLY) {
- CallService(MODULENAME "/SetAndSavePingList", (WPARAM)&temp_list, 0);
- CallService(MODULENAME "/GetPingList", 0, (LPARAM)&temp_list);
- // the following will be affected due to list rebuild event
- //if(hWakeEvent) SetEvent(hWakeEvent);
- return TRUE;
+ }
+
+ void onClick_Remove(CCtrlButton *)
+ {
+ int sel = m_list.GetCurSel();
+ if (sel != LB_ERR) {
+ PINGADDRESS *item = (PINGADDRESS *)m_list.GetItemData(sel);
+ m_list.DeleteString(sel);
+ temp_list.remove(*item);
}
- break;
+ btnEdit.Disable();
+ btnRemove.Disable();
+ btnDown.Disable();
+ btnUp.Disable();
+
+ NotifyChange();
+ RefreshWindow();
}
- return FALSE;
-}
+
+ void onClick_Down(CCtrlButton *)
+ {
+ int sel2 = m_list.GetCurSel();
+ if (sel2 == LB_ERR)
+ return;
+
+ PINGADDRESS *item = (PINGADDRESS *)m_list.GetItemData(sel2), *item2 = (PINGADDRESS *)m_list.GetItemData(sel2 + 1);
+ if (item && item2) {
+ add_edit_addr = *item;
+ *item = *item2;
+ *item2 = add_edit_addr;
+
+ // keep indexes the same, as they're used for sorting the binary tree
+ int index = item->index, index2 = item2->index;
+ item->index = index2;
+ item2->index = index;
+
+ m_list.DeleteString(sel2);
+ m_list.InsertString(item->pszLabel, sel2, (LPARAM)item);
+
+ m_list.DeleteString(sel2 + 1);
+ m_list.InsertString(item2->pszLabel, sel2 + 1, (LPARAM)item2);
+
+ m_list.SetCurSel(sel2 + 1);
+
+ btnUp.Enable(sel2 + 1 > 0);
+ btnDown.Enable(sel2 + 1 < m_list.GetCount() - 1);
+ NotifyChange();
+ }
+ }
+
+ void onClick_Up(CCtrlButton *)
+ {
+ int sel2 = SendDlgItemMessage(m_hwnd, IDC_LST_DEST, LB_GETCURSEL, 0, 0);
+ if (sel2 == LB_ERR)
+ return;
+
+ PINGADDRESS *item = (PINGADDRESS *)m_list.GetItemData(sel2), *item2 = (PINGADDRESS *)m_list.GetItemData(sel2 - 1);
+ if (item && item2) {
+ add_edit_addr = *item;
+ *item = *item2;
+ *item2 = add_edit_addr;
+
+ // keep indexes the same, as they're used for sorting the binary tree
+ int index = item->index, index2 = item2->index;
+ item->index = index2;
+ item2->index = index;
+
+ m_list.DeleteString(sel2);
+ m_list.InsertString(item->pszLabel, sel2, (LPARAM)item);
+
+ m_list.DeleteString(sel2 - 1);
+ m_list.InsertString(item2->pszLabel, sel2 - 1, (LPARAM)item2);
+
+ m_list.SetCurSel(sel2 - 1);
+
+ btnUp.Enable(sel2 - 1 > 0);
+ btnDown.Enable(sel2 - 1 < m_list.GetCount() - 1);
+ NotifyChange();
+ }
+ }
+};
int PingOptInit(WPARAM wParam, LPARAM)
{
@@ -485,13 +453,11 @@ int PingOptInit(WPARAM wParam, LPARAM)
odp.szTitle.w = LPGENW("Ping");
odp.szTab.w = LPGENW("Settings");
- odp.pszTemplate = MAKEINTRESOURCEA(IDD_DIALOG1);
- odp.pfnDlgProc = DlgProcOpts;
+ odp.pDialog = new CMainOptsDlg();
g_plugin.addOptions(wParam, &odp);
odp.szTab.w = LPGENW("Hosts");
- odp.pszTemplate = MAKEINTRESOURCEA(IDD_DIALOG2);
- odp.pfnDlgProc = DlgProcOpts2;
+ odp.pDialog = new CHostOptsDlg();
g_plugin.addOptions(wParam, &odp);
return 0;
}
@@ -501,7 +467,6 @@ void LoadOptions()
options.ping_period = g_plugin.getDword("PingPeriod", DEFAULT_PING_PERIOD);
options.ping_timeout = g_plugin.getDword("PingTimeout", DEFAULT_PING_TIMEOUT);
- CallService(MODULENAME "/SetPingTimeout", (WPARAM)options.ping_timeout, 0);
options.show_popup = (g_plugin.getByte("ShowPopup", DEFAULT_SHOW_POPUP ? 1 : 0) == 1);
options.show_popup2 = (g_plugin.getByte("ShowPopup2", DEFAULT_SHOW_POPUP2 ? 1 : 0) == 1);
options.block_reps = (g_plugin.getByte("BlockReps", DEFAULT_BLOCK_REPS ? 1 : 0) == 1);
@@ -526,7 +491,7 @@ void SaveOptions()
{
g_plugin.setDword("PingPeriod", options.ping_period);
g_plugin.setDword("PingTimeout", options.ping_timeout);
- CallService(MODULENAME "/SetPingTimeout", (WPARAM)options.ping_timeout, 0);
+
g_plugin.setByte("ShowPopup", options.show_popup ? 1 : 0);
g_plugin.setByte("ShowPopup2", options.show_popup2 ? 1 : 0);
g_plugin.setByte("BlockReps", options.block_reps ? 1 : 0);
diff --git a/plugins/Ping/src/ping.cpp b/plugins/Ping/src/ping.cpp
index c9a63554a9..30e93614d5 100644
--- a/plugins/Ping/src/ping.cpp
+++ b/plugins/Ping/src/ping.cpp
@@ -36,13 +36,6 @@ static void CreatePluginServices()
CreateServiceFunction(MODULENAME "/DblClick", DblClick);
// list
- CreateServiceFunction(MODULENAME "/ClearPingList", ClearPingList);
- CreateServiceFunction(MODULENAME "/GetPingList", GetPingList);
- CreateServiceFunction(MODULENAME "/SetPingList", SetPingList);
- CreateServiceFunction(MODULENAME "/SetAndSavePingList", SetAndSavePingList);
- CreateServiceFunction(MODULENAME "/LoadPingList", LoadPingList);
- CreateServiceFunction(MODULENAME "/SavePingList", SavePingList);
-
reload_event_handle = CreateHookableEvent(MODULENAME "/ListReload");
//log
@@ -95,7 +88,7 @@ static int OnModulesLoaded(WPARAM, LPARAM)
InitList();
- CallService(MODULENAME "/LoadPingList", 0, 0);
+ LoadPingList();
graphs_init();
@@ -139,7 +132,7 @@ int CMPlugin::Load()
int CMPlugin::Unload()
{
- SavePingList(0, 0);
+ SavePingList();
Log(L"stop");
return 0;
diff --git a/plugins/Ping/src/pinggraph.cpp b/plugins/Ping/src/pinggraph.cpp
index 68850b73bd..a3130faccd 100644
--- a/plugins/Ping/src/pinggraph.cpp
+++ b/plugins/Ping/src/pinggraph.cpp
@@ -26,8 +26,8 @@ LRESULT CALLBACK GraphWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPar
{
bool found = false;
mir_cslock lck(data_list_cs);
- for (pinglist_it i = data_list.begin(); i != data_list.end(); ++i) {
- if (i->item_id == wd->item_id) {
+ for (auto &it : data_list) {
+ if (it.item_id == wd->item_id) {
wd->list = history_map[wd->item_id];
found = true;
break;
@@ -284,7 +284,7 @@ INT_PTR ShowGraph(WPARAM wParam, LPARAM lParam)
// save window positions, close windows
void graphs_cleanup()
{
- int list_size = GetListSize(0, 0);
+ int list_size = GetListSize();
char buff[64];
HWND hwnd;
@@ -303,15 +303,17 @@ void graphs_cleanup()
void graphs_init()
{
PINGLIST pl;
- char buff[64];
- CallService(MODULENAME "/GetPingList", 0, (LPARAM)&pl);
- for (pinglist_it i = pl.begin(); i != pl.end(); ++i) {
- mir_snprintf(buff, "WindowHandle%d", i->item_id); // clean up from possible crash
+ GetPingList(pl);
+
+ for (auto &it : pl) {
+ char buff[64];
+ mir_snprintf(buff, "WindowHandle%d", it.item_id); // clean up from possible crash
g_plugin.setDword(buff, 0);
- mir_snprintf(buff, "WindowWasOpen%d", i->item_id); // restore windows that were open on shutdown
+
+ mir_snprintf(buff, "WindowWasOpen%d", it.item_id); // restore windows that were open on shutdown
if (g_plugin.getByte(buff, 0)) {
g_plugin.setByte(buff, 0);
- ShowGraph((WPARAM)i->item_id, (LPARAM)i->pszLabel);
+ ShowGraph(it.item_id, (LPARAM)it.pszLabel);
}
}
}
diff --git a/plugins/Ping/src/pinglist.cpp b/plugins/Ping/src/pinglist.cpp
index d10a51174a..3d62301a8b 100644
--- a/plugins/Ping/src/pinglist.cpp
+++ b/plugins/Ping/src/pinglist.cpp
@@ -28,26 +28,6 @@ const bool PINGADDRESS::operator<(const PINGADDRESS &b) const
return index < b.index;
}
-// lParam is address of pointer to a std::list<PINGADDRESS>
-// copies data into this structure
-INT_PTR GetPingList(WPARAM, LPARAM lParam)
-{
- PINGLIST *pa = (PINGLIST *)lParam;
-
- mir_cslock lck(list_cs);
- *pa = list_items;
-
- return 0;
-}
-
-INT_PTR GetListSize(WPARAM, LPARAM)
-{
- INT_PTR ret = 0;
- mir_cslock lck(list_cs);
- ret = list_items.size();
- return ret;
-}
-
void write_ping_address(PINGADDRESS &i)
{
char buff[16];
@@ -81,9 +61,9 @@ void write_ping_address(PINGADDRESS &i)
void write_ping_addresses()
{
int index = 0;
- for (pinglist_it i = list_items.begin(); i != list_items.end(); ++i, index++) {
- i->index = index;
- write_ping_address(*i);
+ for (auto &it : list_items) {
+ it.index = index;
+ write_ping_address(it);
}
// mark further destinations in the DB as invalid
@@ -177,59 +157,60 @@ void read_ping_addresses()
}
}
-INT_PTR LoadPingList(WPARAM, LPARAM)
+/////////////////////////////////////////////////////////////////////////////////////////
+// copies data into this structure
+
+void GetPingList(PINGLIST &list)
{
mir_cslock lck(list_cs);
- read_ping_addresses();
- NotifyEventHooks(reload_event_handle, 0, 0);
- return 0;
+ list = list_items;
}
-// wParam is zero
-// lParam is zero
-INT_PTR SavePingList(WPARAM, LPARAM)
+int GetListSize()
{
mir_cslock lck(list_cs);
- write_ping_addresses();
-
- return 0;
+ return (int)list_items.size();
}
-// wParam is address of a PINGLIST structure to replace the current one
-// lParam is zero
-INT_PTR SetPingList(WPARAM wParam, LPARAM)
+void LoadPingList()
{
- PINGLIST *pli = (PINGLIST *)wParam;
-
- mir_cslock lck(list_cs);
- list_items = *pli;
+ { mir_cslock lck(list_cs);
+ read_ping_addresses();
+ }
+
NotifyEventHooks(reload_event_handle, 0, 0);
-
- return 0;
}
-// wParam is address of a PINGLIST structure to replace the current one
-// lParam is zero
-INT_PTR SetAndSavePingList(WPARAM wParam, LPARAM)
+void SavePingList()
{
- PINGLIST *pli = (PINGLIST *)wParam;
-
mir_cslock lck(list_cs);
-
- // set new list
- list_items = *pli;
write_ping_addresses();
+}
+
+void SetPingList(const PINGLIST &list)
+{
+ { mir_cslock lck(list_cs);
+ list_items = list;
+ }
NotifyEventHooks(reload_event_handle, 0, 0);
+}
+
+void SetAndSavePingList(const PINGLIST &list)
+{
+ { mir_cslock lck(list_cs);
+ list_items = list;
+ write_ping_addresses();
+ }
- return 0;
+ NotifyEventHooks(reload_event_handle, 0, 0);
}
-INT_PTR ClearPingList(WPARAM, LPARAM)
+void ClearPingList()
{
- mir_cslock lck(list_cs);
- list_items.clear();
+ { mir_cslock lck(list_cs);
+ list_items.clear();
+ }
NotifyEventHooks(reload_event_handle, 0, 0);
- return 0;
}
diff --git a/plugins/Ping/src/pinglist.h b/plugins/Ping/src/pinglist.h
index b01dcd4a17..0b9bfe15b8 100644
--- a/plugins/Ping/src/pinglist.h
+++ b/plugins/Ping/src/pinglist.h
@@ -1,18 +1,49 @@
#ifndef _PINGLIST_H
#define _PINGLIST_H
-INT_PTR LoadPingList(WPARAM wParam, LPARAM lParam);
-INT_PTR GetPingList(WPARAM wParam, LPARAM lParam);
-INT_PTR SavePingList(WPARAM wParam, LPARAM lParam);
-INT_PTR SetPingList(WPARAM wParam, LPARAM lParam); // use when you modified db yourself
-INT_PTR SetAndSavePingList(WPARAM wParam, LPARAM lParam);
-INT_PTR ClearPingList(WPARAM wParam, LPARAM lParam);
-INT_PTR GetListSize(WPARAM wParam, LPARAM lParam);
+#define PS_RESPONDING 1
+#define PS_NOTRESPONDING 2
+#define PS_TESTING 3
+#define PS_DISABLED 4
+
+#define MAX_PINGADDRESS_STRING_LENGTH 256
+
+struct PINGADDRESS
+{
+ int cbSize; //size in bytes of this structure
+ uint32_t item_id;
+ wchar_t pszName[MAX_PINGADDRESS_STRING_LENGTH]; //IP address or domain name
+ wchar_t pszLabel[MAX_PINGADDRESS_STRING_LENGTH];
+ bool responding;
+ int status;
+ short round_trip_time;
+ int miss_count;
+ int port; // -1 for ICMP, non-zero for TCP
+ char pszProto[MAX_PINGADDRESS_STRING_LENGTH];
+ wchar_t pszCommand[MAX_PATH];
+ wchar_t pszParams[MAX_PATH];
+ unsigned int get_status; // on success, if status equals this
+ unsigned int set_status; // set it to this
+ int index;
+
+ const bool operator==(const PINGADDRESS &b) const;
+ const bool operator<(const PINGADDRESS &b) const;
+};
+
+typedef std::list<PINGADDRESS> PINGLIST;
+typedef std::list<PINGADDRESS>::iterator pinglist_it;
+
+void ClearPingList(void);
+int GetListSize(void);
+void GetPingList(PINGLIST &list);
+void LoadPingList(void);
+void SavePingList(void);
+void SetPingList(const PINGLIST &list); // use when you modified db yourself
+void SetAndSavePingList(const PINGLIST &list);
// only call with list_cs locked!
void write_ping_addresses();
-
BOOL changing_clist_handle();
void set_changing_clist_handle(BOOL flag);
#endif
diff --git a/plugins/Ping/src/pingthread.cpp b/plugins/Ping/src/pingthread.cpp
index c4f8ebb6e4..f8ad707c81 100644
--- a/plugins/Ping/src/pingthread.cpp
+++ b/plugins/Ping/src/pingthread.cpp
@@ -105,20 +105,25 @@ void __cdecl sttCheckStatusThreadProc(void *)
{
mir_cslock lck(data_list_cs);
size_t c = 0;
- for (pinglist_it i = data_list.begin(); i != data_list.end() && c <= index; ++i, c++) {
+ for (auto &it : data_list) {
+ if (c > index)
+ break;
+
if (c == index) {
// copy just what we need - i.e. not history, not command
- pa.get_status = i->get_status;
- pa.item_id = i->item_id;
- pa.miss_count = i->miss_count;
- pa.port = i->port;
- mir_wstrncpy(pa.pszLabel, i->pszLabel, _countof(pa.pszLabel));
- mir_wstrncpy(pa.pszName, i->pszName, _countof(pa.pszName));
- mir_strncpy(pa.pszProto, i->pszProto, _countof(pa.pszProto));
- pa.set_status = i->set_status;
- pa.status = i->status;
+ pa.get_status = it.get_status;
+ pa.item_id = it.item_id;
+ pa.miss_count = it.miss_count;
+ pa.port = it.port;
+ mir_wstrncpy(pa.pszLabel, it.pszLabel, _countof(pa.pszLabel));
+ mir_wstrncpy(pa.pszName, it.pszName, _countof(pa.pszName));
+ mir_strncpy(pa.pszProto, it.pszProto, _countof(pa.pszProto));
+ pa.set_status = it.set_status;
+ pa.status = it.status;
break;
}
+
+ c++;
}
}
@@ -128,9 +133,9 @@ void __cdecl sttCheckStatusThreadProc(void *)
if (pa.status != PS_DISABLED) {
if (!options.no_test_icon) {
mir_cslock lck(data_list_cs);
- for (pinglist_it i = data_list.begin(); i != data_list.end(); ++i)
- if (i->item_id == pa.item_id)
- i->status = PS_TESTING;
+ for (auto &it : data_list)
+ if (it.item_id == pa.item_id)
+ it.status = PS_TESTING;
InvalidateRect(list_hwnd, nullptr, FALSE);
}
@@ -143,17 +148,17 @@ void __cdecl sttCheckStatusThreadProc(void *)
{
mir_cslock lck(data_list_cs);
- for (pinglist_it i = data_list.begin(); i != data_list.end(); ++i) {
- if (i->item_id == pa.item_id) {
- i->responding = pa.responding;
- i->round_trip_time = pa.round_trip_time;
- history_entry.first = i->round_trip_time;
+ for (auto &it : data_list) {
+ if (it.item_id == pa.item_id) {
+ it.responding = pa.responding;
+ it.round_trip_time = pa.round_trip_time;
+ history_entry.first = it.round_trip_time;
history_entry.second = time(0);
- history_map[i->item_id].push_back(history_entry);
+ history_map[it.item_id].push_back(history_entry);
// maintain history (-1 represents no response)
- while (history_map[i->item_id].size() >= MAX_HISTORY)
- //history_map[i->item_id].pop_front();
- history_map[i->item_id].remove(history_map[i->item_id].begin().val());
+ while (history_map[it.item_id].size() >= MAX_HISTORY)
+ //history_map[it.item_id].pop_front();
+ history_map[it.item_id].remove(history_map[it.item_id].begin().val());
if (pa.responding) {
if (pa.miss_count > 0)
@@ -170,9 +175,8 @@ void __cdecl sttCheckStatusThreadProc(void *)
pa.status = PS_NOTRESPONDING;
}
- i->miss_count = pa.miss_count;
- i->status = pa.status;
-
+ it.miss_count = pa.miss_count;
+ it.status = pa.status;
break;
}
}
@@ -237,7 +241,7 @@ int FillList(WPARAM, LPARAM)
Log(L"ping address list reload");
PINGLIST pl;
- CallService(MODULENAME "/GetPingList", 0, (LPARAM)&pl);
+ GetPingList(pl);
SendMessage(list_hwnd, WM_SETREDRAW, FALSE, 0);
{
@@ -622,7 +626,7 @@ LRESULT CALLBACK FrameWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPar
if (Edit(hwnd, itemData)) {
mir_cslock lck(data_list_cs);
*temp = itemData;
- CallService(MODULENAME "/SetAndSavePingList", (WPARAM)&data_list, 0);
+ SetAndSavePingList(data_list);
}
}
}
@@ -730,14 +734,13 @@ int ReloadFont(WPARAM, LPARAM)
SendMessage(list_hwnd, WM_SETFONT, (WPARAM)hFont, TRUE);
bk_col = Colour_GetW(bk_col_id);
- RefreshWindow(0, 0);
+ RefreshWindow();
return 0;
}
-int RefreshWindow(WPARAM, LPARAM)
+int RefreshWindow()
{
- InvalidateRect(list_hwnd, nullptr, TRUE);
- InvalidateRect(hpwnd, nullptr, TRUE);
+ SendMessageW(hpwnd, WM_SIZE, 0, 0);
return 0;
}
diff --git a/plugins/Ping/src/pingthread.h b/plugins/Ping/src/pingthread.h
index 37b50e308c..dc68a25a30 100644
--- a/plugins/Ping/src/pingthread.h
+++ b/plugins/Ping/src/pingthread.h
@@ -3,7 +3,7 @@
int FillList(WPARAM wParam, LPARAM lParam);
-int RefreshWindow(WPARAM wParam, LPARAM lParam);
+int RefreshWindow();
void UpdateFrame();
void AttachToClist(bool attach);
diff --git a/plugins/Ping/src/stdafx.h b/plugins/Ping/src/stdafx.h
index 7dfa5e5b09..180135f0e8 100644
--- a/plugins/Ping/src/stdafx.h
+++ b/plugins/Ping/src/stdafx.h
@@ -51,8 +51,6 @@
#define DEFAULT_NO_TEST_ICON true
#define DEFAULT_ATTACH_TO_CLIST false
-#define MAX_PINGADDRESS_STRING_LENGTH 256
-
struct CMPlugin : public PLUGIN<CMPlugin>
{
CMPlugin();
@@ -82,38 +80,9 @@ struct HistPair {
};
typedef LinkedList< HistPair > HistoryList;
-
-#define PS_RESPONDING 1
-#define PS_NOTRESPONDING 2
-#define PS_TESTING 3
-#define PS_DISABLED 4
-
-struct PINGADDRESS {
- int cbSize; //size in bytes of this structure
- uint32_t item_id;
- wchar_t pszName[MAX_PINGADDRESS_STRING_LENGTH]; //IP address or domain name
- wchar_t pszLabel[MAX_PINGADDRESS_STRING_LENGTH];
- bool responding;
- int status;
- short round_trip_time;
- int miss_count;
- int port; // -1 for ICMP, non-zero for TCP
- char pszProto[MAX_PINGADDRESS_STRING_LENGTH];
- wchar_t pszCommand[MAX_PATH];
- wchar_t pszParams[MAX_PATH];
- unsigned int get_status; // on success, if status equals this
- unsigned int set_status; // set it to this
- int index;
-
- const bool operator==(const PINGADDRESS &b) const;
- const bool operator<(const PINGADDRESS &b) const;
-};
-
#include "options.h"
typedef Map<uint32_t, HistoryList> HistoryMap;
-typedef std::list<PINGADDRESS> PINGLIST;
-typedef std::list<PINGADDRESS>::iterator pinglist_it;
extern HNETLIBUSER hNetlibUser;
diff --git a/plugins/Ping/src/utils.cpp b/plugins/Ping/src/utils.cpp
index 3eedce7b9e..cf263026b5 100644
--- a/plugins/Ping/src/utils.cpp
+++ b/plugins/Ping/src/utils.cpp
@@ -3,10 +3,9 @@
LRESULT CALLBACK NullWindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) {
- case WM_COMMAND: {
+ case WM_COMMAND:
PUDeletePopup(hWnd);
break;
- }
case WM_CONTEXTMENU:
PUDeletePopup(hWnd);
@@ -32,7 +31,6 @@ void __stdcall ShowPopup(wchar_t *line1, wchar_t *line2, int)
INT_PTR PluginPing(WPARAM, LPARAM lParam)
{
PINGADDRESS *pa = (PINGADDRESS *)lParam;
-
if (pa->port == -1) {
// ICMP echo
if (use_raw_ping) {
@@ -61,7 +59,7 @@ INT_PTR PluginPing(WPARAM, LPARAM lParam)
conn.timeout = options.ping_timeout;
HNETLIBCONN s = Netlib_OpenConnection(hNetlibUser, &conn);
- mir_free((void*)conn.szHost);
+ mir_free((void *)conn.szHost);
clock_t end_tcp = clock();
@@ -101,65 +99,66 @@ INT_PTR PluginPing(WPARAM, LPARAM lParam)
return 0;
}
-INT_PTR PingDisableAll(WPARAM, LPARAM) {
+INT_PTR PingDisableAll(WPARAM, LPARAM)
+{
PINGLIST pl;
- CallService(MODULENAME "/GetPingList", 0, (LPARAM)&pl);
- for (pinglist_it i = pl.begin(); i != pl.end(); ++i) {
- i->status = PS_DISABLED;
- i->miss_count = 0;
+ GetPingList(pl);
+
+ for (auto &it: pl) {
+ it.status = PS_DISABLED;
+ it.miss_count = 0;
}
- CallService(MODULENAME "/SetPingList", (WPARAM)&pl, 0);
+ SetPingList(pl);
return 0;
}
-INT_PTR PingEnableAll(WPARAM, LPARAM) {
+INT_PTR PingEnableAll(WPARAM, LPARAM)
+{
PINGLIST pl;
- CallService(MODULENAME "/GetPingList", 0, (LPARAM)&pl);
- for (pinglist_it i = pl.begin(); i != pl.end(); ++i) {
- if (i->status == PS_DISABLED) {
- i->status = PS_NOTRESPONDING;
- }
- }
- CallService(MODULENAME "/SetPingList", (WPARAM)&pl, 0);
+ GetPingList(pl);
+
+ for (auto &it : pl)
+ if (it.status == PS_DISABLED)
+ it.status = PS_NOTRESPONDING;
+
+ SetPingList(pl);
return 0;
}
-INT_PTR ToggleEnabled(WPARAM wParam, LPARAM) {
- int retval = 0;
+INT_PTR ToggleEnabled(WPARAM wParam, LPARAM)
+{
PINGLIST pl;
- CallService(MODULENAME "/GetPingList", 0, (LPARAM)&pl);
- for (pinglist_it i = pl.begin(); i != pl.end(); ++i) {
- if (i->item_id == (uint32_t)wParam) {
+ GetPingList(pl);
- if (i->status == PS_DISABLED)
- i->status = PS_NOTRESPONDING;
+ for (auto &it : pl) {
+ if (it.item_id == (uint32_t)wParam) {
+
+ if (it.status == PS_DISABLED)
+ it.status = PS_NOTRESPONDING;
else {
- i->status = PS_DISABLED;
- i->miss_count = 0;
- retval = 1;
+ it.status = PS_DISABLED;
+ it.miss_count = 0;
}
}
}
- CallService(MODULENAME "/SetPingList", (WPARAM)&pl, 0);
+ SetPingList(pl);
return 0;
}
INT_PTR EditContact(WPARAM wParam, LPARAM)
{
PINGLIST pl;
- HWND hwndList = g_clistApi.hwndContactList;
+ GetPingList(pl);
- CallService(MODULENAME "/GetPingList", 0, (LPARAM)&pl);
- for (pinglist_it i = pl.begin(); i != pl.end(); ++i) {
- if (i->item_id == (uint32_t)wParam) {
-
- add_edit_addr = *i;
+ HWND hwndList = g_clistApi.hwndContactList;
+ for (auto &it : pl) {
+ if (it.item_id == (uint32_t)wParam) {
+ add_edit_addr = it;
if (DialogBox(g_plugin.getInst(), MAKEINTRESOURCE(IDD_DIALOG3), hwndList, DlgProcDestEdit) == IDOK) {
-
- *i = add_edit_addr;
- CallService(MODULENAME "/SetAndSavePingList", (WPARAM)&pl, 0);
+ it = add_edit_addr;
+ SetAndSavePingList(pl);
return 0;
}
}
@@ -167,13 +166,15 @@ INT_PTR EditContact(WPARAM wParam, LPARAM)
return 1;
}
-INT_PTR DblClick(WPARAM wParam, LPARAM) {
+INT_PTR DblClick(WPARAM wParam, LPARAM)
+{
PINGLIST pl;
- CallService(MODULENAME "/GetPingList", 0, (LPARAM)&pl);
- for (pinglist_it i = pl.begin(); i != pl.end(); ++i) {
- if (i->item_id == (uint32_t)wParam) {
- if (mir_wstrlen(i->pszCommand)) {
- ShellExecute(nullptr, L"open", i->pszCommand, i->pszParams, nullptr, SW_SHOW);
+ GetPingList(pl);
+
+ for (auto &it : pl) {
+ if (it.item_id == (uint32_t)wParam) {
+ if (mir_wstrlen(it.pszCommand)) {
+ ShellExecute(nullptr, L"open", it.pszCommand, it.pszParams, nullptr, SW_SHOW);
}
else {
return CallService(MODULENAME "/ToggleEnabled", wParam, 0);
@@ -183,8 +184,8 @@ INT_PTR DblClick(WPARAM wParam, LPARAM) {
return 0;
}
-
-void import_ping_address(int index, PINGADDRESS &pa) {
+void import_ping_address(int index, PINGADDRESS &pa)
+{
DBVARIANT dbv;
char buf[256];
mir_snprintf(buf, "Address%d", index);
@@ -192,16 +193,14 @@ void import_ping_address(int index, PINGADDRESS &pa) {
mir_wstrncpy(pa.pszName, dbv.pwszVal, _countof(pa.pszName));
db_free(&dbv);
}
- else
- mir_wstrncpy(pa.pszName, TranslateT("Unknown Address"), _countof(pa.pszName));
+ else mir_wstrncpy(pa.pszName, TranslateT("Unknown Address"), _countof(pa.pszName));
mir_snprintf(buf, "Label%d", index);
if (!db_get_ws(0, "PingPlug", buf, &dbv)) {
mir_wstrncpy(pa.pszLabel, dbv.pwszVal, _countof(pa.pszLabel));
db_free(&dbv);
}
- else
- mir_wstrncpy(pa.pszLabel, TranslateT("Unknown"), _countof(pa.pszLabel));
+ else mir_wstrncpy(pa.pszLabel, TranslateT("Unknown"), _countof(pa.pszLabel));
mir_snprintf(buf, "Port%d", index);
pa.port = (int)db_get_dw(0, "PingPlug", buf, -1);
@@ -215,9 +214,7 @@ void import_ping_address(int index, PINGADDRESS &pa) {
mir_snprintf(buf, "Status2%d", index);
pa.get_status = db_get_w(0, "PingPlug", buf, ID_STATUS_OFFLINE);
}
- else
- pa.pszProto[0] = '\0';
-
+ else pa.pszProto[0] = '\0';
pa.responding = false;
pa.round_trip_time = 0;
@@ -242,8 +239,7 @@ void import_ping_addresses()
mir_cslock lck(list_cs);
list_items.clear();
- for (int index = 0; index < count; index++)
- {
+ for (int index = 0; index < count; index++) {
import_ping_address(index, pa);
list_items.push_back(pa);
}
@@ -266,7 +262,7 @@ int ReloadIcons(WPARAM, LPARAM)
hIconTesting = IcoLib_GetIcon("ping_testing");
hIconDisabled = IcoLib_GetIcon("ping_disabled");
- RefreshWindow(0, 0);
+ RefreshWindow();
return 0;
}