-rw-r--r-- | DipstickDlg.cpp | 62 |
1 files changed, 52 insertions, 10 deletions
diff --git a/DipstickDlg.cpp b/DipstickDlg.cpp index ace2aff..f27b219 100644 --- a/DipstickDlg.cpp +++ b/DipstickDlg.cpp | |||
@@ -1,521 +1,524 @@ | |||
1 | // DipstickDlg.cpp : implementation file | 1 | // DipstickDlg.cpp : implementation file |
2 | // | 2 | // |
3 | 3 | ||
4 | #include "stdafx.h" | 4 | #include "stdafx.h" |
5 | #include "Dipstick.h" | 5 | #include "Dipstick.h" |
6 | #include "DipstickDlg.h" | 6 | #include "DipstickDlg.h" |
7 | #include "DragPad.h" | 7 | #include "DragPad.h" |
8 | #include "OptionsDlg.h" | 8 | #include "OptionsDlg.h" |
9 | #include "HostNameDlg.h" | 9 | #include "HostNameDlg.h" |
10 | #include "HostProperties.h" | 10 | #include "HostProperties.h" |
11 | #include "AutoBestDlg.h" | 11 | #include "AutoBestDlg.h" |
12 | #include "ddeml.h" | 12 | #include "ddeml.h" |
13 | 13 | ||
14 | #include "URLSource.h" | 14 | #include "URLSource.h" |
15 | #include "SelectURLsDlg.h" | 15 | #include "SelectURLsDlg.h" |
16 | 16 | ||
17 | #ifdef _DEBUG | 17 | #ifdef _DEBUG |
18 | #define new DEBUG_NEW | 18 | #define new DEBUG_NEW |
19 | #undef THIS_FILE | 19 | #undef THIS_FILE |
20 | static char THIS_FILE[] = __FILE__; | 20 | static char THIS_FILE[] = __FILE__; |
21 | #endif | 21 | #endif |
22 | 22 | ||
23 | ///////////////////////////////////////////////////////////////////////////// | 23 | ///////////////////////////////////////////////////////////////////////////// |
24 | // CAboutDlg dialog used for App About | 24 | // CAboutDlg dialog used for App About |
25 | 25 | ||
26 | class CAboutDlg : public CDialog | 26 | class CAboutDlg : public CDialog |
27 | { | 27 | { |
28 | public: | 28 | public: |
29 | CAboutDlg(); | 29 | CAboutDlg(); |
30 | 30 | ||
31 | // Dialog Data | 31 | // Dialog Data |
32 | //{{AFX_DATA(CAboutDlg) | 32 | //{{AFX_DATA(CAboutDlg) |
33 | enum { IDD = IDD_ABOUTBOX }; | 33 | enum { IDD = IDD_ABOUTBOX }; |
34 | //}}AFX_DATA | 34 | //}}AFX_DATA |
35 | 35 | ||
36 | // ClassWizard generated virtual function overrides | 36 | // ClassWizard generated virtual function overrides |
37 | //{{AFX_VIRTUAL(CAboutDlg) | 37 | //{{AFX_VIRTUAL(CAboutDlg) |
38 | protected: | 38 | protected: |
39 | virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support | 39 | virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support |
40 | //}}AFX_VIRTUAL | 40 | //}}AFX_VIRTUAL |
41 | 41 | ||
42 | // Implementation | 42 | // Implementation |
43 | protected: | 43 | protected: |
44 | virtual BOOL OnInitDialog(); | 44 | virtual BOOL OnInitDialog(); |
45 | //{{AFX_MSG(CAboutDlg) | 45 | //{{AFX_MSG(CAboutDlg) |
46 | afx_msg void OnKlevernet(); | 46 | afx_msg void OnKlevernet(); |
47 | //}}AFX_MSG | 47 | //}}AFX_MSG |
48 | DECLARE_MESSAGE_MAP() | 48 | DECLARE_MESSAGE_MAP() |
49 | }; | 49 | }; |
50 | 50 | ||
51 | CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) | 51 | CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) |
52 | { | 52 | { |
53 | //{{AFX_DATA_INIT(CAboutDlg) | 53 | //{{AFX_DATA_INIT(CAboutDlg) |
54 | //}}AFX_DATA_INIT | 54 | //}}AFX_DATA_INIT |
55 | } | 55 | } |
56 | 56 | ||
57 | void CAboutDlg::DoDataExchange(CDataExchange* pDX) | 57 | void CAboutDlg::DoDataExchange(CDataExchange* pDX) |
58 | { | 58 | { |
59 | CDialog::DoDataExchange(pDX); | 59 | CDialog::DoDataExchange(pDX); |
60 | //{{AFX_DATA_MAP(CAboutDlg) | 60 | //{{AFX_DATA_MAP(CAboutDlg) |
61 | //}}AFX_DATA_MAP | 61 | //}}AFX_DATA_MAP |
62 | } | 62 | } |
63 | 63 | ||
64 | BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) | 64 | BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) |
65 | //{{AFX_MSG_MAP(CAboutDlg) | 65 | //{{AFX_MSG_MAP(CAboutDlg) |
66 | ON_BN_CLICKED(IDC_KLEVERNET, OnKlevernet) | 66 | ON_BN_CLICKED(IDC_KLEVERNET, OnKlevernet) |
67 | //}}AFX_MSG_MAP | 67 | //}}AFX_MSG_MAP |
68 | END_MESSAGE_MAP() | 68 | END_MESSAGE_MAP() |
69 | 69 | ||
70 | ///////////////////////////////////////////////////////////////////////////// | 70 | ///////////////////////////////////////////////////////////////////////////// |
71 | // CDipstickDlg dialog | 71 | // CDipstickDlg dialog |
72 | 72 | ||
73 | CDipstickDlg::CDipstickDlg(CWnd* pParent /*=NULL*/) | 73 | CDipstickDlg::CDipstickDlg(CWnd* pParent /*=NULL*/) |
74 | : CDialog(CDipstickDlg::IDD, pParent), | 74 | : CDialog(CDipstickDlg::IDD, pParent), |
75 | m_DragPad(NULL), m_PingsPerHost(10), m_PingSize(32), m_TimeOut(5000), m_Interval(500), | 75 | m_DragPad(NULL), m_PingsPerHost(10), m_PingSize(32), m_TimeOut(5000), m_Interval(500), |
76 | m_SortCriteria(sortAvg), m_bShown(FALSE), m_MaxThreads(10), m_bExiting(FALSE), | 76 | m_SortCriteria(sortAvg), m_bShown(FALSE), m_MaxThreads(10), m_bExiting(FALSE), |
77 | m_bMSWorkAround(TRUE), m_MinSize(-1,-1), m_bAutoBest(TRUE), m_bSmartAdjust(TRUE), | 77 | m_bMSWorkAround(TRUE), m_MinSize(-1,-1), m_bAutoBest(TRUE), m_bSmartAdjust(TRUE), |
78 | m_bAdjustInnermost(TRUE), m_ActiveThreads(0), m_bIgnorelative(TRUE) | 78 | m_bAdjustInnermost(TRUE), m_ActiveThreads(0), m_bIgnorelative(TRUE) |
79 | { | 79 | { |
80 | CWinApp *app = AfxGetApp(); | 80 | CWinApp *app = AfxGetApp(); |
81 | ASSERT(app); | 81 | ASSERT(app); |
82 | WORD hi,lo; | 82 | WORD hi,lo; |
83 | hi=app->GetProfileInt("Options","IntervalHi",HIWORD(m_Interval)); | 83 | hi=app->GetProfileInt("Options","IntervalHi",HIWORD(m_Interval)); |
84 | lo=app->GetProfileInt("Options","IntervalLo",LOWORD(m_Interval)); | 84 | lo=app->GetProfileInt("Options","IntervalLo",LOWORD(m_Interval)); |
85 | m_Interval=MAKELONG(lo,hi); | 85 | m_Interval=MAKELONG(lo,hi); |
86 | m_MaxThreads=app->GetProfileInt("Options","MaxThreads",m_MaxThreads); | 86 | m_MaxThreads=app->GetProfileInt("Options","MaxThreads",m_MaxThreads); |
87 | m_PingSize=app->GetProfileInt("Options","PingSize",m_PingSize); | 87 | m_PingSize=app->GetProfileInt("Options","PingSize",m_PingSize); |
88 | m_PingsPerHost=app->GetProfileInt("Options","PingsPerHost",m_PingsPerHost); | 88 | m_PingsPerHost=app->GetProfileInt("Options","PingsPerHost",m_PingsPerHost); |
89 | m_SortCriteria=app->GetProfileInt("Options","SortBy",m_SortCriteria); | 89 | m_SortCriteria=app->GetProfileInt("Options","SortBy",m_SortCriteria); |
90 | hi=app->GetProfileInt("Options","TimeOutHi",HIWORD(m_TimeOut)); | 90 | hi=app->GetProfileInt("Options","TimeOutHi",HIWORD(m_TimeOut)); |
91 | lo=app->GetProfileInt("Options","TimeOutLo",LOWORD(m_TimeOut)); | 91 | lo=app->GetProfileInt("Options","TimeOutLo",LOWORD(m_TimeOut)); |
92 | m_TimeOut=MAKELONG(lo,hi); | 92 | m_TimeOut=MAKELONG(lo,hi); |
93 | m_bMSWorkAround = app->GetProfileInt("Options","InnermostURL",m_bMSWorkAround); | 93 | m_bMSWorkAround = app->GetProfileInt("Options","InnermostURL",m_bMSWorkAround); |
94 | m_bAutoBest = app->GetProfileInt("Options","AutoBest",m_bAutoBest); | 94 | m_bAutoBest = app->GetProfileInt("Options","AutoBest",m_bAutoBest); |
95 | m_bSmartAdjust = app->GetProfileInt("Options","SmartAdjust",m_bSmartAdjust); | 95 | m_bSmartAdjust = app->GetProfileInt("Options","SmartAdjust",m_bSmartAdjust); |
96 | m_bAdjustInnermost = app->GetProfileInt("Options","AdjustInnermost",m_bAdjustInnermost); | 96 | m_bAdjustInnermost = app->GetProfileInt("Options","AdjustInnermost",m_bAdjustInnermost); |
97 | m_bIgnorelative = app->GetProfileInt("Options","IgnoreRelative",m_bIgnorelative); | 97 | m_bIgnorelative = app->GetProfileInt("Options","IgnoreRelative",m_bIgnorelative); |
98 | m_impexPath = app->GetProfileString("Options","ImportExportPath",m_impexPath); | 98 | m_impexPath = app->GetProfileString("Options","ImportExportPath",m_impexPath); |
99 | //{{AFX_DATA_INIT(CDipstickDlg) | 99 | //{{AFX_DATA_INIT(CDipstickDlg) |
100 | //}}AFX_DATA_INIT | 100 | //}}AFX_DATA_INIT |
101 | // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 | 101 | // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 |
102 | m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); | 102 | m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); |
103 | m_bmpBack.LoadBitmap(IDB_DIABACK); | 103 | m_bmpBack.LoadBitmap(IDB_DIABACK); |
104 | m_bmpBack.GetBitmap(&m_bitmapBack); | 104 | m_bmpBack.GetBitmap(&m_bitmapBack); |
105 | CString tmp; | 105 | CString tmp; |
106 | VERIFY(tmp.LoadString(IDS_REGEX_HTMLURL)); | 106 | VERIFY(tmp.LoadString(IDS_REGEX_HTMLURL)); |
107 | VERIFY(m_reHTMLURL.Compile(tmp,CRegEx::regExtended|CRegEx::regIgnoreCase)); | 107 | VERIFY(m_reHTMLURL.Compile(tmp,CRegEx::regExtended|CRegEx::regIgnoreCase)); |
108 | VERIFY(tmp.LoadString(IDS_REGEX_URL)); | ||
109 | VERIFY(m_reURL.Compile(tmp,CRegEx::regExtended|CRegEx::regIgnoreCase)); | ||
108 | } | 110 | } |
109 | 111 | ||
110 | CDipstickDlg::~CDipstickDlg() | 112 | CDipstickDlg::~CDipstickDlg() |
111 | { | 113 | { |
112 | } | 114 | } |
113 | 115 | ||
114 | void CDipstickDlg::DoDataExchange(CDataExchange* pDX) | 116 | void CDipstickDlg::DoDataExchange(CDataExchange* pDX) |
115 | { | 117 | { |
116 | CDialog::DoDataExchange(pDX); | 118 | CDialog::DoDataExchange(pDX); |
117 | //{{AFX_DATA_MAP(CDipstickDlg) | 119 | //{{AFX_DATA_MAP(CDipstickDlg) |
118 | DDX_Control(pDX, IDC_ADVANCED, m_AdvancedCtl); | 120 | DDX_Control(pDX, IDC_ADVANCED, m_AdvancedCtl); |
119 | DDX_Control(pDX, ID_HELP, m_HelpCtl); | 121 | DDX_Control(pDX, ID_HELP, m_HelpCtl); |
120 | DDX_Control(pDX, IDC_EXIT, m_ExitCtl); | 122 | DDX_Control(pDX, IDC_EXIT, m_ExitCtl); |
121 | DDX_Control(pDX, IDC_OPTIONS, m_OptionsCtl); | 123 | DDX_Control(pDX, IDC_OPTIONS, m_OptionsCtl); |
122 | DDX_Control(pDX, IDC_MANUALPING, m_ManualPingCtl); | 124 | DDX_Control(pDX, IDC_MANUALPING, m_ManualPingCtl); |
123 | DDX_Control(pDX, IDC_REMOVE, m_RemoveCtl); | 125 | DDX_Control(pDX, IDC_REMOVE, m_RemoveCtl); |
124 | DDX_Control(pDX, IDC_REPINGALL, m_RepingAllCtl); | 126 | DDX_Control(pDX, IDC_REPINGALL, m_RepingAllCtl); |
125 | DDX_Control(pDX, IDC_REPING, m_RepingCtl); | 127 | DDX_Control(pDX, IDC_REPING, m_RepingCtl); |
126 | DDX_Control(pDX, IDC_CLEAR, m_ClearListCtl); | 128 | DDX_Control(pDX, IDC_CLEAR, m_ClearListCtl); |
127 | DDX_Control(pDX, IDC_HOSTLIST, m_HostList); | 129 | DDX_Control(pDX, IDC_HOSTLIST, m_HostList); |
128 | //}}AFX_DATA_MAP | 130 | //}}AFX_DATA_MAP |
129 | } | 131 | } |
130 | 132 | ||
131 | BEGIN_MESSAGE_MAP(CDipstickDlg, CDialog) | 133 | BEGIN_MESSAGE_MAP(CDipstickDlg, CDialog) |
132 | //{{AFX_MSG_MAP(CDipstickDlg) | 134 | //{{AFX_MSG_MAP(CDipstickDlg) |
133 | ON_WM_SYSCOMMAND() | 135 | ON_WM_SYSCOMMAND() |
134 | ON_WM_PAINT() | 136 | ON_WM_PAINT() |
135 | ON_WM_QUERYDRAGICON() | 137 | ON_WM_QUERYDRAGICON() |
136 | ON_WM_DESTROY() | 138 | ON_WM_DESTROY() |
137 | ON_BN_CLICKED(IDC_OPTIONS, OnOptions) | 139 | ON_BN_CLICKED(IDC_OPTIONS, OnOptions) |
140 | ON_MESSAGE(WM_DNP_URLSPING, OnURLSPing) | ||
138 | ON_MESSAGE(WM_DNP_URLPING, OnUrlPing) | 141 | ON_MESSAGE(WM_DNP_URLPING, OnUrlPing) |
139 | ON_MESSAGE(WM_DNP_ACTIVITYCOUNT, OnActivityCount) | 142 | ON_MESSAGE(WM_DNP_ACTIVITYCOUNT, OnActivityCount) |
140 | ON_MESSAGE(WM_DNP_UPDATEHOSTDATA, OnUpdateHostData) | 143 | ON_MESSAGE(WM_DNP_UPDATEHOSTDATA, OnUpdateHostData) |
141 | ON_MESSAGE(WM_DNP_HTML, OnHTMLTransfer) | 144 | ON_MESSAGE(WM_DNP_HTML, OnHTMLTransfer) |
142 | ON_NOTIFY(LVN_COLUMNCLICK, IDC_HOSTLIST, OnColumnclickHostlist) | 145 | ON_NOTIFY(LVN_COLUMNCLICK, IDC_HOSTLIST, OnColumnclickHostlist) |
143 | ON_WM_WINDOWPOSCHANGING() | 146 | ON_WM_WINDOWPOSCHANGING() |
144 | ON_COMMAND(ID_DRAGPAD_OPTIONS, OnDragpadOptions) | 147 | ON_COMMAND(ID_DRAGPAD_OPTIONS, OnDragpadOptions) |
145 | ON_COMMAND(ID_DRAGPAD_SHOWMAINWINDOW, OnDragpadShowmainwindow) | 148 | ON_COMMAND(ID_DRAGPAD_SHOWMAINWINDOW, OnDragpadShowmainwindow) |
146 | ON_COMMAND(ID_DRAGPAD_HELP, OnDragpadHelp) | 149 | ON_COMMAND(ID_DRAGPAD_HELP, OnDragpadHelp) |
147 | ON_COMMAND(ID_DRAGPAD_ABOUT, OnDragpadAbout) | 150 | ON_COMMAND(ID_DRAGPAD_ABOUT, OnDragpadAbout) |
148 | ON_COMMAND(ID_DRAGPAD_EXIT, OnDragpadExit) | 151 | ON_COMMAND(ID_DRAGPAD_EXIT, OnDragpadExit) |
149 | ON_BN_CLICKED(IDC_MANUALPING, OnManualping) | 152 | ON_BN_CLICKED(IDC_MANUALPING, OnManualping) |
150 | ON_COMMAND(ID_DRAGPAD_MANUALPING, OnDragpadManualping) | 153 | ON_COMMAND(ID_DRAGPAD_MANUALPING, OnDragpadManualping) |
151 | ON_COMMAND(ID_DRAGPAD_REPINGALL, OnDragpadRepingAll) | 154 | ON_COMMAND(ID_DRAGPAD_REPINGALL, OnDragpadRepingAll) |
152 | ON_COMMAND(ID_DRAGPAD_REMOVEALL, OnDragpadRemoveAll) | 155 | ON_COMMAND(ID_DRAGPAD_REMOVEALL, OnDragpadRemoveAll) |
153 | ON_BN_CLICKED(IDC_REPING, OnReping) | 156 | ON_BN_CLICKED(IDC_REPING, OnReping) |
154 | ON_BN_CLICKED(IDC_REPINGALL, OnRepingall) | 157 | ON_BN_CLICKED(IDC_REPINGALL, OnRepingall) |
155 | ON_BN_CLICKED(IDC_CLEAR, OnClear) | 158 | ON_BN_CLICKED(IDC_CLEAR, OnClear) |
156 | ON_NOTIFY(LVN_INSERTITEM, IDC_HOSTLIST, OnInsertitemHostlist) | 159 | ON_NOTIFY(LVN_INSERTITEM, IDC_HOSTLIST, OnInsertitemHostlist) |
157 | ON_NOTIFY(LVN_DELETEITEM, IDC_HOSTLIST, OnDeleteitemHostlist) | 160 | ON_NOTIFY(LVN_DELETEITEM, IDC_HOSTLIST, OnDeleteitemHostlist) |
158 | ON_NOTIFY(LVN_DELETEALLITEMS, IDC_HOSTLIST, OnDeleteallitemsHostlist) | 161 | ON_NOTIFY(LVN_DELETEALLITEMS, IDC_HOSTLIST, OnDeleteallitemsHostlist) |
159 | ON_BN_CLICKED(IDC_EXIT, OnExit) | 162 | ON_BN_CLICKED(IDC_EXIT, OnExit) |
160 | ON_NOTIFY(LVN_ITEMCHANGED, IDC_HOSTLIST, OnItemchangedHostlist) | 163 | ON_NOTIFY(LVN_ITEMCHANGED, IDC_HOSTLIST, OnItemchangedHostlist) |
161 | ON_BN_CLICKED(IDC_REMOVE, OnRemove) | 164 | ON_BN_CLICKED(IDC_REMOVE, OnRemove) |
162 | ON_NOTIFY(NM_RCLICK, IDC_HOSTLIST, OnRclickHostlist) | 165 | ON_NOTIFY(NM_RCLICK, IDC_HOSTLIST, OnRclickHostlist) |
163 | ON_COMMAND(ID_HOSTLIST_REPING, OnHostListReping) | 166 | ON_COMMAND(ID_HOSTLIST_REPING, OnHostListReping) |
164 | ON_COMMAND(ID_HOSTLIST_REMOVE, OnHostListRemove) | 167 | ON_COMMAND(ID_HOSTLIST_REMOVE, OnHostListRemove) |
165 | ON_COMMAND(ID_HOSTLIST_REPINGALL, OnHostListRepingAll) | 168 | ON_COMMAND(ID_HOSTLIST_REPINGALL, OnHostListRepingAll) |
166 | ON_COMMAND(ID_HOSTLIST_REMOVEALL, OnHostListRemoveAll) | 169 | ON_COMMAND(ID_HOSTLIST_REMOVEALL, OnHostListRemoveAll) |
167 | ON_COMMAND(ID_HOSTLIST_OPENURL, OnHostListOpenURL) | 170 | ON_COMMAND(ID_HOSTLIST_OPENURL, OnHostListOpenURL) |
168 | ON_COMMAND(ID_HOSTLIST_PROPERTIES, OnHostListProperties) | 171 | ON_COMMAND(ID_HOSTLIST_PROPERTIES, OnHostListProperties) |
169 | ON_NOTIFY(NM_DBLCLK, IDC_HOSTLIST, OnDblclkHostlist) | 172 | ON_NOTIFY(NM_DBLCLK, IDC_HOSTLIST, OnDblclkHostlist) |
170 | ON_WM_CLOSE() | 173 | ON_WM_CLOSE() |
171 | ON_WM_GETMINMAXINFO() | 174 | ON_WM_GETMINMAXINFO() |
172 | ON_WM_SIZE() | 175 | ON_WM_SIZE() |
173 | ON_BN_CLICKED(ID_HELP, OnHelp) | 176 | ON_BN_CLICKED(ID_HELP, OnHelp) |
174 | ON_NOTIFY(LVN_BEGINDRAG, IDC_HOSTLIST, OnBegindragHostlist) | 177 | ON_NOTIFY(LVN_BEGINDRAG, IDC_HOSTLIST, OnBegindragHostlist) |
175 | ON_COMMAND(ID_HOSTLIST_PASTEURL, OnPasteurl) | 178 | ON_COMMAND(ID_HOSTLIST_PASTEURL, OnPasteurl) |
176 | ON_COMMAND(ID_HOSTLIST_COPYURL, OnHostlistCopyurl) | 179 | ON_COMMAND(ID_HOSTLIST_COPYURL, OnHostlistCopyurl) |
177 | ON_WM_HELPINFO() | 180 | ON_WM_HELPINFO() |
178 | ON_WM_DROPFILES() | 181 | ON_WM_DROPFILES() |
179 | ON_BN_CLICKED(IDC_ADVANCED, OnAdvanced) | 182 | ON_BN_CLICKED(IDC_ADVANCED, OnAdvanced) |
180 | ON_COMMAND(ID_ADVANCED_EXPORTLIST, OnAdvancedExportlist) | 183 | ON_COMMAND(ID_ADVANCED_EXPORTLIST, OnAdvancedExportlist) |
181 | ON_COMMAND(ID_ADVANCED_IMPORTLIST, OnAdvancedImportlist) | 184 | ON_COMMAND(ID_ADVANCED_IMPORTLIST, OnAdvancedImportlist) |
182 | ON_COMMAND(ID_DRAGPAD_PASTEURL, OnPasteurl) | 185 | ON_COMMAND(ID_DRAGPAD_PASTEURL, OnPasteurl) |
183 | ON_COMMAND(ID_DRAGPAD_ADVANCED_EXPORTLIST, OnDragpadAdvancedExportlist) | 186 | ON_COMMAND(ID_DRAGPAD_ADVANCED_EXPORTLIST, OnDragpadAdvancedExportlist) |
184 | ON_COMMAND(ID_DRAGPAD_ADVANCED_IMPORTLIST, OnDragpadAdvancedImportlist) | 187 | ON_COMMAND(ID_DRAGPAD_ADVANCED_IMPORTLIST, OnDragpadAdvancedImportlist) |
185 | //}}AFX_MSG_MAP | 188 | //}}AFX_MSG_MAP |
186 | END_MESSAGE_MAP() | 189 | END_MESSAGE_MAP() |
187 | 190 | ||
188 | ///////////////////////////////////////////////////////////////////////////// | 191 | ///////////////////////////////////////////////////////////////////////////// |
189 | // CDipstickDlg message handlers | 192 | // CDipstickDlg message handlers |
190 | 193 | ||
191 | BOOL CDipstickDlg::OnInitDialog() | 194 | BOOL CDipstickDlg::OnInitDialog() |
192 | { | 195 | { |
193 | CDialog::OnInitDialog(); | 196 | CDialog::OnInitDialog(); |
194 | 197 | ||
195 | // Add "About..." menu item to system menu. | 198 | // Add "About..." menu item to system menu. |
196 | 199 | ||
197 | // IDM_ABOUTBOX must be in the system command range. | 200 | // IDM_ABOUTBOX must be in the system command range. |
198 | ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); | 201 | ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); |
199 | ASSERT(IDM_ABOUTBOX < 0xF000); | 202 | ASSERT(IDM_ABOUTBOX < 0xF000); |
200 | 203 | ||
201 | CMenu* pSysMenu = GetSystemMenu(FALSE); | 204 | CMenu* pSysMenu = GetSystemMenu(FALSE); |
202 | CString strAboutMenu; | 205 | CString strAboutMenu; |
203 | strAboutMenu.LoadString(IDS_ABOUTBOX); | 206 | strAboutMenu.LoadString(IDS_ABOUTBOX); |
204 | if (!strAboutMenu.IsEmpty()) | 207 | if (!strAboutMenu.IsEmpty()) |
205 | { | 208 | { |
206 | pSysMenu->AppendMenu(MF_SEPARATOR); | 209 | pSysMenu->AppendMenu(MF_SEPARATOR); |
207 | pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); | 210 | pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); |
208 | } | 211 | } |
209 | 212 | ||
210 | // Set the icon for this dialog. The framework does this automatically | 213 | // Set the icon for this dialog. The framework does this automatically |
211 | // when the application's main window is not a dialog | 214 | // when the application's main window is not a dialog |
212 | SetIcon(m_hIcon, TRUE); // Set big icon | 215 | SetIcon(m_hIcon, TRUE); // Set big icon |
213 | SetIcon(m_hIcon, FALSE); // Set small icon | 216 | SetIcon(m_hIcon, FALSE); // Set small icon |
214 | 217 | ||
215 | CRect wrci, wrco; | 218 | CRect wrci, wrco; |
216 | GetWindowRect(&wrco); | 219 | GetWindowRect(&wrco); |
217 | GetClientRect(&wrci); | 220 | GetClientRect(&wrci); |
218 | CRect brc1, brc2, lrc; | 221 | CRect brc1, brc2, lrc; |
219 | m_HostList.GetWindowRect(&lrc); | 222 | m_HostList.GetWindowRect(&lrc); |
220 | ScreenToClient(&lrc); | 223 | ScreenToClient(&lrc); |
221 | m_ManualPingCtl.GetWindowRect(&brc1); | 224 | m_ManualPingCtl.GetWindowRect(&brc1); |
222 | ScreenToClient(brc1); | 225 | ScreenToClient(brc1); |
223 | m_RepingCtl.GetWindowRect(&brc2); | 226 | m_RepingCtl.GetWindowRect(&brc2); |
224 | ScreenToClient(&brc2); | 227 | ScreenToClient(&brc2); |
225 | m_OverX = lrc.left; | 228 | m_OverX = lrc.left; |
226 | m_OverY = lrc.top; | 229 | m_OverY = lrc.top; |
227 | m_GapY = brc2.top - brc1.bottom; | 230 | m_GapY = brc2.top - brc1.bottom; |
228 | m_MinSize.cx = m_OverX+m_OverX+m_OverX+brc1.Width()+m_OverX; | 231 | m_MinSize.cx = m_OverX+m_OverX+m_OverX+brc1.Width()+m_OverX; |
229 | m_MinSize.cy = m_OverY+(brc1.Height()+m_GapY)*6+(brc1.Height()+m_GapY)*3+m_OverY; | 232 | m_MinSize.cy = m_OverY+(brc1.Height()+m_GapY)*6+(brc1.Height()+m_GapY)*3+m_OverY; |
230 | m_MinSize.cx+=wrco.Width()-wrci.Width(); | 233 | m_MinSize.cx+=wrco.Width()-wrci.Width(); |
231 | m_MinSize.cy+=wrco.Height()-wrci.Height(); | 234 | m_MinSize.cy+=wrco.Height()-wrci.Height(); |
232 | 235 | ||
233 | CWinApp *app = AfxGetApp(); | 236 | CWinApp *app = AfxGetApp(); |
234 | ASSERT(app); | 237 | ASSERT(app); |
235 | CRect wrc; | 238 | CRect wrc; |
236 | wrc.top=app->GetProfileInt("Windows","DlgTop",-1); | 239 | wrc.top=app->GetProfileInt("Windows","DlgTop",-1); |
237 | wrc.bottom=app->GetProfileInt("Windows","DlgBottom",-1); | 240 | wrc.bottom=app->GetProfileInt("Windows","DlgBottom",-1); |
238 | wrc.left=app->GetProfileInt("Windows","DlgLeft",-1); | 241 | wrc.left=app->GetProfileInt("Windows","DlgLeft",-1); |
239 | wrc.right=app->GetProfileInt("Windows","DlgRight",-1); | 242 | wrc.right=app->GetProfileInt("Windows","DlgRight",-1); |
240 | if((wrc.top!=-1|| wrc.bottom!=-1) && wrc.left!=-1&& wrc.right!=-1) | 243 | if((wrc.top!=-1|| wrc.bottom!=-1) && wrc.left!=-1&& wrc.right!=-1) |
241 | MoveWindow(&wrc); | 244 | MoveWindow(&wrc); |
242 | 245 | ||
243 | RecalcLayout(-1,-1); | 246 | RecalcLayout(-1,-1); |
244 | 247 | ||
245 | m_DragPad = new CDragPad(); | 248 | m_DragPad = new CDragPad(); |
246 | m_DragPad->m_Daddy=this; | 249 | m_DragPad->m_Daddy=this; |
247 | m_DragPad->Create(CDragPad::IDD); | 250 | m_DragPad->Create(CDragPad::IDD); |
248 | m_Images.Create(16,16,TRUE,4,1); | 251 | m_Images.Create(16,16,TRUE,4,1); |
249 | m_iPending=m_Images.Add(app->LoadIcon(IDI_PENDING)); | 252 | m_iPending=m_Images.Add(app->LoadIcon(IDI_PENDING)); |
250 | m_iPinging=m_Images.Add(app->LoadIcon(IDI_PINGING)); | 253 | m_iPinging=m_Images.Add(app->LoadIcon(IDI_PINGING)); |
251 | m_iCompleted=m_Images.Add(app->LoadIcon(IDI_COMPLETED)); | 254 | m_iCompleted=m_Images.Add(app->LoadIcon(IDI_COMPLETED)); |
252 | m_iUnreachable=m_Images.Add(app->LoadIcon(IDI_UNREACHABLE)); | 255 | m_iUnreachable=m_Images.Add(app->LoadIcon(IDI_UNREACHABLE)); |
253 | ASSERT(!(m_iPending<0 || m_iPinging<0 || m_iCompleted<0 || m_iUnreachable<0)); | 256 | ASSERT(!(m_iPending<0 || m_iPinging<0 || m_iCompleted<0 || m_iUnreachable<0)); |
254 | m_HostList.SetImageList(&m_Images,LVSIL_NORMAL); | 257 | m_HostList.SetImageList(&m_Images,LVSIL_NORMAL); |
255 | m_HostList.SetImageList(&m_Images,LVSIL_SMALL); | 258 | m_HostList.SetImageList(&m_Images,LVSIL_SMALL); |
256 | m_HostList.SetImageList(&m_Images,LVSIL_STATE); | 259 | m_HostList.SetImageList(&m_Images,LVSIL_STATE); |
257 | m_HostList.SetTextColor(RGB(255,255,0));// Yellow | 260 | m_HostList.SetTextColor(RGB(255,255,0));// Yellow |
258 | m_HostList.SetTextBkColor(RGB(12,167,0));// Green | 261 | m_HostList.SetTextBkColor(RGB(12,167,0));// Green |
259 | m_HostList.SetBkColor(RGB(12,167,0)); // Green | 262 | m_HostList.SetBkColor(RGB(12,167,0)); // Green |
260 | CRect listrc; | 263 | CRect listrc; |
261 | m_HostList.GetClientRect(&listrc); | 264 | m_HostList.GetClientRect(&listrc); |
262 | m_HostList.InsertColumn(0,"Host Name",LVCFMT_LEFT,app->GetProfileInt("Columns","HostName",listrc.Width()-(listrc.Width()*2/16)*4-(listrc.Width()*3/16)),subitemHost); | 265 | m_HostList.InsertColumn(0,"Host Name",LVCFMT_LEFT,app->GetProfileInt("Columns","HostName",listrc.Width()-(listrc.Width()*2/16)*4-(listrc.Width()*3/16)),subitemHost); |
263 | m_HostList.InsertColumn(1,"Host IP",LVCFMT_LEFT,app->GetProfileInt("Columns","HostIP",listrc.Width()*3/16),subitemIP); | 266 | m_HostList.InsertColumn(1,"Host IP",LVCFMT_LEFT,app->GetProfileInt("Columns","HostIP",listrc.Width()*3/16),subitemIP); |
264 | m_HostList.InsertColumn(2,"Min RTT",LVCFMT_RIGHT,app->GetProfileInt("Columns","MinRTT",listrc.Width()*2/16),subitemMin); | 267 | m_HostList.InsertColumn(2,"Min RTT",LVCFMT_RIGHT,app->GetProfileInt("Columns","MinRTT",listrc.Width()*2/16),subitemMin); |
265 | m_HostList.InsertColumn(3,"Avg RTT",LVCFMT_RIGHT,app->GetProfileInt("Columns","AvgRTT",listrc.Width()*2/16),subitemAvg); | 268 | m_HostList.InsertColumn(3,"Avg RTT",LVCFMT_RIGHT,app->GetProfileInt("Columns","AvgRTT",listrc.Width()*2/16),subitemAvg); |
266 | m_HostList.InsertColumn(4,"Max RTT",LVCFMT_RIGHT,app->GetProfileInt("Columns","MaxRTT",listrc.Width()*2/16),subitemMax); | 269 | m_HostList.InsertColumn(4,"Max RTT",LVCFMT_RIGHT,app->GetProfileInt("Columns","MaxRTT",listrc.Width()*2/16),subitemMax); |
267 | m_HostList.InsertColumn(5,"Pktloss", LVCFMT_RIGHT,app->GetProfileInt("Columns","PktLoss",listrc.Width()*2/16),subitemPacketloss); | 270 | m_HostList.InsertColumn(5,"Pktloss", LVCFMT_RIGHT,app->GetProfileInt("Columns","PktLoss",listrc.Width()*2/16),subitemPacketloss); |
268 | 271 | ||
269 | DragAcceptFiles(TRUE); | 272 | DragAcceptFiles(TRUE); |
270 | 273 | ||
271 | return TRUE; // return TRUE unless you set the focus to a control | 274 | return TRUE; // return TRUE unless you set the focus to a control |
272 | } | 275 | } |
273 | 276 | ||
274 | void CDipstickDlg::OnSysCommand(UINT nID, LPARAM lParam) | 277 | void CDipstickDlg::OnSysCommand(UINT nID, LPARAM lParam) |
275 | { | 278 | { |
276 | if ((nID & 0xFFF0) == IDM_ABOUTBOX) | 279 | if ((nID & 0xFFF0) == IDM_ABOUTBOX) |
277 | { | 280 | { |
278 | CAboutDlg dlgAbout; | 281 | CAboutDlg dlgAbout; |
279 | dlgAbout.DoModal(); | 282 | dlgAbout.DoModal(); |
280 | } | 283 | } |
281 | else | 284 | else |
282 | { | 285 | { |
283 | CDialog::OnSysCommand(nID, lParam); | 286 | CDialog::OnSysCommand(nID, lParam); |
284 | } | 287 | } |
285 | } | 288 | } |
286 | 289 | ||
287 | // If you add a minimize button to your dialog, you will need the code below | 290 | // If you add a minimize button to your dialog, you will need the code below |
288 | // to draw the icon. For MFC applications using the document/view model, | 291 | // to draw the icon. For MFC applications using the document/view model, |
289 | // this is automatically done for you by the framework. | 292 | // this is automatically done for you by the framework. |
290 | 293 | ||
291 | void CDipstickDlg::OnPaint() | 294 | void CDipstickDlg::OnPaint() |
292 | { | 295 | { |
293 | if (IsIconic()) | 296 | if (IsIconic()) |
294 | { | 297 | { |
295 | CPaintDC dc(this); // device context for painting | 298 | CPaintDC dc(this); // device context for painting |
296 | 299 | ||
297 | SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); | 300 | SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); |
298 | 301 | ||
299 | // Center icon in client rectangle | 302 | // Center icon in client rectangle |
300 | int cxIcon = GetSystemMetrics(SM_CXICON); | 303 | int cxIcon = GetSystemMetrics(SM_CXICON); |
301 | int cyIcon = GetSystemMetrics(SM_CYICON); | 304 | int cyIcon = GetSystemMetrics(SM_CYICON); |
302 | CRect rect; | 305 | CRect rect; |
303 | GetClientRect(&rect); | 306 | GetClientRect(&rect); |
304 | int x = (rect.Width() - cxIcon + 1) / 2; | 307 | int x = (rect.Width() - cxIcon + 1) / 2; |
305 | int y = (rect.Height() - cyIcon + 1) / 2; | 308 | int y = (rect.Height() - cyIcon + 1) / 2; |
306 | 309 | ||
307 | // Draw the icon | 310 | // Draw the icon |
308 | dc.DrawIcon(x, y, m_hIcon); | 311 | dc.DrawIcon(x, y, m_hIcon); |
309 | } | 312 | } |
310 | else | 313 | else |
311 | { | 314 | { |
312 | CPaintDC pDC(this); | 315 | CPaintDC pDC(this); |
313 | CDC bmpDC; | 316 | CDC bmpDC; |
314 | bmpDC.CreateCompatibleDC(&pDC); | 317 | bmpDC.CreateCompatibleDC(&pDC); |
315 | bmpDC.SelectObject(&m_bmpBack); | 318 | bmpDC.SelectObject(&m_bmpBack); |
316 | CRect rc; | 319 | CRect rc; |
317 | GetClientRect(&rc); | 320 | GetClientRect(&rc); |
318 | for(int x=-m_bitmapBack.bmWidth*2/4;x<rc.Width();x+=m_bitmapBack.bmWidth) | 321 | for(int x=-m_bitmapBack.bmWidth*2/4;x<rc.Width();x+=m_bitmapBack.bmWidth) |
319 | for(int y=-m_bitmapBack.bmHeight*2/4;y<rc.Height();y+=m_bitmapBack.bmHeight) | 322 | for(int y=-m_bitmapBack.bmHeight*2/4;y<rc.Height();y+=m_bitmapBack.bmHeight) |
320 | pDC.BitBlt(x,y,m_bitmapBack.bmWidth,m_bitmapBack.bmHeight,&bmpDC,0,0,SRCCOPY); | 323 | pDC.BitBlt(x,y,m_bitmapBack.bmWidth,m_bitmapBack.bmHeight,&bmpDC,0,0,SRCCOPY); |
321 | bmpDC.DeleteDC(); | 324 | bmpDC.DeleteDC(); |
322 | CDialog::OnPaint(); | 325 | CDialog::OnPaint(); |
323 | } | 326 | } |
324 | } | 327 | } |
325 | 328 | ||
326 | // The system calls this to obtain the cursor to display while the user drags | 329 | // The system calls this to obtain the cursor to display while the user drags |
327 | // the minimized window. | 330 | // the minimized window. |
328 | HCURSOR CDipstickDlg::OnQueryDragIcon() | 331 | HCURSOR CDipstickDlg::OnQueryDragIcon() |
329 | { | 332 | { |
330 | return (HCURSOR) m_hIcon; | 333 | return (HCURSOR) m_hIcon; |
331 | } | 334 | } |
332 | 335 | ||
333 | ////////////////////////// | 336 | ////////////////////////// |
334 | 337 | ||
335 | void CDipstickDlg::OnDestroy() | 338 | void CDipstickDlg::OnDestroy() |
336 | { | 339 | { |
337 | CDialog::OnDestroy(); | 340 | CDialog::OnDestroy(); |
338 | TRACE0("DestroyMain\n"); | 341 | TRACE0("DestroyMain\n"); |
339 | m_DragPad->DestroyWindow(); | 342 | m_DragPad->DestroyWindow(); |
340 | delete m_DragPad; | 343 | delete m_DragPad; |
341 | m_DragPad=NULL; | 344 | m_DragPad=NULL; |
342 | // *** Eventually move the following code to separate function | 345 | // *** Eventually move the following code to separate function |
343 | POSITION p = m_Hosts.GetHeadPosition(); | 346 | POSITION p = m_Hosts.GetHeadPosition(); |
344 | while(p){ | 347 | while(p){ |
345 | POSITION pp = p; | 348 | POSITION pp = p; |
346 | CPingyHost *host = m_Hosts.GetNext(p); | 349 | CPingyHost *host = m_Hosts.GetNext(p); |
347 | ASSERT(host); | 350 | ASSERT(host); |
348 | m_Hosts.RemoveAt(pp); | 351 | m_Hosts.RemoveAt(pp); |
349 | host->Suicide(); | 352 | host->Suicide(); |
350 | } | 353 | } |
351 | ASSERT(m_Hosts.IsEmpty()); | 354 | ASSERT(m_Hosts.IsEmpty()); |
352 | } | 355 | } |
353 | 356 | ||
354 | void CDipstickDlg::OnOptions() | 357 | void CDipstickDlg::OnOptions() |
355 | { | 358 | { |
356 | COptionsDlg o(this); | 359 | COptionsDlg o(this); |
357 | o.m_Pings = m_PingsPerHost; | 360 | o.m_Pings = m_PingsPerHost; |
358 | o.m_PingSize = m_PingSize; | 361 | o.m_PingSize = m_PingSize; |
359 | o.m_TimeOut = max(1,m_TimeOut/1000); | 362 | o.m_TimeOut = max(1,m_TimeOut/1000); |
360 | o.m_Interval = max(1,m_Interval/1000); | 363 | o.m_Interval = max(1,m_Interval/1000); |
361 | o.m_MaxThreads = m_MaxThreads; | 364 | o.m_MaxThreads = m_MaxThreads; |
362 | o.m_bMSWorkAround = m_bMSWorkAround; | 365 | o.m_bMSWorkAround = m_bMSWorkAround; |
363 | o.m_bAutoBest = m_bAutoBest; | 366 | o.m_bAutoBest = m_bAutoBest; |
364 | o.m_bAdjust = m_bSmartAdjust; | 367 | o.m_bAdjust = m_bSmartAdjust; |
365 | o.m_bAdjustInn = m_bAdjustInnermost; | 368 | o.m_bAdjustInn = m_bAdjustInnermost; |
366 | o.m_bIgnorelative = m_bIgnorelative; | 369 | o.m_bIgnorelative = m_bIgnorelative; |
367 | if(o.DoModal()==IDOK){ | 370 | if(o.DoModal()==IDOK){ |
368 | m_PingsPerHost = o.m_Pings; | 371 | m_PingsPerHost = o.m_Pings; |
369 | m_PingSize = o.m_PingSize; | 372 | m_PingSize = o.m_PingSize; |
370 | m_TimeOut = o.m_TimeOut*1000; | 373 | m_TimeOut = o.m_TimeOut*1000; |
371 | m_Interval = o.m_Interval*1000; | 374 | m_Interval = o.m_Interval*1000; |
372 | m_MaxThreads = o.m_MaxThreads; | 375 | m_MaxThreads = o.m_MaxThreads; |
373 | m_bMSWorkAround = o.m_bMSWorkAround; | 376 | m_bMSWorkAround = o.m_bMSWorkAround; |
374 | m_bAutoBest = o.m_bAutoBest; | 377 | m_bAutoBest = o.m_bAutoBest; |
375 | m_bSmartAdjust = o.m_bAdjust; | 378 | m_bSmartAdjust = o.m_bAdjust; |
376 | m_bAdjustInnermost = o.m_bAdjustInn; | 379 | m_bAdjustInnermost = o.m_bAdjustInn; |
377 | m_bIgnorelative = o.m_bIgnorelative; | 380 | m_bIgnorelative = o.m_bIgnorelative; |
378 | } | 381 | } |
379 | } | 382 | } |
380 | 383 | ||
381 | BOOL CDipstickDlg::AddPingyHost(CPingyHost *host) | 384 | BOOL CDipstickDlg::AddPingyHost(CPingyHost *host) |
382 | { | 385 | { |
383 | m_Hosts.AddTail(host); | 386 | m_Hosts.AddTail(host); |
384 | int i = m_HostList.InsertItem(0,host->m_HostName); | 387 | int i = m_HostList.InsertItem(0,host->m_HostName); |
385 | m_HostList.SetItemData(i,(DWORD)host); | 388 | m_HostList.SetItemData(i,(DWORD)host); |
386 | UpdateDragpadTitle(); | 389 | UpdateDragpadTitle(); |
387 | return UpdatePingyHost(host,i);// *** Do someting if failed. | 390 | return UpdatePingyHost(host,i);// *** Do someting if failed. |
388 | } | 391 | } |
389 | 392 | ||
390 | BOOL CDipstickDlg::UpdatePingyHost(CPingyHost *host,int index) | 393 | BOOL CDipstickDlg::UpdatePingyHost(CPingyHost *host,int index) |
391 | { | 394 | { |
392 | UpdateDragpadTitle(); | 395 | UpdateDragpadTitle(); |
393 | int i = index; | 396 | int i = index; |
394 | if(i<0){ | 397 | if(i<0){ |
395 | int is = m_HostList.GetItemCount(); | 398 | int is = m_HostList.GetItemCount(); |
396 | for(i=0;i<is;i++) | 399 | for(i=0;i<is;i++) |
397 | if(m_HostList.GetItemData(i)==(DWORD)host) | 400 | if(m_HostList.GetItemData(i)==(DWORD)host) |
398 | break; | 401 | break; |
399 | if(!(i<is)) | 402 | if(!(i<is)) |
400 | return FALSE; | 403 | return FALSE; |
401 | } | 404 | } |
402 | ASSERT(m_HostList.GetItemData(i)==(DWORD)host); | 405 | ASSERT(m_HostList.GetItemData(i)==(DWORD)host); |
403 | m_HostList.SetItemText(i,subitemHost,host->m_HostName.IsEmpty()?"...":host->m_HostName); | 406 | m_HostList.SetItemText(i,subitemHost,host->m_HostName.IsEmpty()?"...":host->m_HostName); |
404 | m_HostList.SetItemText(i,subitemIP,host->m_IP?inet_ntoa(*(in_addr*)&host->m_IP):"..."); | 407 | m_HostList.SetItemText(i,subitemIP,host->m_IP?inet_ntoa(*(in_addr*)&host->m_IP):"..."); |
405 | if(host->m_Pinged && host->m_Packetloss>=0){ | 408 | if(host->m_Pinged && host->m_Packetloss>=0){ |
406 | CString tmp; | 409 | CString tmp; |
407 | if(host->m_Packetloss==100){ | 410 | if(host->m_Packetloss==100){ |
408 | m_HostList.SetItemText(i,subitemMin,"-"); | 411 | m_HostList.SetItemText(i,subitemMin,"-"); |
409 | m_HostList.SetItemText(i,subitemAvg,"-"); | 412 | m_HostList.SetItemText(i,subitemAvg,"-"); |
410 | m_HostList.SetItemText(i,subitemMax,"-"); | 413 | m_HostList.SetItemText(i,subitemMax,"-"); |
411 | }else{ | 414 | }else{ |
412 | tmp.Format("%lu",host->m_MinRTT); | 415 | tmp.Format("%lu",host->m_MinRTT); |
413 | m_HostList.SetItemText(i,subitemMin,tmp); | 416 | m_HostList.SetItemText(i,subitemMin,tmp); |
414 | tmp.Format("%lu",host->m_AvgRTT); | 417 | tmp.Format("%lu",host->m_AvgRTT); |
415 | m_HostList.SetItemText(i,subitemAvg,tmp); | 418 | m_HostList.SetItemText(i,subitemAvg,tmp); |
416 | tmp.Format("%lu",host->m_MaxRTT); | 419 | tmp.Format("%lu",host->m_MaxRTT); |
417 | m_HostList.SetItemText(i,subitemMax,tmp); | 420 | m_HostList.SetItemText(i,subitemMax,tmp); |
418 | } | 421 | } |
419 | tmp.Format("%d%%",host->m_Packetloss); | 422 | tmp.Format("%d%%",host->m_Packetloss); |
420 | m_HostList.SetItemText(i,subitemPacketloss,tmp); | 423 | m_HostList.SetItemText(i,subitemPacketloss,tmp); |
421 | }else{ | 424 | }else{ |
422 | m_HostList.SetItemText(i,subitemMin,"..."); | 425 | m_HostList.SetItemText(i,subitemMin,"..."); |
423 | m_HostList.SetItemText(i,subitemAvg,"..."); | 426 | m_HostList.SetItemText(i,subitemAvg,"..."); |
424 | m_HostList.SetItemText(i,subitemMax,"..."); | 427 | m_HostList.SetItemText(i,subitemMax,"..."); |
425 | m_HostList.SetItemText(i,subitemPacketloss,"..."); | 428 | m_HostList.SetItemText(i,subitemPacketloss,"..."); |
426 | } | 429 | } |
427 | if(host->m_Pinging) | 430 | if(host->m_Pinging) |
428 | m_HostList.SetItem(i,subitemHost,LVIF_IMAGE,NULL,m_iPinging,0,0,0); | 431 | m_HostList.SetItem(i,subitemHost,LVIF_IMAGE,NULL,m_iPinging,0,0,0); |
429 | else{ | 432 | else{ |
430 | if(host->m_bToPing) | 433 | if(host->m_bToPing) |
431 | m_HostList.SetItem(i,subitemHost,LVIF_IMAGE,NULL,m_iPending,0,0,0); | 434 | m_HostList.SetItem(i,subitemHost,LVIF_IMAGE,NULL,m_iPending,0,0,0); |
432 | else{ | 435 | else{ |
433 | if(host->m_Pinged){ | 436 | if(host->m_Pinged){ |
434 | if(host->m_Packetloss==100) | 437 | if(host->m_Packetloss==100) |
435 | m_HostList.SetItem(i,subitemHost,LVIF_IMAGE,NULL,m_iUnreachable,0,0,0); | 438 | m_HostList.SetItem(i,subitemHost,LVIF_IMAGE,NULL,m_iUnreachable,0,0,0); |
436 | else | 439 | else |
437 | m_HostList.SetItem(i,subitemHost,LVIF_IMAGE,NULL,m_iCompleted,0,0,0); | 440 | m_HostList.SetItem(i,subitemHost,LVIF_IMAGE,NULL,m_iCompleted,0,0,0); |
438 | }else | 441 | }else |
439 | m_HostList.SetItem(i,subitemHost,LVIF_IMAGE,NULL,m_iPending,0,0,0); | 442 | m_HostList.SetItem(i,subitemHost,LVIF_IMAGE,NULL,m_iPending,0,0,0); |
440 | } | 443 | } |
441 | } | 444 | } |
442 | m_HostList.SortItems(CompareItems,(DWORD)this); | 445 | m_HostList.SortItems(CompareItems,(DWORD)this); |
443 | UpdateControlButtons(); | 446 | UpdateControlButtons(); |
444 | return TRUE; | 447 | return TRUE; |
445 | } | 448 | } |
446 | 449 | ||
447 | BOOL CDipstickDlg::RemovePingyHost(CPingyHost *host,int index) | 450 | BOOL CDipstickDlg::RemovePingyHost(CPingyHost *host,int index) |
448 | { | 451 | { |
449 | if(host->m_Pinging) | 452 | if(host->m_Pinging) |
450 | return FALSE; | 453 | return FALSE; |
451 | int i = index; | 454 | int i = index; |
452 | if(i<0){ | 455 | if(i<0){ |
453 | int is = m_HostList.GetItemCount(); | 456 | int is = m_HostList.GetItemCount(); |
454 | for(i=0;i<is;i++) | 457 | for(i=0;i<is;i++) |
455 | if(m_HostList.GetItemData(i)==(DWORD)host) | 458 | if(m_HostList.GetItemData(i)==(DWORD)host) |
456 | break; | 459 | break; |
457 | if(!(i<is)) | 460 | if(!(i<is)) |
458 | return FALSE; | 461 | return FALSE; |
459 | } | 462 | } |
460 | ASSERT(m_HostList.GetItemData(i)==(DWORD)host); | 463 | ASSERT(m_HostList.GetItemData(i)==(DWORD)host); |
461 | POSITION p = m_Hosts.Find(host,NULL); | 464 | POSITION p = m_Hosts.Find(host,NULL); |
462 | if(!p) | 465 | if(!p) |
463 | return FALSE; | 466 | return FALSE; |
464 | m_HostList.DeleteItem(i); | 467 | m_HostList.DeleteItem(i); |
465 | m_Hosts.RemoveAt(p); | 468 | m_Hosts.RemoveAt(p); |
466 | host->Suicide(); | 469 | host->Suicide(); |
467 | UpdateControlButtons(); | 470 | UpdateControlButtons(); |
468 | UpdateDragpadTitle(); | 471 | UpdateDragpadTitle(); |
469 | return TRUE; | 472 | return TRUE; |
470 | } | 473 | } |
471 | 474 | ||
472 | LRESULT CDipstickDlg::OnUrlPing(WPARAM wP, LPARAM lP) | 475 | LRESULT CDipstickDlg::OnUrlPing(WPARAM wP, LPARAM lP) |
473 | { | 476 | { |
474 | ASSERT(lP); | 477 | ASSERT(lP); |
475 | CString *u = (CString*)lP; | 478 | CString *u = (CString*)lP; |
476 | CString hn; | 479 | CString hn; |
477 | CPingyHost *host; | 480 | CPingyHost *host; |
478 | if(m_bMSWorkAround) | 481 | if(m_bMSWorkAround) |
479 | hn = CCrackURL::InnermostURL(*u); | 482 | hn = CCrackURL::InnermostURL(*u); |
480 | else | 483 | else |
481 | hn = *u; | 484 | hn = *u; |
482 | hn = CCrackURL::GetHostName(hn); | 485 | hn = CCrackURL::GetHostName(hn); |
483 | DWORD ip = inet_addr(hn); | 486 | DWORD ip = inet_addr(hn); |
484 | if(ip==INADDR_NONE) | 487 | if(ip==INADDR_NONE) |
485 | host = new CPingyHost(this,(char*)(LPCTSTR)hn); | 488 | host = new CPingyHost(this,(char*)(LPCTSTR)hn); |
486 | else | 489 | else |
487 | host = new CPingyHost(this,ip); | 490 | host = new CPingyHost(this,ip); |
488 | host->m_URL=*u; | 491 | host->m_URL=*u; |
489 | delete u; | 492 | delete u; |
490 | AddPingyHost(host); | 493 | AddPingyHost(host); |
491 | CheckForPendingRequests(); | 494 | CheckForPendingRequests(); |
492 | return 0; | 495 | return 0; |
493 | } | 496 | } |
494 | 497 | ||
495 | LRESULT CDipstickDlg::OnActivityCount(WPARAM wP,LPARAM) | 498 | LRESULT CDipstickDlg::OnActivityCount(WPARAM wP,LPARAM) |
496 | { | 499 | { |
497 | if(!wP) | 500 | if(!wP) |
498 | return 0; | 501 | return 0; |
499 | intcrement = (int)wP; | 502 | intcrement = (int)wP; |
500 | m_ActiveThreads+=crement; | 503 | m_ActiveThreads+=crement; |
501 | if(m_ActiveThreads<0){ | 504 | if(m_ActiveThreads<0){ |
502 | TRACE0("C'est n'est pas possible!\n"); | 505 | TRACE0("C'est n'est pas possible!\n"); |
503 | m_ActiveThreads=0; | 506 | m_ActiveThreads=0; |
504 | } | 507 | } |
505 | TRACE1("AC: %d\n",m_ActiveThreads); | 508 | TRACE1("AC: %d\n",m_ActiveThreads); |
506 | if(m_ActiveThreads){ | 509 | if(m_ActiveThreads){ |
507 | m_DragPad->m_DragNDropTarget.Play(0,(UINT)-1,(UINT)-1); | 510 | m_DragPad->m_DragNDropTarget.Play(0,(UINT)-1,(UINT)-1); |
508 | m_ClearListCtl.EnableWindow(FALSE); | 511 | m_ClearListCtl.EnableWindow(FALSE); |
509 | }else{ | 512 | }else{ |
510 | m_DragPad->m_DragNDropTarget.Stop(); | 513 | m_DragPad->m_DragNDropTarget.Stop(); |
511 | m_DragPad->m_DragNDropTarget.Seek(0); | 514 | m_DragPad->m_DragNDropTarget.Seek(0); |
512 | if(m_HostList.GetItemCount()) | 515 | if(m_HostList.GetItemCount()) |
513 | m_ClearListCtl.EnableWindow(TRUE); | 516 | m_ClearListCtl.EnableWindow(TRUE); |
514 | } | 517 | } |
515 | if(crement>0) | 518 | if(crement>0) |
516 | return 0; | 519 | return 0; |
517 | UpdateDragpadTitle(); | 520 | UpdateDragpadTitle(); |
518 | int items = m_HostList.GetItemCount(); | 521 | int items = m_HostList.GetItemCount(); |
519 | if((!CheckForPendingRequests()) && m_bAutoBest && items && !m_ActiveThreads){ | 522 | if((!CheckForPendingRequests()) && m_bAutoBest && items && !m_ActiveThreads){ |
520 | // Come up with the best URL.. | 523 | // Come up with the best URL.. |
521 | m_SortCriteria=sortAvg; | 524 | m_SortCriteria=sortAvg; |
@@ -804,783 +807,822 @@ int items = m_HostList.GetItemCount(); | |||
804 | void CDipstickDlg::OnRepingall() | 807 | void CDipstickDlg::OnRepingall() |
805 | { | 808 | { |
806 | POSITION p = m_Hosts.GetHeadPosition(); | 809 | POSITION p = m_Hosts.GetHeadPosition(); |
807 | while(p){ | 810 | while(p){ |
808 | CPingyHost *host = m_Hosts.GetNext(p); | 811 | CPingyHost *host = m_Hosts.GetNext(p); |
809 | ASSERT(host); | 812 | ASSERT(host); |
810 | if(host->m_Pinged && !host->m_Pinging) | 813 | if(host->m_Pinged && !host->m_Pinging) |
811 | host->m_bToPing=TRUE; | 814 | host->m_bToPing=TRUE; |
812 | } | 815 | } |
813 | UpdateDragpadTitle(); | 816 | UpdateDragpadTitle(); |
814 | CheckForPendingRequests(); | 817 | CheckForPendingRequests(); |
815 | } | 818 | } |
816 | 819 | ||
817 | void CDipstickDlg::OnClear() | 820 | void CDipstickDlg::OnClear() |
818 | { | 821 | { |
819 | if(m_ActiveThreads) | 822 | if(m_ActiveThreads) |
820 | return; | 823 | return; |
821 | m_HostList.DeleteAllItems(); | 824 | m_HostList.DeleteAllItems(); |
822 | // *** Eventually move the following code to separate function | 825 | // *** Eventually move the following code to separate function |
823 | POSITION p = m_Hosts.GetHeadPosition(); | 826 | POSITION p = m_Hosts.GetHeadPosition(); |
824 | while(p){ | 827 | while(p){ |
825 | POSITION pp = p; | 828 | POSITION pp = p; |
826 | CPingyHost *host = (CPingyHost*)m_Hosts.GetNext(p); | 829 | CPingyHost *host = (CPingyHost*)m_Hosts.GetNext(p); |
827 | ASSERT(host); | 830 | ASSERT(host); |
828 | m_Hosts.RemoveAt(pp); | 831 | m_Hosts.RemoveAt(pp); |
829 | host->Suicide(); | 832 | host->Suicide(); |
830 | } | 833 | } |
831 | ASSERT(m_Hosts.IsEmpty()); | 834 | ASSERT(m_Hosts.IsEmpty()); |
832 | UpdateDragpadTitle(); | 835 | UpdateDragpadTitle(); |
833 | } | 836 | } |
834 | 837 | ||
835 | void CDipstickDlg::OnInsertitemHostlist(NMHDR* pNMHDR, LRESULT* pResult) | 838 | void CDipstickDlg::OnInsertitemHostlist(NMHDR* pNMHDR, LRESULT* pResult) |
836 | { | 839 | { |
837 | NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; | 840 | NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; |
838 | m_RepingCtl.EnableWindow(TRUE); | 841 | m_RepingCtl.EnableWindow(TRUE); |
839 | m_RepingAllCtl.EnableWindow(TRUE); | 842 | m_RepingAllCtl.EnableWindow(TRUE); |
840 | UpdateDragpadTitle(); | 843 | UpdateDragpadTitle(); |
841 | *pResult = 0; | 844 | *pResult = 0; |
842 | } | 845 | } |
843 | 846 | ||
844 | void CDipstickDlg::OnDeleteitemHostlist(NMHDR* pNMHDR, LRESULT* pResult) | 847 | void CDipstickDlg::OnDeleteitemHostlist(NMHDR* pNMHDR, LRESULT* pResult) |
845 | { | 848 | { |
846 | NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; | 849 | NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; |
847 | if(!m_HostList.GetItemCount()){ | 850 | if(!m_HostList.GetItemCount()){ |
848 | m_RepingCtl.EnableWindow(FALSE); | 851 | m_RepingCtl.EnableWindow(FALSE); |
849 | m_RepingAllCtl.EnableWindow(FALSE); | 852 | m_RepingAllCtl.EnableWindow(FALSE); |
850 | m_ClearListCtl.EnableWindow(FALSE); | 853 | m_ClearListCtl.EnableWindow(FALSE); |
851 | } | 854 | } |
852 | UpdateDragpadTitle(); | 855 | UpdateDragpadTitle(); |
853 | *pResult = 0; | 856 | *pResult = 0; |
854 | } | 857 | } |
855 | 858 | ||
856 | void CDipstickDlg::OnDeleteallitemsHostlist(NMHDR* pNMHDR, LRESULT* pResult) | 859 | void CDipstickDlg::OnDeleteallitemsHostlist(NMHDR* pNMHDR, LRESULT* pResult) |
857 | { | 860 | { |
858 | NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; | 861 | NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; |
859 | m_RepingCtl.EnableWindow(FALSE); | 862 | m_RepingCtl.EnableWindow(FALSE); |
860 | m_RepingAllCtl.EnableWindow(FALSE); | 863 | m_RepingAllCtl.EnableWindow(FALSE); |
861 | m_ClearListCtl.EnableWindow(FALSE); | 864 | m_ClearListCtl.EnableWindow(FALSE); |
862 | UpdateDragpadTitle(); | 865 | UpdateDragpadTitle(); |
863 | *pResult = 0; | 866 | *pResult = 0; |
864 | } | 867 | } |
865 | 868 | ||
866 | void CDipstickDlg::OnExit() | 869 | void CDipstickDlg::OnExit() |
867 | { | 870 | { |
868 | OnOK(); | 871 | OnOK(); |
869 | } | 872 | } |
870 | 873 | ||
871 | void CDipstickDlg::OnItemchangedHostlist(NMHDR* pNMHDR, LRESULT* pResult) | 874 | void CDipstickDlg::OnItemchangedHostlist(NMHDR* pNMHDR, LRESULT* pResult) |
872 | { | 875 | { |
873 | NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; | 876 | NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; |
874 | if(pNMListView->uChanged&LVIF_STATE && (pNMListView->uOldState&LVIS_SELECTED)!=(pNMListView->uNewState&LVIS_SELECTED)) | 877 | if(pNMListView->uChanged&LVIF_STATE && (pNMListView->uOldState&LVIS_SELECTED)!=(pNMListView->uNewState&LVIS_SELECTED)) |
875 | UpdateControlButtons(); | 878 | UpdateControlButtons(); |
876 | UpdateDragpadTitle(); | 879 | UpdateDragpadTitle(); |
877 | *pResult = 0; | 880 | *pResult = 0; |
878 | } | 881 | } |
879 | 882 | ||
880 | void CDipstickDlg::UpdateControlButtons() | 883 | void CDipstickDlg::UpdateControlButtons() |
881 | { | 884 | { |
882 | int items = m_HostList.GetItemCount(); | 885 | int items = m_HostList.GetItemCount(); |
883 | if(!items){ | 886 | if(!items){ |
884 | m_ClearListCtl.EnableWindow(FALSE); | 887 | m_ClearListCtl.EnableWindow(FALSE); |
885 | m_RemoveCtl.EnableWindow(FALSE); | 888 | m_RemoveCtl.EnableWindow(FALSE); |
886 | m_RepingAllCtl.EnableWindow(FALSE); | 889 | m_RepingAllCtl.EnableWindow(FALSE); |
887 | m_RepingCtl.EnableWindow(FALSE); | 890 | m_RepingCtl.EnableWindow(FALSE); |
888 | return; | 891 | return; |
889 | } | 892 | } |
890 | BOOL cl = m_ActiveThreads?FALSE:TRUE, rm = FALSE, ra = FALSE, rp = FALSE; | 893 | BOOL cl = m_ActiveThreads?FALSE:TRUE, rm = FALSE, ra = FALSE, rp = FALSE; |
891 | for(int tmp=0;tmp<items;tmp++){ | 894 | for(int tmp=0;tmp<items;tmp++){ |
892 | CPingyHost *host = (CPingyHost*)m_HostList.GetItemData(tmp); | 895 | CPingyHost *host = (CPingyHost*)m_HostList.GetItemData(tmp); |
893 | if(!host->m_Pinging){ | 896 | if(!host->m_Pinging){ |
894 | ra=TRUE; | 897 | ra=TRUE; |
895 | if(m_HostList.GetItemState(tmp,LVIS_SELECTED)&LVIS_SELECTED){ | 898 | if(m_HostList.GetItemState(tmp,LVIS_SELECTED)&LVIS_SELECTED){ |
896 | rp = TRUE; | 899 | rp = TRUE; |
897 | rm = TRUE; | 900 | rm = TRUE; |
898 | break; | 901 | break; |
899 | } | 902 | } |
900 | } | 903 | } |
901 | } | 904 | } |
902 | m_ClearListCtl.EnableWindow(cl); | 905 | m_ClearListCtl.EnableWindow(cl); |
903 | m_RemoveCtl.EnableWindow(rm); | 906 | m_RemoveCtl.EnableWindow(rm); |
904 | m_RepingAllCtl.EnableWindow(ra); | 907 | m_RepingAllCtl.EnableWindow(ra); |
905 | m_RepingCtl.EnableWindow(rp); | 908 | m_RepingCtl.EnableWindow(rp); |
906 | } | 909 | } |
907 | 910 | ||
908 | void CDipstickDlg::OnRemove() | 911 | void CDipstickDlg::OnRemove() |
909 | { | 912 | { |
910 | if(!m_HostList.GetSelectedCount()) | 913 | if(!m_HostList.GetSelectedCount()) |
911 | return; | 914 | return; |
912 | intitems = m_HostList.GetItemCount(); | 915 | intitems = m_HostList.GetItemCount(); |
913 | for(int tmp=0;tmp<items;tmp++){ | 916 | for(int tmp=0;tmp<items;tmp++){ |
914 | if(!(m_HostList.GetItemState(tmp,LVIS_SELECTED)&LVIS_SELECTED)) | 917 | if(!(m_HostList.GetItemState(tmp,LVIS_SELECTED)&LVIS_SELECTED)) |
915 | continue; | 918 | continue; |
916 | CPingyHost *host = (CPingyHost*) m_HostList.GetItemData(tmp); | 919 | CPingyHost *host = (CPingyHost*) m_HostList.GetItemData(tmp); |
917 | ASSERT(host); | 920 | ASSERT(host); |
918 | if(!host->m_Pinging) | 921 | if(!host->m_Pinging) |
919 | RemovePingyHost(host,tmp); | 922 | RemovePingyHost(host,tmp); |
920 | } | 923 | } |
921 | } | 924 | } |
922 | 925 | ||
923 | void CDipstickDlg::OnRclickHostlist(NMHDR* pNMHDR, LRESULT* pResult) | 926 | void CDipstickDlg::OnRclickHostlist(NMHDR* pNMHDR, LRESULT* pResult) |
924 | { | 927 | { |
925 | if(!m_HostList.GetSelectedCount()) | 928 | if(!m_HostList.GetSelectedCount()) |
926 | return; | 929 | return; |
927 | int items = m_HostList.GetItemCount(); | 930 | int items = m_HostList.GetItemCount(); |
928 | int item = -1; | 931 | int item = -1; |
929 | for(int tmp=0;tmp<items;tmp++){ | 932 | for(int tmp=0;tmp<items;tmp++){ |
930 | ints = m_HostList.GetItemState(tmp,LVIS_SELECTED|LVIS_FOCUSED); | 933 | ints = m_HostList.GetItemState(tmp,LVIS_SELECTED|LVIS_FOCUSED); |
931 | if(s&LVIS_FOCUSED){ | 934 | if(s&LVIS_FOCUSED){ |
932 | item = tmp; | 935 | item = tmp; |
933 | break; | 936 | break; |
934 | } | 937 | } |
935 | if(s&LVIS_SELECTED) | 938 | if(s&LVIS_SELECTED) |
936 | item=tmp; | 939 | item=tmp; |
937 | } | 940 | } |
938 | ASSERT(item>=0); | 941 | ASSERT(item>=0); |
939 | CPoint p; | 942 | CPoint p; |
940 | VERIFY(m_HostList.GetItemPosition(item,&p)); | 943 | VERIFY(m_HostList.GetItemPosition(item,&p)); |
941 | CPingyHost *host = (CPingyHost*)m_HostList.GetItemData(item); | 944 | CPingyHost *host = (CPingyHost*)m_HostList.GetItemData(item); |
942 | ASSERT(host); | 945 | ASSERT(host); |
943 | m_HostList.ClientToScreen(&p); | 946 | m_HostList.ClientToScreen(&p); |
944 | CMenu menus; | 947 | CMenu menus; |
945 | VERIFY(menus.LoadMenu(IDR_MENU)); | 948 | VERIFY(menus.LoadMenu(IDR_MENU)); |
946 | CMenu *popUp = menus.GetSubMenu(1); | 949 | CMenu *popUp = menus.GetSubMenu(1); |
947 | ASSERT(popUp); | 950 | ASSERT(popUp); |
948 | UpdateControlButtons(); | 951 | UpdateControlButtons(); |
949 | popUp->EnableMenuItem(ID_HOSTLIST_REPING,MF_BYCOMMAND|(m_RepingCtl.IsWindowEnabled()?MF_ENABLED:MF_GRAYED)); | 952 | popUp->EnableMenuItem(ID_HOSTLIST_REPING,MF_BYCOMMAND|(m_RepingCtl.IsWindowEnabled()?MF_ENABLED:MF_GRAYED)); |
950 | popUp->EnableMenuItem(ID_HOSTLIST_REMOVE,MF_BYCOMMAND|(m_RemoveCtl.IsWindowEnabled()?MF_ENABLED:MF_GRAYED)); | 953 | popUp->EnableMenuItem(ID_HOSTLIST_REMOVE,MF_BYCOMMAND|(m_RemoveCtl.IsWindowEnabled()?MF_ENABLED:MF_GRAYED)); |
951 | popUp->EnableMenuItem(ID_HOSTLIST_REMOVEALL,MF_BYCOMMAND|(m_ClearListCtl.IsWindowEnabled()?MF_ENABLED:MF_GRAYED)); | 954 | popUp->EnableMenuItem(ID_HOSTLIST_REMOVEALL,MF_BYCOMMAND|(m_ClearListCtl.IsWindowEnabled()?MF_ENABLED:MF_GRAYED)); |
952 | popUp->EnableMenuItem(ID_HOSTLIST_REPINGALL,MF_BYCOMMAND|(m_RepingAllCtl.IsWindowEnabled()?MF_ENABLED:MF_GRAYED)); | 955 | popUp->EnableMenuItem(ID_HOSTLIST_REPINGALL,MF_BYCOMMAND|(m_RepingAllCtl.IsWindowEnabled()?MF_ENABLED:MF_GRAYED)); |
953 | popUp->EnableMenuItem(ID_HOSTLIST_OPENURL,MF_BYCOMMAND|((m_HostList.GetSelectedCount()==1 && !host->m_URL.IsEmpty())?MF_ENABLED:MF_GRAYED)); | 956 | popUp->EnableMenuItem(ID_HOSTLIST_OPENURL,MF_BYCOMMAND|((m_HostList.GetSelectedCount()==1 && !host->m_URL.IsEmpty())?MF_ENABLED:MF_GRAYED)); |
954 | popUp->EnableMenuItem(ID_HOSTLIST_COPYURL,MF_BYCOMMAND|((m_HostList.GetSelectedCount()==1 && !host->m_URL.IsEmpty())?MF_ENABLED:MF_GRAYED)); | 957 | popUp->EnableMenuItem(ID_HOSTLIST_COPYURL,MF_BYCOMMAND|((m_HostList.GetSelectedCount()==1 && !host->m_URL.IsEmpty())?MF_ENABLED:MF_GRAYED)); |
955 | popUp->EnableMenuItem(ID_HOSTLIST_PROPERTIES,MF_BYCOMMAND|((m_HostList.GetSelectedCount()==1)?MF_ENABLED:MF_GRAYED)); | 958 | popUp->EnableMenuItem(ID_HOSTLIST_PROPERTIES,MF_BYCOMMAND|((m_HostList.GetSelectedCount()==1)?MF_ENABLED:MF_GRAYED)); |
956 | popUp->EnableMenuItem(ID_HOSTLIST_PASTEURL,MF_BYCOMMAND|(IsPasteableClipboard()?MF_ENABLED:MF_GRAYED)); | 959 | popUp->EnableMenuItem(ID_HOSTLIST_PASTEURL,MF_BYCOMMAND|(IsPasteableClipboard()?MF_ENABLED:MF_GRAYED)); |
957 | popUp->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON|TPM_LEFTBUTTON,p.x,p.y,this); | 960 | popUp->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON|TPM_LEFTBUTTON,p.x,p.y,this); |
958 | *pResult = 0; | 961 | *pResult = 0; |
959 | } | 962 | } |
960 | 963 | ||
961 | void CDipstickDlg::OnHostListReping() | 964 | void CDipstickDlg::OnHostListReping() |
962 | { | 965 | { |
963 | OnReping(); | 966 | OnReping(); |
964 | } | 967 | } |
965 | void CDipstickDlg::OnHostListRemove() | 968 | void CDipstickDlg::OnHostListRemove() |
966 | { | 969 | { |
967 | OnRemove(); | 970 | OnRemove(); |
968 | } | 971 | } |
969 | void CDipstickDlg::OnHostListRepingAll() | 972 | void CDipstickDlg::OnHostListRepingAll() |
970 | { | 973 | { |
971 | OnRepingall(); | 974 | OnRepingall(); |
972 | } | 975 | } |
973 | void CDipstickDlg::OnHostListRemoveAll() | 976 | void CDipstickDlg::OnHostListRemoveAll() |
974 | { | 977 | { |
975 | OnClear(); | 978 | OnClear(); |
976 | } | 979 | } |
977 | void CDipstickDlg::OnHostListOpenURL() | 980 | void CDipstickDlg::OnHostListOpenURL() |
978 | { | 981 | { |
979 | if(m_HostList.GetSelectedCount()!=1) | 982 | if(m_HostList.GetSelectedCount()!=1) |
980 | return; | 983 | return; |
981 | int items = m_HostList.GetItemCount(); | 984 | int items = m_HostList.GetItemCount(); |
982 | for(int tmp=0;tmp<items;tmp++){ | 985 | for(int tmp=0;tmp<items;tmp++){ |
983 | if((m_HostList.GetItemState(tmp,LVIS_SELECTED|LVIS_FOCUSED))&LVIS_SELECTED) | 986 | if((m_HostList.GetItemState(tmp,LVIS_SELECTED|LVIS_FOCUSED))&LVIS_SELECTED) |
984 | break; | 987 | break; |
985 | } | 988 | } |
986 | ASSERT(tmp<items); | 989 | ASSERT(tmp<items); |
987 | CPingyHost *host = (CPingyHost*)m_HostList.GetItemData(tmp); | 990 | CPingyHost *host = (CPingyHost*)m_HostList.GetItemData(tmp); |
988 | ASSERT(host); | 991 | ASSERT(host); |
989 | if(!host->m_URL.IsEmpty()) | 992 | if(!host->m_URL.IsEmpty()) |
990 | ShellExecute(::GetDesktopWindow(),NULL,host->m_URL,NULL,NULL,SW_SHOWMAXIMIZED); | 993 | ShellExecute(::GetDesktopWindow(),NULL,host->m_URL,NULL,NULL,SW_SHOWMAXIMIZED); |
991 | } | 994 | } |
992 | 995 | ||
993 | void CDipstickDlg::OnHostListProperties() | 996 | void CDipstickDlg::OnHostListProperties() |
994 | { | 997 | { |
995 | if(m_HostList.GetSelectedCount()!=1) | 998 | if(m_HostList.GetSelectedCount()!=1) |
996 | return; | 999 | return; |
997 | int items = m_HostList.GetItemCount(); | 1000 | int items = m_HostList.GetItemCount(); |
998 | for(int tmp=0;tmp<items;tmp++){ | 1001 | for(int tmp=0;tmp<items;tmp++){ |
999 | if((m_HostList.GetItemState(tmp,LVIS_SELECTED|LVIS_FOCUSED))&LVIS_SELECTED) | 1002 | if((m_HostList.GetItemState(tmp,LVIS_SELECTED|LVIS_FOCUSED))&LVIS_SELECTED) |
1000 | break; | 1003 | break; |
1001 | } | 1004 | } |
1002 | ASSERT(tmp<items); | 1005 | ASSERT(tmp<items); |
1003 | CPingyHost *host = (CPingyHost*)m_HostList.GetItemData(tmp); | 1006 | CPingyHost *host = (CPingyHost*)m_HostList.GetItemData(tmp); |
1004 | ASSERT(host); | 1007 | ASSERT(host); |
1005 | CHostProperties hp(this); | 1008 | CHostProperties hp(this); |
1006 | hp.SetHost(host); | 1009 | hp.SetHost(host); |
1007 | hp.DoModal(); | 1010 | hp.DoModal(); |
1008 | } | 1011 | } |
1009 | 1012 | ||
1010 | void CDipstickDlg::OnDblclkHostlist(NMHDR* pNMHDR, LRESULT* pResult) | 1013 | void CDipstickDlg::OnDblclkHostlist(NMHDR* pNMHDR, LRESULT* pResult) |
1011 | { | 1014 | { |
1012 | OnHostListOpenURL(); | 1015 | OnHostListOpenURL(); |
1013 | *pResult = 0; | 1016 | *pResult = 0; |
1014 | } | 1017 | } |
1015 | 1018 | ||
1016 | void CDipstickDlg::OnClose() | 1019 | void CDipstickDlg::OnClose() |
1017 | { | 1020 | { |
1018 | m_bShown=FALSE; | 1021 | m_bShown=FALSE; |
1019 | ShowWindow(SW_HIDE); | 1022 | ShowWindow(SW_HIDE); |
1020 | } | 1023 | } |
1021 | 1024 | ||
1022 | BOOL CAboutDlg::OnInitDialog() | 1025 | BOOL CAboutDlg::OnInitDialog() |
1023 | { | 1026 | { |
1024 | CDialog::OnInitDialog(); | 1027 | CDialog::OnInitDialog(); |
1025 | return TRUE; | 1028 | return TRUE; |
1026 | } | 1029 | } |
1027 | 1030 | ||
1028 | void CDipstickDlg::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) | 1031 | void CDipstickDlg::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) |
1029 | { | 1032 | { |
1030 | CDialog::OnGetMinMaxInfo(lpMMI); | 1033 | CDialog::OnGetMinMaxInfo(lpMMI); |
1031 | if(m_MinSize.cx>0 && m_MinSize.cy>0){ | 1034 | if(m_MinSize.cx>0 && m_MinSize.cy>0){ |
1032 | lpMMI->ptMinTrackSize.x = m_MinSize.cx; | 1035 | lpMMI->ptMinTrackSize.x = m_MinSize.cx; |
1033 | lpMMI->ptMinTrackSize.y = m_MinSize.cy; | 1036 | lpMMI->ptMinTrackSize.y = m_MinSize.cy; |
1034 | } | 1037 | } |
1035 | } | 1038 | } |
1036 | 1039 | ||
1037 | void CDipstickDlg::OnSize(UINT nType, int cx, int cy) | 1040 | void CDipstickDlg::OnSize(UINT nType, int cx, int cy) |
1038 | { | 1041 | { |
1039 | CDialog::OnSize(nType, cx, cy); | 1042 | CDialog::OnSize(nType, cx, cy); |
1040 | if(nType==SIZE_RESTORED) | 1043 | if(nType==SIZE_RESTORED) |
1041 | RecalcLayout(cx,cy); | 1044 | RecalcLayout(cx,cy); |
1042 | } | 1045 | } |
1043 | 1046 | ||
1044 | void CDipstickDlg::RecalcLayout(int,int) | 1047 | void CDipstickDlg::RecalcLayout(int,int) |
1045 | { | 1048 | { |
1046 | CRect wrc; | 1049 | CRect wrc; |
1047 | GetClientRect(&wrc); | 1050 | GetClientRect(&wrc); |
1048 | CRect brc; | 1051 | CRect brc; |
1049 | m_ManualPingCtl.GetWindowRect(&brc); | 1052 | m_ManualPingCtl.GetWindowRect(&brc); |
1050 | m_HostList.SetWindowPos(NULL,m_OverX,m_OverY,wrc.Width()-m_OverX*3-brc.Width(),wrc.Height()-m_OverY*2,SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOZORDER); | 1053 | m_HostList.SetWindowPos(NULL,m_OverX,m_OverY,wrc.Width()-m_OverX*3-brc.Width(),wrc.Height()-m_OverY*2,SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOZORDER); |
1051 | int xb = wrc.Width()-m_OverX-brc.Width(); | 1054 | int xb = wrc.Width()-m_OverX-brc.Width(); |
1052 | int cyb = brc.Height()+m_GapY; | 1055 | int cyb = brc.Height()+m_GapY; |
1053 | m_ManualPingCtl.SetWindowPos(NULL,xb,m_OverY,0,0,SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER|SWP_NOCOPYBITS); | 1056 | m_ManualPingCtl.SetWindowPos(NULL,xb,m_OverY,0,0,SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER|SWP_NOCOPYBITS); |
1054 | m_RepingCtl.SetWindowPos(NULL,xb,m_OverY+cyb,0,0,SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER|SWP_NOCOPYBITS); | 1057 | m_RepingCtl.SetWindowPos(NULL,xb,m_OverY+cyb,0,0,SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER|SWP_NOCOPYBITS); |
1055 | m_RepingAllCtl.SetWindowPos(NULL,xb,m_OverY+cyb*2,0,0,SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER|SWP_NOCOPYBITS); | 1058 | m_RepingAllCtl.SetWindowPos(NULL,xb,m_OverY+cyb*2,0,0,SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER|SWP_NOCOPYBITS); |
1056 | m_RemoveCtl.SetWindowPos(NULL,xb,m_OverY+cyb*3,0,0,SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER|SWP_NOCOPYBITS); | 1059 | m_RemoveCtl.SetWindowPos(NULL,xb,m_OverY+cyb*3,0,0,SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER|SWP_NOCOPYBITS); |
1057 | m_ClearListCtl.SetWindowPos(NULL,xb,m_OverY+cyb*4,0,0,SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER|SWP_NOCOPYBITS); | 1060 | m_ClearListCtl.SetWindowPos(NULL,xb,m_OverY+cyb*4,0,0,SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER|SWP_NOCOPYBITS); |
1058 | m_AdvancedCtl.SetWindowPos(NULL,xb,m_OverY+cyb*5,0,0,SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER|SWP_NOCOPYBITS); | 1061 | m_AdvancedCtl.SetWindowPos(NULL,xb,m_OverY+cyb*5,0,0,SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER|SWP_NOCOPYBITS); |
1059 | m_ExitCtl.SetWindowPos(NULL,xb,wrc.Height()-m_OverY-brc.Height(),0,0,SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER|SWP_NOCOPYBITS); | 1062 | m_ExitCtl.SetWindowPos(NULL,xb,wrc.Height()-m_OverY-brc.Height(),0,0,SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER|SWP_NOCOPYBITS); |
1060 | m_OptionsCtl.SetWindowPos(NULL,xb,wrc.Height()-m_OverY-cyb-brc.Height(),0,0,SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER|SWP_NOCOPYBITS); | 1063 | m_OptionsCtl.SetWindowPos(NULL,xb,wrc.Height()-m_OverY-cyb-brc.Height(),0,0,SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER|SWP_NOCOPYBITS); |
1061 | m_HelpCtl.SetWindowPos(NULL,xb,wrc.Height()-m_OverY-cyb*2-brc.Height(),0,0,SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER|SWP_NOCOPYBITS); | 1064 | m_HelpCtl.SetWindowPos(NULL,xb,wrc.Height()-m_OverY-cyb*2-brc.Height(),0,0,SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER|SWP_NOCOPYBITS); |
1062 | } | 1065 | } |
1063 | 1066 | ||
1064 | void CDipstickDlg::OnHelp() | 1067 | void CDipstickDlg::OnHelp() |
1065 | { | 1068 | { |
1066 | WinHelp(0,HELP_FINDER); | 1069 | WinHelp(0,HELP_FINDER); |
1067 | } | 1070 | } |
1068 | 1071 | ||
1069 | void CDipstickDlg::UpdateDragpadTitle() | 1072 | void CDipstickDlg::UpdateDragpadTitle() |
1070 | { | 1073 | { |
1071 | int ic = m_HostList.GetItemCount(); | 1074 | int ic = m_HostList.GetItemCount(); |
1072 | CString title; | 1075 | CString title; |
1073 | if(!ic){ | 1076 | if(!ic){ |
1074 | VERIFY(title.LoadString(IDS_DRAGPAD_TITLE)); | 1077 | VERIFY(title.LoadString(IDS_DRAGPAD_TITLE)); |
1075 | }else{ | 1078 | }else{ |
1076 | int ip = 0; | 1079 | int ip = 0; |
1077 | POSITION p = m_Hosts.GetHeadPosition(); | 1080 | POSITION p = m_Hosts.GetHeadPosition(); |
1078 | while(p){ | 1081 | while(p){ |
1079 | CPingyHost *host = m_Hosts.GetNext(p); | 1082 | CPingyHost *host = m_Hosts.GetNext(p); |
1080 | ASSERT(host); | 1083 | ASSERT(host); |
1081 | if(!(host->m_Pinging || host->m_bToPing)) | 1084 | if(!(host->m_Pinging || host->m_bToPing)) |
1082 | ip++; | 1085 | ip++; |
1083 | } | 1086 | } |
1084 | title.Format(IDS_DRAGPAD_URLS,ip,ic); | 1087 | title.Format(IDS_DRAGPAD_URLS,ip,ic); |
1085 | } | 1088 | } |
1086 | if(m_DragPad) | 1089 | if(m_DragPad) |
1087 | m_DragPad->SetWindowText(title); | 1090 | m_DragPad->SetWindowText(title); |
1088 | } | 1091 | } |
1089 | 1092 | ||
1090 | void CDipstickDlg::OnBegindragHostlist(NMHDR* pNMHDR, LRESULT* pResult) | 1093 | void CDipstickDlg::OnBegindragHostlist(NMHDR* pNMHDR, LRESULT* pResult) |
1091 | { | 1094 | { |
1092 | NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; | 1095 | NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; |
1093 | 1096 | ||
1094 | if(pNMListView->iItem>=0){ | 1097 | if(pNMListView->iItem>=0){ |
1095 | CPingyHost *host = (CPingyHost*) m_HostList.GetItemData(pNMListView->iItem); | 1098 | CPingyHost *host = (CPingyHost*) m_HostList.GetItemData(pNMListView->iItem); |
1096 | ASSERT(host); | 1099 | ASSERT(host); |
1097 | if(!host->m_URL.IsEmpty()){ | 1100 | if(!host->m_URL.IsEmpty()){ |
1098 | CURLSource us(host->m_URL); | 1101 | CURLSource us(host->m_URL); |
1099 | us.DoDragDrop(DROPEFFECT_COPY|DROPEFFECT_LINK); | 1102 | us.DoDragDrop(DROPEFFECT_COPY|DROPEFFECT_LINK); |
1100 | } | 1103 | } |
1101 | } | 1104 | } |
1102 | 1105 | ||
1103 | *pResult = 0; | 1106 | *pResult = 0; |
1104 | } | 1107 | } |
1105 | 1108 | ||
1106 | void CDipstickDlg::OnPasteurl() | 1109 | void CDipstickDlg::OnPasteurl() |
1107 | { | 1110 | { |
1108 | COleDataObject odo; | 1111 | COleDataObject odo; |
1109 | if(!odo.AttachClipboard()) | 1112 | if(!odo.AttachClipboard()) |
1110 | return; | 1113 | return; |
1111 | CollectURLs(&odo,FALSE); | 1114 | CollectURLs(&odo,FALSE); |
1112 | } | 1115 | } |
1113 | 1116 | ||
1114 | BOOL CDipstickDlg::IsPasteableClipboard() | 1117 | BOOL CDipstickDlg::IsPasteableClipboard() |
1115 | { | 1118 | { |
1116 | COleDataObject odo; | 1119 | COleDataObject odo; |
1117 | if(!odo.AttachClipboard()) | 1120 | if(!odo.AttachClipboard()) |
1118 | return FALSE; | 1121 | return FALSE; |
1119 | if(CollectURLs(&odo,TRUE)) | 1122 | if(CollectURLs(&odo,TRUE)) |
1120 | return TRUE; | 1123 | return TRUE; |
1121 | return FALSE; | 1124 | return FALSE; |
1122 | } | 1125 | } |
1123 | 1126 | ||
1124 | BOOL CDipstickDlg::CollectURLs(COleDataObject* pDO,BOOL bTestOnly) | 1127 | BOOL CDipstickDlg::CollectURLs(COleDataObject* pDO,BOOL bTestOnly) |
1125 | { | 1128 | { |
1126 | UINTcfURL = RegisterClipboardFormat("UniformResourceLocator"); | 1129 | UINTcfURL = RegisterClipboardFormat("UniformResourceLocator"); |
1127 | UINTcfHTML = RegisterClipboardFormat("HTML Format"); | 1130 | UINTcfHTML = RegisterClipboardFormat("HTML Format"); |
1128 | UINTcfNIF = RegisterClipboardFormat("Netscape Image Format"); | 1131 | UINTcfNIF = RegisterClipboardFormat("Netscape Image Format"); |
1129 | if(pDO->IsDataAvailable(cfURL)){ | 1132 | if(pDO->IsDataAvailable(cfURL)){ |
1130 | if(!bTestOnly){ | 1133 | if(!bTestOnly){ |
1131 | HGLOBAL hg = pDO->GetGlobalData(cfURL); | 1134 | HGLOBAL hg = pDO->GetGlobalData(cfURL); |
1132 | ASSERT(hg); | 1135 | ASSERT(hg); |
1133 | LPVOID lpv = GlobalLock(hg); | 1136 | LPVOID lpv = GlobalLock(hg); |
1134 | ASSERT(lpv); | 1137 | ASSERT(lpv); |
1135 | PostMessage(WM_DNP_URLPING,0,(LPARAM)new CString((LPCTSTR)lpv)); | 1138 | PostMessage(WM_DNP_URLPING,0,(LPARAM)new CString((LPCTSTR)lpv)); |
1136 | GlobalUnlock(hg); | 1139 | GlobalUnlock(hg); |
1137 | GlobalFree(hg); | 1140 | GlobalFree(hg); |
1138 | } | 1141 | } |
1139 | return TRUE; | 1142 | return TRUE; |
1140 | } | 1143 | } |
1141 | if(pDO->IsDataAvailable(cfHTML)){ | 1144 | if(pDO->IsDataAvailable(cfHTML)){ |
1142 | HGLOBAL hg = pDO->GetGlobalData(cfHTML); | 1145 | HGLOBAL hg = pDO->GetGlobalData(cfHTML); |
1143 | ASSERT(hg); | 1146 | ASSERT(hg); |
1144 | LPCTSTR lps = (LPCTSTR)GlobalLock(hg); | 1147 | LPCTSTR lps = (LPCTSTR)GlobalLock(hg); |
1145 | ASSERT(lps); | 1148 | ASSERT(lps); |
1146 | BOOL rv = FALSE; | 1149 | BOOL rv = FALSE; |
1147 | do{ | 1150 | do{ |
1148 | static LPCTSTR v10 = "Version:1.0\r\n"; | 1151 | static LPCTSTR v10 = "Version:1.0\r\n"; |
1149 | if(memcmp(v10,lps,strlen(v10))) | 1152 | if(memcmp(v10,lps,strlen(v10))) |
1150 | break; | 1153 | break; |
1151 | static LPCTSTR strStartSelection = "StartSelection:"; | 1154 | static LPCTSTR strStartSelection = "StartSelection:"; |
1152 | static LPCTSTR strEndSelection = "EndSelection:"; | 1155 | static LPCTSTR strEndSelection = "EndSelection:"; |
1153 | static LPCTSTR strSourceURL = "SourceURL:"; | 1156 | static LPCTSTR strSourceURL = "SourceURL:"; |
1154 | LPTSTR subs = strstr(lps,strStartSelection); | 1157 | LPTSTR subs = strstr(lps,strStartSelection); |
1155 | if(!subs) | 1158 | if(!subs) |
1156 | break; | 1159 | break; |
1157 | LONG startSelection = atol(&subs[strlen(strStartSelection)]); | 1160 | LONG startSelection = atol(&subs[strlen(strStartSelection)]); |
1158 | if(!startSelection) | 1161 | if(!startSelection) |
1159 | break; | 1162 | break; |
1160 | if(!(subs=strstr(lps,strEndSelection))) | 1163 | if(!(subs=strstr(lps,strEndSelection))) |
1161 | break; | 1164 | break; |
1162 | LONG endSelection = atol(&subs[strlen(strEndSelection)]); | 1165 | LONG endSelection = atol(&subs[strlen(strEndSelection)]); |
1163 | if(!endSelection) | 1166 | if(!endSelection) |
1164 | break; | 1167 | break; |
1165 | if(!(subs=strstr(lps,strSourceURL))) | 1168 | if(!(subs=strstr(lps,strSourceURL))) |
1166 | break; | 1169 | break; |
1167 | subs = &subs[strlen(strSourceURL)]; | 1170 | subs = &subs[strlen(strSourceURL)]; |
1168 | LPTSTR eol = strchr(subs,'\r'); | 1171 | LPTSTR eol = strchr(subs,'\r'); |
1169 | if(!eol) | 1172 | if(!eol) |
1170 | break; | 1173 | break; |
1171 | (*eol)=0; | 1174 | (*eol)=0; |
1172 | CString sourceURL = subs; | 1175 | CString sourceURL = subs; |
1173 | if(!sourceURL.GetLength()) | 1176 | if(!sourceURL.GetLength()) |
1174 | break; | 1177 | break; |
1175 | TRACE0("SourceURL = "+sourceURL+"\n"); | 1178 | TRACE0("SourceURL = "+sourceURL+"\n"); |
1176 | _xferHTML* xf = new _xferHTML; | 1179 | _xferHTML* xf = new _xferHTML; |
1177 | VERIFY(xf->src.Crack(sourceURL)); | 1180 | VERIFY(xf->src.Crack(sourceURL)); |
1178 | LPTSTR htmlBuff = xf->html.GetBuffer(endSelection-startSelection+2); | 1181 | LPTSTR htmlBuff = xf->html.GetBuffer(endSelection-startSelection+2); |
1179 | ASSERT(htmlBuff); | 1182 | ASSERT(htmlBuff); |
1180 | memmove(htmlBuff,&lps[startSelection],endSelection-startSelection+1); | 1183 | memmove(htmlBuff,&lps[startSelection],endSelection-startSelection+1); |
1181 | htmlBuff[endSelection-startSelection+1]=0; | 1184 | htmlBuff[endSelection-startSelection+1]=0; |
1182 | xf->html.ReleaseBuffer(); | 1185 | xf->html.ReleaseBuffer(); |
1183 | if(bTestOnly){ | 1186 | if(bTestOnly){ |
1184 | rv = m_reHTMLURL.Match(xf->html); | 1187 | rv = m_reHTMLURL.Match(xf->html); |
1185 | delete xf; | 1188 | delete xf; |
1186 | }else{ | 1189 | }else{ |
1187 | PostMessage(WM_DNP_HTML,0,(LPARAM)xf); | 1190 | PostMessage(WM_DNP_HTML,0,(LPARAM)xf); |
1191 | rv = TRUE; | ||
1188 | } | 1192 | } |
1189 | }while(FALSE); | 1193 | }while(FALSE); |
1190 | GlobalUnlock(hg); | 1194 | GlobalUnlock(hg); |
1191 | GlobalFree(hg); | 1195 | GlobalFree(hg); |
1192 | return rv; | 1196 | return rv; |
1193 | } | 1197 | } |
1194 | if(pDO->IsDataAvailable(cfNIF)){ | 1198 | if(pDO->IsDataAvailable(cfNIF)){ |
1195 | if(!bTestOnly){ | 1199 | if(!bTestOnly){ |
1196 | HGLOBAL hg = pDO->GetGlobalData(cfNIF); | 1200 | HGLOBAL hg = pDO->GetGlobalData(cfNIF); |
1197 | ASSERT(hg); | 1201 | ASSERT(hg); |
1198 | LPVOID lpv = GlobalLock(hg); | 1202 | LPVOID lpv = GlobalLock(hg); |
1199 | ASSERT(lpv); | 1203 | ASSERT(lpv); |
1200 | struct _nif{ | 1204 | struct _nif{ |
1201 | BYTE data[0x20]; | 1205 | BYTE data[0x20]; |
1202 | DWORD m_offDescr; | 1206 | DWORD m_offDescr; |
1203 | DWORD m_offURL; | 1207 | DWORD m_offURL; |
1204 | DWORD m_offToImage; | 1208 | DWORD m_offToImage; |
1205 | } *nif = (_nif*)lpv; | 1209 | } *nif = (_nif*)lpv; |
1206 | PostMessage(WM_DNP_URLPING,0,(LPARAM)new CString((LPCTSTR)&nif->data[nif->m_offURL])); | 1210 | PostMessage(WM_DNP_URLPING,0,(LPARAM)new CString((LPCTSTR)&nif->data[nif->m_offURL])); |
1207 | GlobalUnlock(hg); | 1211 | GlobalUnlock(hg); |
1208 | GlobalFree(hg); | 1212 | GlobalFree(hg); |
1209 | } | 1213 | } |
1210 | return TRUE; | 1214 | return TRUE; |
1211 | } | 1215 | } |
1212 | if(pDO->IsDataAvailable(CF_TEXT)){ | 1216 | if(pDO->IsDataAvailable(CF_TEXT)){ |
1213 | if(!bTestOnly){ | 1217 | BOOL rv = FALSE; |
1214 | HGLOBAL hg = pDO->GetGlobalData(CF_TEXT); | 1218 | HGLOBAL hg = pDO->GetGlobalData(CF_TEXT); |
1215 | ASSERT(hg); | 1219 | ASSERT(hg); |
1216 | LPVOID lpv = GlobalLock(hg); | 1220 | LPVOID lpv = GlobalLock(hg); |
1217 | ASSERT(lpv); | 1221 | ASSERT(lpv); |
1218 | PostMessage(WM_DNP_URLPING,0,(LPARAM)new CString((LPCTSTR)lpv)); | 1222 | if(bTestOnly){ |
1219 | GlobalUnlock(hg); | 1223 | rv = m_reURL.Match((LPCSTR)lpv); |
1220 | GlobalFree(hg); | 1224 | }else{ |
1225 | CString sel = (LPCSTR)lpv; | ||
1226 | if(m_reURL.Match(sel)) { | ||
1227 | rv = TRUE; | ||
1228 | CString tmp = m_reURL.GetMatch(CRegEx::matchPostMatch); | ||
1229 | if(m_reURL.Match(tmp)) { | ||
1230 | PostMessage(WM_DNP_URLSPING,0,(LPARAM)new CString((LPCSTR)lpv)); | ||
1231 | }else{ | ||
1232 | PostMessage(WM_DNP_URLPING,0,(LPARAM)new CString((LPCTSTR)lpv)); | ||
1233 | } | ||
1234 | } | ||
1221 | } | 1235 | } |
1222 | return TRUE; | 1236 | GlobalUnlock(hg); |
1237 | GlobalFree(hg); | ||
1238 | return rv; | ||
1223 | } | 1239 | } |
1224 | return FALSE; | 1240 | return FALSE; |
1225 | } | 1241 | } |
1226 | 1242 | ||
1227 | LRESULT CDipstickDlg::OnHTMLTransfer(WPARAM wP, LPARAM lP) | 1243 | LRESULT CDipstickDlg::OnHTMLTransfer(WPARAM wP, LPARAM lP) |
1228 | { | 1244 | { |
1229 | _xferHTML* xf = (_xferHTML*)lP; | 1245 | _xferHTML* xf = (_xferHTML*)lP; |
1230 | CSelectURLsDlg su; | 1246 | CSelectURLsDlg su; |
1231 | su.m_bAdjust = m_bSmartAdjust; | 1247 | su.m_bAdjust = m_bSmartAdjust; |
1232 | su.m_bAdjustInnermost = m_bAdjustInnermost; | 1248 | su.m_bAdjustInnermost = m_bAdjustInnermost; |
1233 | BeginWaitCursor(); | 1249 | BeginWaitCursor(); |
1234 | while(m_reHTMLURL.Match(xf->html)){ | 1250 | while(m_reHTMLURL.Match(xf->html)){ |
1235 | CString url = m_reHTMLURL.GetMatch(1); | 1251 | CString url = m_reHTMLURL.GetMatch(1); |
1236 | xf->html = m_reHTMLURL.GetMatch(CRegEx::matchPostMatch); | 1252 | xf->html = m_reHTMLURL.GetMatch(CRegEx::matchPostMatch); |
1237 | if(CCrackURL::GetHostName(url)==url){ | 1253 | if(CCrackURL::GetHostName(url)==url){ |
1238 | if(m_bIgnorelative) | 1254 | if(m_bIgnorelative) |
1239 | continue; | 1255 | continue; |
1240 | CCrackURL cracked; | 1256 | CCrackURL cracked; |
1241 | VERIFY(cracked.Crack(url)); | 1257 | VERIFY(cracked.Crack(url)); |
1242 | cracked.Adjust(xf->src); | 1258 | cracked.Adjust(xf->src); |
1243 | url = cracked.Build(); | 1259 | url = cracked.Build(); |
1244 | } | 1260 | } |
1245 | if(!su.m_URLs.Find(url)) | 1261 | if(!su.m_URLs.Find(url)) |
1246 | VERIFY(su.m_URLs.AddTail(url)); | 1262 | VERIFY(su.m_URLs.AddTail(url)); |
1247 | } | 1263 | } |
1248 | EndWaitCursor(); | 1264 | EndWaitCursor(); |
1249 | delete xf; | 1265 | delete xf; |
1250 | if(su.DoModal()==IDOK){ | 1266 | if(su.DoModal()==IDOK){ |
1251 | POSITION p = su.m_URLs.GetHeadPosition(); | 1267 | POSITION p = su.m_URLs.GetHeadPosition(); |
1252 | while(p){ | 1268 | while(p){ |
1253 | CString url = su.m_URLs.GetNext(p); | 1269 | CString url = su.m_URLs.GetNext(p); |
1254 | PostMessage(WM_DNP_URLPING,0,(LPARAM)new CString(url)); | 1270 | PostMessage(WM_DNP_URLPING,0,(LPARAM)new CString(url)); |
1255 | } | 1271 | } |
1256 | } | 1272 | } |
1257 | return 0; | 1273 | return 0; |
1258 | } | 1274 | } |
1259 | 1275 | ||
1276 | LRESULT CDipstickDlg::OnURLSPing(WPARAM wP,LPARAM lP) | ||
1277 | { | ||
1278 | CString *sel = (CString*)lP; | ||
1279 | TRACE1("URLS: %s\n",(LPCTSTR)*sel); | ||
1280 | CSelectURLsDlg su; | ||
1281 | su.m_bAdjust = m_bSmartAdjust; | ||
1282 | su.m_bAdjustInnermost = m_bAdjustInnermost; | ||
1283 | BeginWaitCursor(); | ||
1284 | while(m_reURL.Match(*sel)){ | ||
1285 | CString url = m_reURL.GetMatch(CRegEx::matchMatch); | ||
1286 | (*sel) = m_reURL.GetMatch(CRegEx::matchPostMatch); | ||
1287 | if(!su.m_URLs.Find(url)) | ||
1288 | VERIFY(su.m_URLs.AddTail(url)); | ||
1289 | } | ||
1290 | EndWaitCursor(); | ||
1291 | delete sel; | ||
1292 | if(su.DoModal()==IDOK){ | ||
1293 | POSITION p = su.m_URLs.GetHeadPosition(); | ||
1294 | while(p){ | ||
1295 | CString url = su.m_URLs.GetNext(p); | ||
1296 | PostMessage(WM_DNP_URLPING,0,(LPARAM)new CString(url)); | ||
1297 | } | ||
1298 | } | ||
1299 | return 0; | ||
1300 | } | ||
1301 | |||
1260 | UINT CPingyHost::PingProc(LPVOID pParam) | 1302 | UINT CPingyHost::PingProc(LPVOID pParam) |
1261 | { | 1303 | { |
1262 | CPingyHost* pThis = (CPingyHost*)pParam; | 1304 | CPingyHost* pThis = (CPingyHost*)pParam; |
1263 | ASSERT(pThis->m_Daddy); | 1305 | ASSERT(pThis->m_Daddy); |
1264 | return pThis->DoPing(); | 1306 | return pThis->DoPing(); |
1265 | } | 1307 | } |
1266 | 1308 | ||
1267 | UINT CPingyHost::DoPing() | 1309 | UINT CPingyHost::DoPing() |
1268 | { | 1310 | { |
1269 | CSingleLock slock(&m_mutex); | 1311 | CSingleLock slock(&m_mutex); |
1270 | if(!slock.Lock(2000)){ | 1312 | if(!slock.Lock(2000)){ |
1271 | m_Status.LoadString(IDS_PS_FAILEDTOLOCK); | 1313 | m_Status.LoadString(IDS_PS_FAILEDTOLOCK); |
1272 | return 1; | 1314 | return 1; |
1273 | } | 1315 | } |
1274 | m_Pinging = TRUE; | 1316 | m_Pinging = TRUE; |
1275 | m_bToPing = FALSE; | 1317 | m_bToPing = FALSE; |
1276 | VERIFY(m_Daddy->m_eveStartup.SetEvent()); | 1318 | VERIFY(m_Daddy->m_eveStartup.SetEvent()); |
1277 | m_Daddy->PostMessage(WM_DNP_UPDATEHOSTDATA,0,(LPARAM)this); | 1319 | m_Daddy->PostMessage(WM_DNP_UPDATEHOSTDATA,0,(LPARAM)this); |
1278 | in_addr ip; | 1320 | in_addr ip; |
1279 | UINT packets, lost; | 1321 | UINT packets, lost; |
1280 | packets=lost=0; | 1322 | packets=lost=0; |
1281 | CICMP* pICMP = NULL; | 1323 | CICMP* pICMP = NULL; |
1282 | UINT dataSize = m_Daddy->m_PingSize; | 1324 | UINT dataSize = m_Daddy->m_PingSize; |
1283 | intploss = 100; | 1325 | intploss = 100; |
1284 | do{ | 1326 | do{ |
1285 | if(m_HostName.IsEmpty()){ | 1327 | if(m_HostName.IsEmpty()){ |
1286 | ip.s_addr = m_IP; | 1328 | ip.s_addr = m_IP; |
1287 | hostent *he = gethostbyaddr((char*)&ip,4,PF_INET); | 1329 | hostent *he = gethostbyaddr((char*)&ip,4,PF_INET); |
1288 | if(!he) | 1330 | if(!he) |
1289 | m_HostName.Empty(); | 1331 | m_HostName.Empty(); |
1290 | else | 1332 | else |
1291 | m_HostName = he->h_name; | 1333 | m_HostName = he->h_name; |
1292 | }else{ | 1334 | }else{ |
1293 | hostent *he = gethostbyname(m_HostName); | 1335 | hostent *he = gethostbyname(m_HostName); |
1294 | if(!he){ | 1336 | if(!he){ |
1295 | m_Status.LoadString(IDS_PS_FAILEDTORESOLVE); | 1337 | m_Status.LoadString(IDS_PS_FAILEDTORESOLVE); |
1296 | m_IP = 0; | 1338 | m_IP = 0; |
1297 | break; | 1339 | break; |
1298 | } | 1340 | } |
1299 | memmove(&ip.s_addr,he->h_addr,sizeof(ip.s_addr)); | 1341 | memmove(&ip.s_addr,he->h_addr,sizeof(ip.s_addr)); |
1300 | m_IP = ip.s_addr; | 1342 | m_IP = ip.s_addr; |
1301 | } | 1343 | } |
1302 | pICMP = CICMP::CreateICMP(); | 1344 | pICMP = CICMP::CreateICMP(); |
1303 | if(!(pICMP && pICMP->Initialize())){ | 1345 | if(!(pICMP && pICMP->Initialize())){ |
1304 | m_Status.LoadString(IDS_PS_UNABLETOICMP); | 1346 | m_Status.LoadString(IDS_PS_UNABLETOICMP); |
1305 | break; | 1347 | break; |
1306 | } | 1348 | } |
1307 | m_Daddy->PostMessage(WM_DNP_UPDATEHOSTDATA,0,(LPARAM)this); | 1349 | m_Daddy->PostMessage(WM_DNP_UPDATEHOSTDATA,0,(LPARAM)this); |
1308 | ULONG sum, num, pmin, pmax; | 1350 | ULONG sum, num, pmin, pmax; |
1309 | sum = num = 0; | 1351 | sum = num = 0; |
1310 | pmin = 0xFFFFFFFF; | 1352 | pmin = 0xFFFFFFFF; |
1311 | pmax = 0; | 1353 | pmax = 0; |
1312 | UINT seq; | 1354 | UINT seq; |
1313 | for(seq = 0;seq<m_Daddy->m_PingsPerHost;seq++){ | 1355 | for(seq = 0;seq<m_Daddy->m_PingsPerHost;seq++){ |
1314 | INT status; | 1356 | INT status; |
1315 | LONG rtt = pICMP->Ping(ip,dataSize,m_Daddy->m_TimeOut,&status); | 1357 | LONG rtt = pICMP->Ping(ip,dataSize,m_Daddy->m_TimeOut,&status); |
1316 | UINT stString = 0; | 1358 | UINT stString = 0; |
1317 | switch(status){ | 1359 | switch(status){ |
1318 | case CICMP::ipSuccess: | 1360 | case CICMP::ipSuccess: |
1319 | sum+=rtt; num++; | 1361 | sum+=rtt; num++; |
1320 | if(rtt<pmin) | 1362 | if(rtt<pmin) |
1321 | pmin=rtt; | 1363 | pmin=rtt; |
1322 | if(rtt>pmax) | 1364 | if(rtt>pmax) |
1323 | pmax=rtt; | 1365 | pmax=rtt; |
1324 | break; | 1366 | break; |
1325 | case CICMP::ipBuffTooSmall: stString = IDS_PS_INTERNALERROR; | 1367 | case CICMP::ipBuffTooSmall: stString = IDS_PS_INTERNALERROR; |
1326 | break; | 1368 | break; |
1327 | case CICMP::ipDestNetUnreachable: stString = IDS_PS_NETUNREACHABLE; | 1369 | case CICMP::ipDestNetUnreachable: stString = IDS_PS_NETUNREACHABLE; |
1328 | break; | 1370 | break; |
1329 | case CICMP::ipDestHostUnreachable: stString = IDS_PS_HOSTUNREACHABLE; | 1371 | case CICMP::ipDestHostUnreachable: stString = IDS_PS_HOSTUNREACHABLE; |
1330 | break; | 1372 | break; |
1331 | case CICMP::ipDestProtUnreachable: stString = IDS_PS_PROTUNREACHABLE; | 1373 | case CICMP::ipDestProtUnreachable: stString = IDS_PS_PROTUNREACHABLE; |
1332 | break; | 1374 | break; |
1333 | case CICMP::ipDestPortUnreachable: stString = IDS_PS_PORTUNREACHABLE; | 1375 | case CICMP::ipDestPortUnreachable: stString = IDS_PS_PORTUNREACHABLE; |
1334 | break; | 1376 | break; |
1335 | case CICMP::ipNoResources: stString = IDS_PS_NORESOURCES; | 1377 | case CICMP::ipNoResources: stString = IDS_PS_NORESOURCES; |
1336 | break; | 1378 | break; |
1337 | case CICMP::ipBadOption: stString = IDS_PS_INTERNALERROR; | 1379 | case CICMP::ipBadOption: stString = IDS_PS_INTERNALERROR; |
1338 | break; | 1380 | break; |
1339 | case CICMP::ipHWError: stString = IDS_PS_HWERROR; | 1381 | case CICMP::ipHWError: stString = IDS_PS_HWERROR; |
1340 | break; | 1382 | break; |
1341 | case CICMP::ipPacketTooBig: stString = IDS_PS_BIGPACKET; | 1383 | case CICMP::ipPacketTooBig: stString = IDS_PS_BIGPACKET; |
1342 | break; | 1384 | break; |
1343 | case CICMP::ipTimeOut: stString = IDS_PS_TIMEOUT; | 1385 | case CICMP::ipTimeOut: stString = IDS_PS_TIMEOUT; |
1344 | break; | 1386 | break; |
1345 | case CICMP::ipBadRequest: stString = IDS_PS_INTERNALERROR; | 1387 | case CICMP::ipBadRequest: stString = IDS_PS_INTERNALERROR; |
1346 | break; | 1388 | break; |
1347 | case CICMP::ipBadRoute: stString = IDS_PS_BADROUTE; | 1389 | case CICMP::ipBadRoute: stString = IDS_PS_BADROUTE; |
1348 | break; | 1390 | break; |
1349 | case CICMP::ipTTLExpiredInTransit: stString = IDS_PS_TTLEXPTRANSIT; | 1391 | case CICMP::ipTTLExpiredInTransit: stString = IDS_PS_TTLEXPTRANSIT; |
1350 | break; | 1392 | break; |
1351 | case CICMP::ipTTLExpiredInReasm: stString = IDS_PS_TTLEXPREASM; | 1393 | case CICMP::ipTTLExpiredInReasm: stString = IDS_PS_TTLEXPREASM; |
1352 | break; | 1394 | break; |
1353 | case CICMP::ipParamProblem: stString = IDS_PS_IPARAMP; | 1395 | case CICMP::ipParamProblem: stString = IDS_PS_IPARAMP; |
1354 | break; | 1396 | break; |
1355 | case CICMP::ipSourceQuench: stString = IDS_PS_SOURCEQUENCH; | 1397 | case CICMP::ipSourceQuench: stString = IDS_PS_SOURCEQUENCH; |
1356 | break; | 1398 | break; |
1357 | case CICMP::ipOptionTooBig: stString = IDS_PS_BIGOPTION; | 1399 | case CICMP::ipOptionTooBig: stString = IDS_PS_BIGOPTION; |
1358 | break; | 1400 | break; |
1359 | case CICMP::ipBadDest: stString = IDS_PS_BADDEST; | 1401 | case CICMP::ipBadDest: stString = IDS_PS_BADDEST; |
1360 | break; | 1402 | break; |
1361 | default: | 1403 | default: |
1362 | stString = IDS_PS_UNKNOWNERROR; | 1404 | stString = IDS_PS_UNKNOWNERROR; |
1363 | break; | 1405 | break; |
1364 | } | 1406 | } |
1365 | if(stString) | 1407 | if(stString) |
1366 | m_Status.LoadString(stString); | 1408 | m_Status.LoadString(stString); |
1367 | packets++; | 1409 | packets++; |
1368 | if(rtt<0) | 1410 | if(rtt<0) |
1369 | lost++; | 1411 | lost++; |
1370 | Sleep(m_Daddy->m_Interval); | 1412 | Sleep(m_Daddy->m_Interval); |
1371 | } | 1413 | } |
1372 | if(packets==lost || !packets){ | 1414 | if(packets==lost || !packets){ |
1373 | ploss=100; | 1415 | ploss=100; |
1374 | }else{ | 1416 | }else{ |
1375 | ploss = lost*100/packets; | 1417 | ploss = lost*100/packets; |
1376 | m_MinRTT = pmin; | 1418 | m_MinRTT = pmin; |
1377 | m_MaxRTT = pmax; | 1419 | m_MaxRTT = pmax; |
1378 | if(sum){ | 1420 | if(sum){ |
1379 | ASSERT(num); | 1421 | ASSERT(num); |
1380 | m_AvgRTT = sum/num; | 1422 | m_AvgRTT = sum/num; |
1381 | }else{ | 1423 | }else{ |
1382 | m_AvgRTT = 0; | 1424 | m_AvgRTT = 0; |
1383 | } | 1425 | } |
1384 | } | 1426 | } |
1385 | }while(FALSE); | 1427 | }while(FALSE); |
1386 | m_Packetloss=ploss; | 1428 | m_Packetloss=ploss; |
1387 | m_Pinged=TRUE; | 1429 | m_Pinged=TRUE; |
1388 | m_Pinging=FALSE; | 1430 | m_Pinging=FALSE; |
1389 | if(pICMP){ | 1431 | if(pICMP){ |
1390 | pICMP->Deinitialize(); | 1432 | pICMP->Deinitialize(); |
1391 | delete pICMP; | 1433 | delete pICMP; |
1392 | } | 1434 | } |
1393 | m_Daddy->PostMessage(WM_DNP_UPDATEHOSTDATA,0,(LPARAM)this); | 1435 | m_Daddy->PostMessage(WM_DNP_UPDATEHOSTDATA,0,(LPARAM)this); |
1394 | m_Daddy->PostMessage(WM_DNP_ACTIVITYCOUNT,(WPARAM)-1); | 1436 | m_Daddy->PostMessage(WM_DNP_ACTIVITYCOUNT,(WPARAM)-1); |
1395 | return 0; | 1437 | return 0; |
1396 | } | 1438 | } |
1397 | 1439 | ||
1398 | void CPingyHost::Ping() | 1440 | void CPingyHost::Ping() |
1399 | { | 1441 | { |
1400 | ASSERT(m_Daddy); | 1442 | ASSERT(m_Daddy); |
1401 | m_Daddy->m_eveStartup.ResetEvent(); | 1443 | m_Daddy->m_eveStartup.ResetEvent(); |
1402 | if(!AfxBeginThread(CPingyHost::PingProc,this)){ | 1444 | if(!AfxBeginThread(CPingyHost::PingProc,this)){ |
1403 | ASSERT(FALSE); | 1445 | ASSERT(FALSE); |
1404 | }else{ | 1446 | }else{ |
1405 | CSingleLock sl(&m_Daddy->m_eveStartup); | 1447 | CSingleLock sl(&m_Daddy->m_eveStartup); |
1406 | sl.Lock(); | 1448 | sl.Lock(); |
1407 | m_Daddy->SendMessage(WM_DNP_ACTIVITYCOUNT,(WPARAM)1);// *** AWFUL! Shouldn't be here! | 1449 | m_Daddy->SendMessage(WM_DNP_ACTIVITYCOUNT,(WPARAM)1);// *** AWFUL! Shouldn't be here! |
1408 | } | 1450 | } |
1409 | } | 1451 | } |
1410 | 1452 | ||
1411 | void CDipstickDlg::OnHostlistCopyurl() | 1453 | void CDipstickDlg::OnHostlistCopyurl() |
1412 | { | 1454 | { |
1413 | if(m_HostList.GetSelectedCount()!=1) | 1455 | if(m_HostList.GetSelectedCount()!=1) |
1414 | return; | 1456 | return; |
1415 | int items = m_HostList.GetItemCount(); | 1457 | int items = m_HostList.GetItemCount(); |
1416 | for(int tmp=0;tmp<items;tmp++){ | 1458 | for(int tmp=0;tmp<items;tmp++){ |
1417 | if((m_HostList.GetItemState(tmp,LVIS_SELECTED|LVIS_FOCUSED))&LVIS_SELECTED) | 1459 | if((m_HostList.GetItemState(tmp,LVIS_SELECTED|LVIS_FOCUSED))&LVIS_SELECTED) |
1418 | break; | 1460 | break; |
1419 | } | 1461 | } |
1420 | ASSERT(tmp<items); | 1462 | ASSERT(tmp<items); |
1421 | CPingyHost *host = (CPingyHost*)m_HostList.GetItemData(tmp); | 1463 | CPingyHost *host = (CPingyHost*)m_HostList.GetItemData(tmp); |
1422 | ASSERT(host); | 1464 | ASSERT(host); |
1423 | if(!host->m_URL.IsEmpty()){ | 1465 | if(!host->m_URL.IsEmpty()){ |
1424 | CURLSource *us = new CURLSource(host->m_URL); | 1466 | CURLSource *us = new CURLSource(host->m_URL); |
1425 | us->SetClipboard(); | 1467 | us->SetClipboard(); |
1426 | us->FlushClipboard(); | 1468 | us->FlushClipboard(); |
1427 | } | 1469 | } |
1428 | } | 1470 | } |
1429 | 1471 | ||
1430 | BOOL CDipstickDlg::OnHelpInfo(HELPINFO* pHelpInfo) | 1472 | BOOL CDipstickDlg::OnHelpInfo(HELPINFO* pHelpInfo) |
1431 | { | 1473 | { |
1432 | WinHelp(IDD|0x20000l); | 1474 | WinHelp(IDD|0x20000l); |
1433 | return TRUE; | 1475 | return TRUE; |
1434 | } | 1476 | } |
1435 | 1477 | ||
1436 | void CDipstickDlg::OnDropFiles(HDROP hDropInfo) | 1478 | void CDipstickDlg::OnDropFiles(HDROP hDropInfo) |
1437 | { | 1479 | { |
1438 | // *** Import only 1st file, but maybe we should fall into prompt mode if multiple files are dropped. | 1480 | // *** Import only 1st file, but maybe we should fall into prompt mode if multiple files are dropped. |
1439 | CString fileName; | 1481 | CString fileName; |
1440 | int bufferSize = DragQueryFile(hDropInfo,0,NULL,0); | 1482 | int bufferSize = DragQueryFile(hDropInfo,0,NULL,0); |
1441 | DragQueryFile(hDropInfo,0,fileName.GetBuffer(bufferSize+2),bufferSize+1); | 1483 | DragQueryFile(hDropInfo,0,fileName.GetBuffer(bufferSize+2),bufferSize+1); |
1442 | fileName.ReleaseBuffer(); | 1484 | fileName.ReleaseBuffer(); |
1443 | if(fileName.IsEmpty()) | 1485 | if(fileName.IsEmpty()) |
1444 | CDialog::OnDropFiles(hDropInfo); | 1486 | CDialog::OnDropFiles(hDropInfo); |
1445 | else | 1487 | else |
1446 | ImportLocations(fileName); | 1488 | ImportLocations(fileName); |
1447 | } | 1489 | } |
1448 | 1490 | ||
1449 | BOOL CDipstickDlg::ImportLocations(LPCTSTR file) | 1491 | BOOL CDipstickDlg::ImportLocations(LPCTSTR file) |
1450 | { | 1492 | { |
1451 | CString fileLine; | 1493 | CString fileLine; |
1452 | CString q; | 1494 | CString q; |
1453 | try{ | 1495 | try{ |
1454 | CStdioFile f(file,CFile::modeRead|CFile::typeText|CFile::shareDenyWrite); | 1496 | CStdioFile f(file,CFile::modeRead|CFile::typeText|CFile::shareDenyWrite); |
1455 | // *** Cleanup locations.. | 1497 | // *** Cleanup locations.. |
1456 | while(f.ReadString(fileLine)){ | 1498 | while(f.ReadString(fileLine)){ |
1457 | if(fileLine.IsEmpty()) | 1499 | if(fileLine.IsEmpty()) |
1458 | continue; | 1500 | continue; |
1459 | if(fileLine[0]=='\"' || fileLine[0]=='\''){ | 1501 | if(fileLine[0]=='\"' || fileLine[0]=='\''){ |
1460 | TCHAR q = fileLine[0]; | 1502 | TCHAR q = fileLine[0]; |
1461 | fileLine=fileLine.Mid(1); | 1503 | fileLine=fileLine.Mid(1); |
1462 | for(int tmp=0;tmp<fileLine.GetLength();tmp++){ | 1504 | for(int tmp=0;tmp<fileLine.GetLength();tmp++){ |
1463 | if(fileLine[tmp]!=q) | 1505 | if(fileLine[tmp]!=q) |
1464 | continue; | 1506 | continue; |
1465 | if(!tmp){ | 1507 | if(!tmp){ |
1466 | fileLine.Empty(); | 1508 | fileLine.Empty(); |
1467 | break; | 1509 | break; |
1468 | } | 1510 | } |
1469 | fileLine=fileLine.Left(tmp); | 1511 | fileLine=fileLine.Left(tmp); |
1470 | break; | 1512 | break; |
1471 | } | 1513 | } |
1472 | }else{ | 1514 | }else{ |
1473 | int co = fileLine.Find(','); | 1515 | int co = fileLine.Find(','); |
1474 | if(co>=0) | 1516 | if(co>=0) |
1475 | fileLine=fileLine.Left(co); | 1517 | fileLine=fileLine.Left(co); |
1476 | } | 1518 | } |
1477 | if(fileLine.IsEmpty()) | 1519 | if(fileLine.IsEmpty()) |
1478 | continue; | 1520 | continue; |
1479 | if(!fileLine.CompareNoCase("url")) | 1521 | if(!fileLine.CompareNoCase("url")) |
1480 | continue; | 1522 | continue; |
1481 | PostMessage(WM_DNP_URLPING,0,(LPARAM)new CString(fileLine)); | 1523 | PostMessage(WM_DNP_URLPING,0,(LPARAM)new CString(fileLine)); |
1482 | } | 1524 | } |
1483 | }catch(CException* e){ | 1525 | }catch(CException* e){ |
1484 | e->Delete(); | 1526 | e->Delete(); |
1485 | TRACE0("Failed to import URLList file\n"); | 1527 | TRACE0("Failed to import URLList file\n"); |
1486 | return FALSE; | 1528 | return FALSE; |
1487 | } | 1529 | } |
1488 | return TRUE; | 1530 | return TRUE; |
1489 | } | 1531 | } |
1490 | 1532 | ||
1491 | void CDipstickDlg::OnAdvanced() | 1533 | void CDipstickDlg::OnAdvanced() |
1492 | { | 1534 | { |
1493 | CRect rc; | 1535 | CRect rc; |
1494 | m_AdvancedCtl.GetClientRect(rc); | 1536 | m_AdvancedCtl.GetClientRect(rc); |
1495 | m_AdvancedCtl.ClientToScreen(rc); | 1537 | m_AdvancedCtl.ClientToScreen(rc); |
1496 | CMenu menus; | 1538 | CMenu menus; |
1497 | VERIFY(menus.LoadMenu(IDR_MENU)); | 1539 | VERIFY(menus.LoadMenu(IDR_MENU)); |
1498 | CMenu *popUp = menus.GetSubMenu(2); | 1540 | CMenu *popUp = menus.GetSubMenu(2); |
1499 | ASSERT(popUp); | 1541 | ASSERT(popUp); |
1500 | popUp->EnableMenuItem(ID_ADVANCED_EXPORTLIST,MF_BYCOMMAND|(m_HostList.GetItemCount()?MF_ENABLED:MF_GRAYED)); | 1542 | popUp->EnableMenuItem(ID_ADVANCED_EXPORTLIST,MF_BYCOMMAND|(m_HostList.GetItemCount()?MF_ENABLED:MF_GRAYED)); |
1501 | popUp->TrackPopupMenu(TPM_CENTERALIGN|TPM_RIGHTBUTTON|TPM_LEFTBUTTON,(rc.left+rc.right)/2,rc.top,this); | 1543 | popUp->TrackPopupMenu(TPM_CENTERALIGN|TPM_RIGHTBUTTON|TPM_LEFTBUTTON,(rc.left+rc.right)/2,rc.top,this); |
1502 | } | 1544 | } |
1503 | 1545 | ||
1504 | void CDipstickDlg::OnAdvancedExportlist() | 1546 | void CDipstickDlg::OnAdvancedExportlist() |
1505 | { | 1547 | { |
1506 | CString filter; | 1548 | CString filter; |
1507 | filter.LoadString(IDS_CSVFILTER); | 1549 | filter.LoadString(IDS_CSVFILTER); |
1508 | CFileDialog cfd(FALSE,".csv",NULL,OFN_EXPLORER|OFN_HIDEREADONLY|OFN_PATHMUSTEXIST,filter,this); | 1550 | CFileDialog cfd(FALSE,".csv",NULL,OFN_EXPLORER|OFN_HIDEREADONLY|OFN_PATHMUSTEXIST,filter,this); |
1509 | if(!m_impexPath.IsEmpty()) | 1551 | if(!m_impexPath.IsEmpty()) |
1510 | SetCurrentDirectory(m_impexPath); | 1552 | SetCurrentDirectory(m_impexPath); |
1511 | if(cfd.DoModal()==IDOK){ | 1553 | if(cfd.DoModal()==IDOK){ |
1512 | GetCurrentDirectory(2048,m_impexPath.GetBuffer(2048)); | 1554 | GetCurrentDirectory(2048,m_impexPath.GetBuffer(2048)); |
1513 | m_impexPath.ReleaseBuffer(); | 1555 | m_impexPath.ReleaseBuffer(); |
1514 | ExportLocations(cfd.GetPathName()); | 1556 | ExportLocations(cfd.GetPathName()); |
1515 | } | 1557 | } |
1516 | } | 1558 | } |
1517 | 1559 | ||
1518 | void CDipstickDlg::OnAdvancedImportlist() | 1560 | void CDipstickDlg::OnAdvancedImportlist() |
1519 | { | 1561 | { |
1520 | CString filter; | 1562 | CString filter; |
1521 | filter.LoadString(IDS_CSVFILTER); | 1563 | filter.LoadString(IDS_CSVFILTER); |
1522 | CFileDialog cfd(TRUE,".csv",NULL,OFN_EXPLORER|OFN_HIDEREADONLY|OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST,filter,this); | 1564 | CFileDialog cfd(TRUE,".csv",NULL,OFN_EXPLORER|OFN_HIDEREADONLY|OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST,filter,this); |
1523 | if(!m_impexPath.IsEmpty()) | 1565 | if(!m_impexPath.IsEmpty()) |
1524 | SetCurrentDirectory(m_impexPath); | 1566 | SetCurrentDirectory(m_impexPath); |
1525 | if(cfd.DoModal()==IDOK){ | 1567 | if(cfd.DoModal()==IDOK){ |
1526 | GetCurrentDirectory(2048,m_impexPath.GetBuffer(2048)); | 1568 | GetCurrentDirectory(2048,m_impexPath.GetBuffer(2048)); |
1527 | m_impexPath.ReleaseBuffer(); | 1569 | m_impexPath.ReleaseBuffer(); |
1528 | ImportLocations(cfd.GetPathName()); | 1570 | ImportLocations(cfd.GetPathName()); |
1529 | } | 1571 | } |
1530 | } | 1572 | } |
1531 | 1573 | ||
1532 | BOOL CDipstickDlg::ExportLocations(LPCTSTR file) | 1574 | BOOL CDipstickDlg::ExportLocations(LPCTSTR file) |
1533 | { | 1575 | { |
1534 | try{ | 1576 | try{ |
1535 | CStdioFile f(file,CFile::modeCreate|CFile::modeWrite|CFile::typeText); | 1577 | CStdioFile f(file,CFile::modeCreate|CFile::modeWrite|CFile::typeText); |
1536 | f.WriteString("URL,Host Name,IP Address, Min RTT,Avg RTT,Max RTT,Pktloss\n"); | 1578 | f.WriteString("URL,Host Name,IP Address, Min RTT,Avg RTT,Max RTT,Pktloss\n"); |
1537 | POSITION p = m_Hosts.GetHeadPosition(); | 1579 | POSITION p = m_Hosts.GetHeadPosition(); |
1538 | while(p){ | 1580 | while(p){ |
1539 | CPingyHost *host = m_Hosts.GetNext(p); | 1581 | CPingyHost *host = m_Hosts.GetNext(p); |
1540 | ASSERT(host); | 1582 | ASSERT(host); |
1541 | CString ph; | 1583 | CString ph; |
1542 | ph.Format("\"%s\",%s,%s,%lu,%lu,%lu,%d%%\n",host->m_URL,host->m_HostName,inet_ntoa(*(in_addr*)&host->m_IP), | 1584 | ph.Format("\"%s\",%s,%s,%lu,%lu,%lu,%d%%\n",host->m_URL,host->m_HostName,inet_ntoa(*(in_addr*)&host->m_IP), |
1543 | host->m_MinRTT,host->m_AvgRTT,host->m_MaxRTT,host->m_Packetloss | 1585 | host->m_MinRTT,host->m_AvgRTT,host->m_MaxRTT,host->m_Packetloss |
1544 | ); | 1586 | ); |
1545 | f.WriteString(ph); | 1587 | f.WriteString(ph); |
1546 | } | 1588 | } |
1547 | f.Close(); | 1589 | f.Close(); |
1548 | }catch(CException* e){ | 1590 | }catch(CException* e){ |
1549 | TRACE0("Failed to export URLList\n"); | 1591 | TRACE0("Failed to export URLList\n"); |
1550 | e->Delete(); | 1592 | e->Delete(); |
1551 | return FALSE; | 1593 | return FALSE; |
1552 | } | 1594 | } |
1553 | return TRUE; | 1595 | return TRUE; |
1554 | } | 1596 | } |
1555 | 1597 | ||
1556 | void CDipstickDlg::OnDragpadAdvancedExportlist() | 1598 | void CDipstickDlg::OnDragpadAdvancedExportlist() |
1557 | { | 1599 | { |
1558 | OnAdvancedExportlist(); | 1600 | OnAdvancedExportlist(); |
1559 | } | 1601 | } |
1560 | 1602 | ||
1561 | void CDipstickDlg::OnDragpadAdvancedImportlist() | 1603 | void CDipstickDlg::OnDragpadAdvancedImportlist() |
1562 | { | 1604 | { |
1563 | OnAdvancedImportlist(); | 1605 | OnAdvancedImportlist(); |
1564 | } | 1606 | } |
1565 | 1607 | ||
1566 | void CPingyHost::Suicide() | 1608 | void CPingyHost::Suicide() |
1567 | { | 1609 | { |
1568 | CSingleLock sl(&m_mutex); | 1610 | CSingleLock sl(&m_mutex); |
1569 | if(sl.Lock(10)){ | 1611 | if(sl.Lock(10)){ |
1570 | sl.Unlock(); | 1612 | sl.Unlock(); |
1571 | delete this; | 1613 | delete this; |
1572 | }else{ | 1614 | }else{ |
1573 | if(!AfxBeginThread(CPingyHost::SuicideProc,this)) | 1615 | if(!AfxBeginThread(CPingyHost::SuicideProc,this)) |
1574 | ASSERT(FALSE); | 1616 | ASSERT(FALSE); |
1575 | } | 1617 | } |
1576 | } | 1618 | } |
1577 | 1619 | ||
1578 | UINT CPingyHost::SuicideProc(LPVOID pParam) | 1620 | UINT CPingyHost::SuicideProc(LPVOID pParam) |
1579 | { | 1621 | { |
1580 | CPingyHost* pThis = (CPingyHost*)pParam; | 1622 | CPingyHost* pThis = (CPingyHost*)pParam; |
1581 | CSingleLock sl(&pThis->m_mutex); | 1623 | CSingleLock sl(&pThis->m_mutex); |
1582 | sl.Lock(); | 1624 | sl.Lock(); |
1583 | VERIFY(sl.Unlock()); | 1625 | VERIFY(sl.Unlock()); |
1584 | delete pThis; | 1626 | delete pThis; |
1585 | return 0; | 1627 | return 0; |
1586 | } | 1628 | } \ No newline at end of file |