00001
00002
00003
00004
00005
00006 #include "stdafx.h"
00007 #include "FdmApp.h"
00008 #include "DownloadProperties_ProtocolPage.h"
00009 #include "DownloadProperties.h"
00010 #include "misc.h"
00011 #include "DownloadsWnd.h"
00012 #include "fsDownloadMgr.h"
00013
00014 #ifdef _DEBUG
00015 #define new DEBUG_NEW
00016 #undef THIS_FILE
00017 static char THIS_FILE[] = __FILE__;
00018 #endif
00019
00020 IMPLEMENT_DYNCREATE(CDownloadProperties_ProtocolPage, CPropertyPage)
00021
00022 CDownloadProperties_ProtocolPage::CDownloadProperties_ProtocolPage() : CPropertyPage(CDownloadProperties_ProtocolPage::IDD)
00023 {
00024 m_psp.dwFlags |= PSP_USETITLE;
00025 m_psp.pszTitle = LS (L_PROTOCOL);
00026 }
00027
00028 CDownloadProperties_ProtocolPage::~CDownloadProperties_ProtocolPage()
00029 {
00030 }
00031
00032 void CDownloadProperties_ProtocolPage::DoDataExchange(CDataExchange* pDX)
00033 {
00034 CPropertyPage::DoDataExchange(pDX);
00035
00036 DDX_Control (pDX, IDC_USERAGENT, m_wndUserAgent);
00037
00038 }
00039
00040 BEGIN_MESSAGE_MAP(CDownloadProperties_ProtocolPage, CPropertyPage)
00041
00042 ON_BN_CLICKED(IDC_BINARY, OnBinary)
00043 ON_BN_CLICKED(IDC_ASCII, OnAscii)
00044 ON_BN_CLICKED(IDC_ASCIIFOREXTS, OnAsciiforexts)
00045 ON_CBN_EDITCHANGE(IDC_USERAGENT, OnEditchangeUseragent)
00046 ON_CBN_SELCHANGE(IDC_USERAGENT, OnSelchangeUseragent)
00047 ON_EN_CHANGE(IDC_REFERER, OnChangeReferer)
00048 ON_BN_CLICKED(IDC_USEHTTP11, OnUsehttp11)
00049 ON_BN_CLICKED(IDC_USECOOKIE, OnUsecookie)
00050 ON_BN_CLICKED(IDC_USEPASSIVEMODE, OnUsepassivemode)
00051 ON_EN_CHANGE(IDC_ASCIIEXTS, OnChangeAsciiexts)
00052 ON_WM_CONTEXTMENU()
00053 ON_COMMAND(ID_WHATISTHIS, OnWhatisthis)
00054 ON_WM_HELPINFO()
00055 ON_BN_CLICKED(IDC_DONTSENDLIST, OnDontsendlist)
00056
00057 END_MESSAGE_MAP()
00058
00059 LPCSTR _ppszAgentNames [] = {
00060 "Free Download Manager 2.x",
00061 "Microsoft Internet Explorer 5.0",
00062 "Netscape Communicator 4.0",
00063 "Opera 3.6"
00064 };
00065
00066 LPCSTR _ppszAgentValues [] = {
00067 PRG_AGENT_NAME,
00068 "Mozilla/4.0 (compatible; MSIE 5.0; Windows 98)",
00069 "Mozilla/4.05 [en] (Win95; I)",
00070 "Mozilla/4.0 (Windows 95;US) Opera 3.60 [en]"
00071 };
00072
00073 #define DNP_OFFSET(member) ( LPBYTE (&dnp.member) - LPBYTE (&dnp) )
00074 #define DNP_SIZEOF(member) ( sizeof (dnp.member) )
00075 #define DNP_EQ(member, bString) DNPEntry_IsAllEqual (m_pvDlds, DNP_OFFSET (member), DNP_SIZEOF (member), bString)
00076 #define DNP_EQ_MASK(member, mask) DNPEntry_IsAllEqual_BitMask (m_pvDlds, DNP_OFFSET (member), mask)
00077 #define DNP_SET(member, bString, NewVal) DNPEntry_SetValue (m_pvDlds, DNP_OFFSET (member), DNP_SIZEOF (member), bString, NewVal)
00078 #define DNP_SET_MASK(member, mask) DNPEntry_SetValue_BitMask (m_pvDlds, DNP_OFFSET (member), mask)
00079 #define DNP_UNSET_MASK(member, mask) DNPEntry_UnsetValue_BitMask (m_pvDlds, DNP_OFFSET (member), mask)
00080
00081 BOOL CDownloadProperties_ProtocolPage::OnInitDialog()
00082 {
00083 CPropertyPage::OnInitDialog();
00084
00085 fsDownload_NetworkProperties dnp;
00086 fsDownload_NetworkProperties* dnp0 = m_pvDlds->at (0)->pMgr->GetDownloadMgr ()->GetDNP ();
00087
00088 for (int i = 0; i < sizeof (_ppszAgentNames) / sizeof (LPCSTR); i++)
00089 m_wndUserAgent.AddString (_ppszAgentNames [i]);
00090
00091 if (DNPEntry_IsAllEqual (m_pvDlds, DNP_OFFSET (pszAgent), 0, TRUE))
00092 {
00093 LPCSTR pszAgent = dnp0->pszAgent;
00094 BOOL bSelected = FALSE;
00095
00096 for (int i = 0; i < sizeof (_ppszAgentValues) / sizeof (LPCSTR); i++)
00097 {
00098 if (stricmp (pszAgent, _ppszAgentValues [i]) == 0)
00099 {
00100 m_wndUserAgent.SelectString (-1, _ppszAgentNames [i]);
00101 bSelected = TRUE;
00102 }
00103 }
00104
00105 if (bSelected == FALSE)
00106 m_wndUserAgent.SetWindowText (pszAgent);
00107 }
00108
00109 if (DNPEntry_IsAllEqual (m_pvDlds, DNP_OFFSET (pszReferer), 0, TRUE))
00110 SetDlgItemText (IDC_REFERER, dnp0->pszReferer);
00111
00112 if (DNP_EQ (bUseHttp11, FALSE))
00113 CheckDlgButton (IDC_USEHTTP11, dnp0->bUseHttp11 ? BST_CHECKED : BST_UNCHECKED);
00114 else
00115 CheckDlgButton (IDC_USEHTTP11, BST_INDETERMINATE);
00116
00117 if (DNP_EQ (bUseCookie, FALSE))
00118 CheckDlgButton (IDC_USECOOKIE, dnp0->bUseCookie ? BST_CHECKED : BST_UNCHECKED);
00119 else
00120 CheckDlgButton (IDC_USEHTTP11, BST_INDETERMINATE);
00121
00122 if (DNP_EQ_MASK (dwFtpFlags, FTP_USEPASSIVEMODE))
00123 CheckDlgButton (IDC_USEPASSIVEMODE, dnp0->dwFtpFlags & FTP_USEPASSIVEMODE ? BST_CHECKED : BST_UNCHECKED);
00124 else
00125 CheckDlgButton (IDC_USEPASSIVEMODE, BST_INDETERMINATE);
00126
00127 if (DNP_EQ_MASK (dwFtpFlags, FTP_DONTSENDLIST))
00128 CheckDlgButton (IDC_DONTSENDLIST, dnp0->dwFtpFlags & FTP_DONTSENDLIST ? BST_CHECKED : BST_UNCHECKED);
00129 else
00130 CheckDlgButton (IDC_DONTSENDLIST, BST_INDETERMINATE);
00131
00132 if (DNP_EQ (enFtpTransferType, FALSE))
00133 {
00134 UINT nChecked;
00135
00136 switch (dnp0->enFtpTransferType)
00137 {
00138 case FTT_ASCII:
00139 nChecked = IDC_ASCII;
00140 break;
00141
00142 case FTT_BINARY:
00143 nChecked = IDC_BINARY;
00144 break;
00145
00146 default:
00147 nChecked = IDC_ASCIIFOREXTS;
00148 break;
00149 }
00150
00151 CheckRadioButton (IDC_BINARY, IDC_ASCIIFOREXTS, nChecked);
00152 }
00153
00154 if (DNP_EQ (pszASCIIExts, TRUE))
00155 SetDlgItemText (IDC_ASCIIEXTS, dnp0->pszASCIIExts);
00156
00157 m_bRefererModified = FALSE;
00158
00159 UpdateEnabled ();
00160
00161 ApplyLanguage ();
00162
00163 return TRUE;
00164 }
00165
00166 void CDownloadProperties_ProtocolPage::UpdateEnabled()
00167 {
00168 GetDlgItem (IDC_ASCIIEXTS)->EnableWindow (IsDlgButtonChecked (IDC_ASCIIFOREXTS) == BST_CHECKED);
00169 }
00170
00171 void CDownloadProperties_ProtocolPage::OnBinary()
00172 {
00173 UpdateEnabled ();
00174 SetModified ();
00175 }
00176
00177 void CDownloadProperties_ProtocolPage::OnAscii()
00178 {
00179 UpdateEnabled ();
00180 SetModified ();
00181 }
00182
00183 void CDownloadProperties_ProtocolPage::OnAsciiforexts()
00184 {
00185 UpdateEnabled ();
00186 SetModified ();
00187 }
00188
00189 void CDownloadProperties_ProtocolPage::OnEditchangeUseragent()
00190 {
00191 SetModified ();
00192 }
00193
00194 void CDownloadProperties_ProtocolPage::OnSelchangeUseragent()
00195 {
00196 SetModified ();
00197 }
00198
00199 void CDownloadProperties_ProtocolPage::OnChangeReferer()
00200 {
00201 m_bRefererModified = TRUE;
00202 SetModified ();
00203 }
00204
00205 void CDownloadProperties_ProtocolPage::OnUsehttp11()
00206 {
00207 if (IsDlgButtonChecked (IDC_USEHTTP11) == BST_INDETERMINATE)
00208 CheckDlgButton (IDC_USEHTTP11, BST_UNCHECKED);
00209
00210 SetModified ();
00211 }
00212
00213 void CDownloadProperties_ProtocolPage::OnUsecookie()
00214 {
00215 if (IsDlgButtonChecked (IDC_USECOOKIE) == BST_INDETERMINATE)
00216 CheckDlgButton (IDC_USECOOKIE, BST_UNCHECKED);
00217
00218 SetModified ();
00219 }
00220
00221 void CDownloadProperties_ProtocolPage::OnUsepassivemode()
00222 {
00223 if (IsDlgButtonChecked (IDC_USEPASSIVEMODE) == BST_INDETERMINATE)
00224 CheckDlgButton (IDC_USEPASSIVEMODE, BST_UNCHECKED);
00225
00226 SetModified ();
00227 }
00228
00229 void CDownloadProperties_ProtocolPage::OnChangeAsciiexts()
00230 {
00231 SetModified ();
00232 }
00233
00234 BOOL CDownloadProperties_ProtocolPage::OnApply()
00235 {
00236 fsDownload_NetworkProperties dnp;
00237
00238 CString str;
00239
00240 m_wndUserAgent.GetWindowText (str);
00241 if (str.GetLength ())
00242 {
00243 BOOL bFind = FALSE;
00244
00245 for (int i = 0; i < sizeof (_ppszAgentNames) / sizeof (LPCSTR); i++)
00246 {
00247 if (str == _ppszAgentNames [i])
00248 {
00249 DNP_SET (pszAgent, TRUE, _ppszAgentValues [i]);
00250 bFind = TRUE;
00251 }
00252 }
00253
00254 if (bFind == FALSE)
00255 DNP_SET (pszAgent, TRUE, str);
00256 }
00257
00258 GetDlgItemText (IDC_REFERER, str);
00259 if (str.GetLength () || m_bRefererModified)
00260 DNP_SET (pszReferer, TRUE, str);
00261
00262 UINT uChecked = IsDlgButtonChecked (IDC_USEHTTP11);
00263 if (uChecked != BST_INDETERMINATE)
00264 {
00265 BOOL bUse = uChecked == BST_CHECKED;
00266 DNP_SET (bUseHttp11, FALSE, &bUse);
00267 }
00268
00269 uChecked = IsDlgButtonChecked (IDC_USECOOKIE);
00270 if (uChecked != BST_INDETERMINATE)
00271 {
00272 BOOL bUse = uChecked == BST_CHECKED;
00273 DNP_SET (bUseCookie, FALSE, &bUse);
00274 }
00275
00276 uChecked = IsDlgButtonChecked (IDC_USEPASSIVEMODE);
00277 if (uChecked != BST_INDETERMINATE)
00278 {
00279 if (uChecked == BST_CHECKED)
00280 DNP_SET_MASK (dwFtpFlags, FTP_USEPASSIVEMODE);
00281 else
00282 DNP_UNSET_MASK (dwFtpFlags, FTP_USEPASSIVEMODE);
00283 }
00284
00285 uChecked = IsDlgButtonChecked (IDC_DONTSENDLIST);
00286 if (uChecked != BST_INDETERMINATE)
00287 {
00288 if (uChecked == BST_CHECKED)
00289 DNP_SET_MASK (dwFtpFlags, FTP_DONTSENDLIST);
00290 else
00291 DNP_UNSET_MASK (dwFtpFlags, FTP_DONTSENDLIST);
00292 }
00293
00294 fsFtpTransferType ftt;
00295
00296 if (BST_CHECKED == IsDlgButtonChecked (IDC_BINARY))
00297 {
00298 ftt = FTT_BINARY;
00299 DNP_SET (enFtpTransferType, FALSE, &ftt);
00300 }
00301 else if (BST_CHECKED == IsDlgButtonChecked (IDC_ASCII))
00302 {
00303 ftt = FTT_ASCII;
00304 DNP_SET (enFtpTransferType, FALSE, &ftt);
00305 }
00306 else if (BST_CHECKED == IsDlgButtonChecked (IDC_ASCIIFOREXTS))
00307 {
00308 ftt = FTT_UNKNOWN;
00309 DNP_SET (enFtpTransferType, FALSE, &ftt);
00310
00311 GetDlgItemText (IDC_ASCIIEXTS, str);
00312
00313 if (str.GetLength ())
00314 DNP_SET (pszASCIIExts, TRUE, str);
00315 }
00316
00317 return CPropertyPage::OnApply();
00318 }
00319
00320 void CDownloadProperties_ProtocolPage::OnContextMenu(CWnd* , CPoint point)
00321 {
00322 PrepareCHMgr (point);
00323 _CHMgr.ShowMenu ();
00324 }
00325
00326 void CDownloadProperties_ProtocolPage::OnWhatisthis()
00327 {
00328 _CHMgr.OnWT ();
00329 }
00330
00331 void CDownloadProperties_ProtocolPage::ApplyLanguage()
00332 {
00333 fsDlgLngInfo lnginfo [] = {
00334 fsDlgLngInfo (IDC__IDAS, L_IDAS),
00335 fsDlgLngInfo (IDC__REFERER, L_REFERER),
00336 fsDlgLngInfo (IDC_USEHTTP11, L_USEHTTP11),
00337 fsDlgLngInfo (IDC_USECOOKIE, L_USECOOKIE),
00338 fsDlgLngInfo (IDC_USEPASSIVEMODE, L_USEPASSIVEMODE),
00339 fsDlgLngInfo (IDC__TRANSFERMODE, L_TRANSFERMODE),
00340 fsDlgLngInfo (IDC_BINARY, L_BINARY),
00341 fsDlgLngInfo (IDC_ASCIIFOREXTS, L_ASCIIFOR),
00342 fsDlgLngInfo (IDC_DONTSENDLIST, L_DONTRETRFILEDATEFROMSERV),
00343 };
00344
00345 _LngMgr.ApplyLanguage (this, lnginfo, sizeof (lnginfo) / sizeof (fsDlgLngInfo), 0);
00346 }
00347
00348 BOOL CDownloadProperties_ProtocolPage::OnHelpInfo(HELPINFO* pHelpInfo)
00349 {
00350 RECT rc;
00351 CWnd *pItem = GetDlgItem (pHelpInfo->iCtrlId);
00352 if (pItem == NULL)
00353 return TRUE;
00354 pItem->GetWindowRect (&rc);
00355 if (PtInRect (&rc, pHelpInfo->MousePos) == FALSE)
00356 {
00357 pHelpInfo->MousePos.x = rc.left + (rc.right - rc.left) / 2;
00358 pHelpInfo->MousePos.y = rc.top + (rc.bottom - rc.top) / 2;
00359 }
00360 PrepareCHMgr (pHelpInfo->MousePos);
00361 _CHMgr.OnWT ();
00362 return TRUE;
00363 }
00364
00365 void CDownloadProperties_ProtocolPage::PrepareCHMgr(CPoint point)
00366 {
00367 fsCtrlContextHelp aCH1 [] = {
00368 fsCtrlContextHelp (IDC__IDAS, LS (L_IDASHERE)),
00369 fsCtrlContextHelp (IDC_USERAGENT, LS (L_IDASHERE)),
00370 fsCtrlContextHelp (IDC__REFERER, LS (L_REFERERHERE)),
00371 fsCtrlContextHelp (IDC_REFERER, LS (L_REFERERHERE)),
00372 fsCtrlContextHelp (IDC_USEHTTP11, LS (L_USEHTTP11HERE)),
00373 fsCtrlContextHelp (IDC_USECOOKIE, LS (L_USECOOKIEHERE)),
00374 fsCtrlContextHelp (IDC_USEPASSIVEMODE, LS (L_USEPASSIVEMODEHERE)),
00375 fsCtrlContextHelp (IDC_BINARY, LS (L_BINARYHERE)),
00376 fsCtrlContextHelp (IDC_ASCII, LS (L_ASCIIHERE)),
00377 fsCtrlContextHelp (IDC_ASCIIFOREXTS, LS (L_ASCIIFORHERE)),
00378 fsCtrlContextHelp (IDC_DONTSENDLIST, LS (L_DONTRETRFILEDATEFROMSERV_HERE)),
00379 };
00380
00381 static fsCtrlContextHelp aCH [sizeof (aCH1) / sizeof (fsCtrlContextHelp)];
00382 CopyMemory (aCH, aCH1, sizeof (aCH));
00383
00384 _CHMgr.PrepareContextMenu (this, point, aCH, sizeof (aCH) / sizeof (fsCtrlContextHelp));
00385 }
00386
00387 void CDownloadProperties_ProtocolPage::OnDontsendlist()
00388 {
00389 if (IsDlgButtonChecked (IDC_DONTSENDLIST) == BST_INDETERMINATE)
00390 CheckDlgButton (IDC_DONTSENDLIST, BST_UNCHECKED);
00391
00392 SetModified ();
00393 }