boinc/client/win/wingui_proxydlg.cpp

240 lines
9.0 KiB
C++

// Berkeley Open Infrastructure for Network Computing
// http://boinc.berkeley.edu
// Copyright (C) 2005 University of California
//
// This is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation;
// either version 2.1 of the License, or (at your option) any later version.
//
// This software is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU Lesser General Public License for more details.
//
// To view the GNU Lesser General Public License visit
// http://www.gnu.org/copyleft/lesser.html
// or write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#include "stdafx.h"
#include "boinc_gui.h"
#include "wingui_proxydlg.h"
#include "wingui.h"
#include "client_state.h"
#include "proxy.h"
#include "wingui_proxydlg.h"
// CProxyServerDlg dialog
IMPLEMENT_DYNAMIC(CProxyServerDlg, CDialog)
CProxyServerDlg::CProxyServerDlg(CWnd* pParent /*=NULL*/)
: CDialog(CProxyServerDlg::IDD, pParent)
, m_strHTTPProxyServerAddress(_T(""))
, m_uiHTTPProxyServerPort(80)
, m_strHTTPProxyServerUsername(_T(""))
, m_strHTTPProxyServerPassword(_T(""))
, m_strSOCKSProxyServerAddress(_T(""))
, m_uiSOCKSProxyServerPort(1080)
, m_strSOCKSProxyServerUsername(_T(""))
, m_strSOCKSProxyServerPassword(_T(""))
{
}
CProxyServerDlg::~CProxyServerDlg()
{
}
void CProxyServerDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_CHECK_HTTP, m_UseHTTPProxyServerCtrl);
DDX_Control(pDX, IDC_CHECK_SOCKS, m_UseSOCKSProxyServerCtrl);
DDX_Control(pDX, IDC_CHECK_HTTP_AUTH, m_UseHTTPProxyAuthenticationCtrl);
DDX_Control(pDX, IDC_EDIT_HTTP_ADDR, m_HTTPProxyServerAddressCtrl);
DDX_Control(pDX, IDC_EDIT_HTTP_PORT, m_HTTPProxyServerPortCtrl);
DDX_Control(pDX, IDC_EDIT_HTTP_NAME, m_HTTPProxyServerUsernameCtrl);
DDX_Control(pDX, IDC_EDIT_HTTP_PASS, m_HTTPProxyServerPasswordCtrl);
DDX_Control(pDX, IDC_EDIT_SOCKS_ADDR, m_SOCKSProxyServerAddressCtrl);
DDX_Control(pDX, IDC_EDIT_SOCKS_PORT, m_SOCKSProxyServerPortCtrl);
DDX_Control(pDX, IDC_EDIT_SOCKS_NAME, m_SOCKSProxyServerUsernameCtrl);
DDX_Control(pDX, IDC_EDIT_SOCKS_PASS, m_SOCKSProxyServerPasswordCtrl);
DDX_Text(pDX, IDC_EDIT_HTTP_ADDR, m_strHTTPProxyServerAddress);
DDV_MaxChars(pDX, m_strHTTPProxyServerAddress, 256);
DDX_Text(pDX, IDC_EDIT_HTTP_PORT, m_uiHTTPProxyServerPort);
DDV_MinMaxUInt(pDX, m_uiHTTPProxyServerPort, 0, 65536);
DDX_Text(pDX, IDC_EDIT_HTTP_NAME, m_strHTTPProxyServerUsername);
DDV_MaxChars(pDX, m_strHTTPProxyServerUsername, 256);
DDX_Text(pDX, IDC_EDIT_HTTP_PASS, m_strHTTPProxyServerPassword);
DDV_MaxChars(pDX, m_strHTTPProxyServerPassword, 256);
DDX_Text(pDX, IDC_EDIT_SOCKS_ADDR, m_strSOCKSProxyServerAddress);
DDV_MaxChars(pDX, m_strSOCKSProxyServerAddress, 256);
DDX_Text(pDX, IDC_EDIT_SOCKS_PORT, m_uiSOCKSProxyServerPort);
DDV_MinMaxUInt(pDX, m_uiSOCKSProxyServerPort, 0, 65536);
DDX_Text(pDX, IDC_EDIT_SOCKS_NAME, m_strSOCKSProxyServerUsername);
DDV_MaxChars(pDX, m_strSOCKSProxyServerUsername, 256);
DDX_Text(pDX, IDC_EDIT_SOCKS_PASS, m_strSOCKSProxyServerPassword);
DDV_MaxChars(pDX, m_strSOCKSProxyServerPassword, 256);
}
BEGIN_MESSAGE_MAP(CProxyServerDlg, CDialog)
ON_BN_CLICKED(IDC_CHECK_HTTP, OnBnClickedUseHTTPProxyServer)
ON_BN_CLICKED(IDC_CHECK_SOCKS, OnBnClickedUseSOCKSProxyServer)
ON_BN_CLICKED(IDC_CHECK_HTTP_AUTH, OnBnClickedUseHttpAuth)
END_MESSAGE_MAP()
// Utility Functions
//////////
// CProxyServerDlg::LoadLanguage
// arguments: void
// returns: void
// function: loads new captions from language file
void CProxyServerDlg::LoadLanguage()
{
int const static nIDs[] = { IDC_STATIC_PROXY, IDC_STATIC_HTTP, IDC_CHECK_HTTP,
IDC_STATIC_HTTP_ADDR, IDC_STATIC_HTTP_PORT, IDC_STATIC_SOCKS,
IDC_CHECK_SOCKS, IDC_STATIC_SOCKS_ADDR, IDC_STATIC_SOCKS_PORT,
IDC_STATIC_SOCKS_BLANK, IDC_STATIC_SOCKS_NAME, IDC_STATIC_SOCKS_PASS,
IDOK, IDCANCEL, 0 };
UpdateLanguageStrings(this, "DIALOG-PROXY", nIDs);
}
// CProxyServerDlg message handlers
BOOL CProxyServerDlg::OnInitDialog()
{
CDialog::OnInitDialog();
LoadLanguage();
m_strHTTPProxyServerAddress = gstate.proxy_info.http_server_name;
m_uiHTTPProxyServerPort = gstate.proxy_info.http_server_port;
m_strHTTPProxyServerUsername = gstate.proxy_info.http_user_name;
m_strHTTPProxyServerPassword = gstate.proxy_info.http_user_passwd;
m_strSOCKSProxyServerAddress = gstate.proxy_info.socks_server_name;
m_uiSOCKSProxyServerPort = gstate.proxy_info.socks_server_port;
m_strSOCKSProxyServerUsername = gstate.proxy_info.socks5_user_name;
m_strSOCKSProxyServerPassword = gstate.proxy_info.socks5_user_passwd;
if (gstate.proxy_info.use_http_proxy) {
m_UseHTTPProxyServerCtrl.SetCheck(BST_CHECKED);
} else {
m_UseHTTPProxyServerCtrl.SetCheck(BST_UNCHECKED);
}
if (gstate.proxy_info.use_socks_proxy) {
m_UseSOCKSProxyServerCtrl.SetCheck(BST_CHECKED);
} else {
m_UseSOCKSProxyServerCtrl.SetCheck(BST_UNCHECKED);
}
if (gstate.proxy_info.use_http_auth) {
m_UseHTTPProxyAuthenticationCtrl.SetCheck(BST_CHECKED);
} else {
m_UseHTTPProxyAuthenticationCtrl.SetCheck(BST_UNCHECKED);
}
OnBnClickedUseHTTPProxyServer();
OnBnClickedUseSOCKSProxyServer();
OnBnClickedUseHttpAuth();
UpdateData(FALSE);
CenterWindow();
return TRUE; // return TRUE unless you set the focus to a control
}
void CProxyServerDlg::OnBnClickedUseHTTPProxyServer()
{
if ( BST_CHECKED == m_UseHTTPProxyServerCtrl.GetCheck() ) {
m_HTTPProxyServerAddressCtrl.EnableWindow();
m_HTTPProxyServerPortCtrl.EnableWindow();
m_UseHTTPProxyAuthenticationCtrl.EnableWindow();
CProxyServerDlg::OnBnClickedUseHttpAuth();
} else {
m_HTTPProxyServerAddressCtrl.EnableWindow(FALSE);
m_HTTPProxyServerPortCtrl.EnableWindow(FALSE);
m_UseHTTPProxyAuthenticationCtrl.EnableWindow(FALSE);
m_HTTPProxyServerUsernameCtrl.EnableWindow(FALSE);
m_HTTPProxyServerPasswordCtrl.EnableWindow(FALSE);
}
}
void CProxyServerDlg::OnBnClickedUseSOCKSProxyServer()
{
if ( BST_CHECKED == m_UseSOCKSProxyServerCtrl.GetCheck() ) {
m_SOCKSProxyServerAddressCtrl.EnableWindow();
m_SOCKSProxyServerPortCtrl.EnableWindow();
m_SOCKSProxyServerUsernameCtrl.EnableWindow();
m_SOCKSProxyServerPasswordCtrl.EnableWindow();
} else {
m_SOCKSProxyServerAddressCtrl.EnableWindow(FALSE);
m_SOCKSProxyServerPortCtrl.EnableWindow(FALSE);
m_SOCKSProxyServerUsernameCtrl.EnableWindow(FALSE);
m_SOCKSProxyServerPasswordCtrl.EnableWindow(FALSE);
}
}
void CProxyServerDlg::OnBnClickedUseHttpAuth()
{
if ( BST_CHECKED == m_UseHTTPProxyAuthenticationCtrl.GetCheck() ) {
m_HTTPProxyServerUsernameCtrl.EnableWindow();
m_HTTPProxyServerPasswordCtrl.EnableWindow();
} else {
m_HTTPProxyServerUsernameCtrl.EnableWindow(FALSE);
m_HTTPProxyServerPasswordCtrl.EnableWindow(FALSE);
}
}
void CProxyServerDlg::OnOK()
{
UpdateData(TRUE);
gstate.proxy_info.use_http_proxy = (m_UseHTTPProxyServerCtrl.GetCheck() != BST_UNCHECKED);
safe_strncpy(gstate.proxy_info.http_server_name, m_strHTTPProxyServerAddress.GetBuffer(), sizeof(gstate.proxy_info.http_server_name));
gstate.proxy_info.http_server_port = m_uiHTTPProxyServerPort;
gstate.proxy_info.use_http_auth = (m_UseHTTPProxyAuthenticationCtrl.GetCheck() != BST_UNCHECKED);
safe_strncpy(gstate.proxy_info.http_user_name, m_strHTTPProxyServerUsername.GetBuffer(), sizeof(gstate.proxy_info.http_user_name));
safe_strncpy(gstate.proxy_info.http_user_passwd, m_strHTTPProxyServerPassword.GetBuffer(), sizeof(gstate.proxy_info.http_user_passwd));
gstate.proxy_info.use_socks_proxy = (m_UseSOCKSProxyServerCtrl.GetCheck() != BST_UNCHECKED);
safe_strncpy(gstate.proxy_info.socks_server_name, m_strSOCKSProxyServerAddress.GetBuffer(), sizeof(gstate.proxy_info.socks_server_name));
gstate.proxy_info.socks_server_port = m_uiSOCKSProxyServerPort;
safe_strncpy(gstate.proxy_info.socks5_user_name, m_strSOCKSProxyServerUsername.GetBuffer(), sizeof(gstate.proxy_info.socks5_user_name));
safe_strncpy(gstate.proxy_info.socks5_user_passwd, m_strSOCKSProxyServerPassword.GetBuffer(), sizeof(gstate.proxy_info.socks5_user_passwd));
m_strHTTPProxyServerAddress.ReleaseBuffer();
m_strHTTPProxyServerUsername.ReleaseBuffer();
m_strHTTPProxyServerPassword.ReleaseBuffer();
m_strSOCKSProxyServerAddress.ReleaseBuffer();
m_strSOCKSProxyServerUsername.ReleaseBuffer();
m_strSOCKSProxyServerPassword.ReleaseBuffer();
if (m_strSOCKSProxyServerUsername.IsEmpty()) {
gstate.proxy_info.socks_version = SOCKS_VERSION_4;
} else {
gstate.proxy_info.socks_version = SOCKS_VERSION_5;
}
gstate.set_client_state_dirty(_T("CProxyServerDlg::OnOK"));
CDialog::OnOK();
}
const char *BOINC_RCSID_0b4dba9b5d = "$Id$";