/[winpt]/trunk/Src/wptProxySettingsDlg.cpp
ViewVC logotype

Contents of /trunk/Src/wptProxySettingsDlg.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 36 - (show annotations)
Thu Oct 27 15:25:13 2005 UTC (19 years, 4 months ago) by werner
File size: 5282 byte(s)
First set of changes to use autotools for building.
1 /* wptProxySettingsDlg.cpp - Dialog for the proxy settings
2 * Copyright (C) 2002-2005 Timo Schulz
3 *
4 * This file is part of WinPT.
5 *
6 * WinPT is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * WinPT is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with WinPT; if not, write to the Free Software Foundation,
18 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
19 */
20 #ifdef HAVE_CONFIG_H
21 #include <config.h>
22 #endif
23
24 #include <windows.h>
25 #include <windows.h>
26
27 #include "../resource.h"
28 #include "wptTypes.h"
29 #include "wptKeyserver.h"
30 #include "wptW32API.h"
31 #include "wptErrors.h"
32 #include "wptNLS.h"
33 #include "wptKeyserver.h"
34
35
36 static int
37 check_number (HWND dlg, int id)
38 {
39 char buf[32];
40 size_t i;
41
42 GetDlgItemText (dlg, id, buf, 31);
43 for (i=0; i < strlen (buf); i++) {
44 if (!isdigit (buf[i]))
45 return -1;
46 }
47 return 0;
48 }
49
50
51 static int
52 read_proxy (HWND dlg, keyserver_proxy_ctx * ctx)
53 {
54 char t[512];
55 int ncount = 0, pos = 0;
56
57 ncount = GetDlgItemText( dlg, IDC_PROXY_PWD, t, DIM (t)-1);
58 if( ncount )
59 ctx->pass = strdup( t );
60 ncount = GetDlgItemText( dlg, IDC_PROXY_USER, t, DIM (t)-1);
61 if( ncount )
62 ctx->user = strdup( t );
63 ncount = GetDlgItemText( dlg, IDC_PROXY_HOST, t, DIM (t)-1);
64 if (ncount) {
65 if (check_IP_or_hostname (t)) {
66 msg_box (dlg, _("Invalid host/IP address."), _("Proxy Settings"), MB_ERR);
67 return -1;
68 }
69 /* XXX: check prefix */
70 if (!strncmp (t, "http://", 7))
71 pos = 7;
72 ctx->host = strdup (t + pos);
73 }
74 if (check_number (dlg, IDC_PROXY_PORT)) {
75 msg_box (dlg, _("Invalid port number."), _("Proxy Settings"), MB_ERR);
76 return -1;
77 }
78
79 ctx->port = GetDlgItemInt( dlg, IDC_PROXY_PORT, NULL, FALSE );
80 if( ctx->port < 0 || ctx->port > 65535 ) {
81 msg_box (dlg, _("Please select a value from 0-65535 for the port"),
82 _("Proxy Settings"), MB_INFO);
83 return -1;
84 }
85 if( ctx->user && !ctx->pass || !ctx->user && ctx->pass ) {
86 msg_box (dlg, _("When you want to use authentication, "
87 "please fill out both fields."), _("Proxy Settings"), MB_ERR);
88 return -1;
89 }
90 if (ctx->host && !ctx->port || !ctx->host && ctx->port) {
91 msg_box (dlg, _("Please enter a host name and a port."),
92 _("Proxy Settings"), MB_INFO);
93 return -1;
94 }
95 return 0;
96 }
97
98
99 static void
100 enable_proxy_auth (HWND dlg, int val)
101 {
102 int mode = val? TRUE : FALSE;
103 EnableWindow (GetDlgItem (dlg, IDC_PROXY_PWD), mode);
104 EnableWindow (GetDlgItem (dlg, IDC_PROXY_USER), mode);
105 }
106
107
108 /* Dialog box procedure for proxy authentication. */
109 BOOL CALLBACK
110 keyserver_proxy_dlg_proc (HWND dlg, UINT msg, WPARAM wparam, LPARAM lparam)
111 {
112 const char *proxy = NULL, *user=NULL, *pass = NULL;
113 int port = 0, auth = 0;
114 int rc = 0;
115
116 switch (msg) {
117 case WM_INITDIALOG:
118 proxy = kserver_get_proxy (&port);
119 if (proxy) {
120 SetDlgItemText( dlg, IDC_PROXY_HOST, proxy );
121 SetDlgItemInt( dlg, IDC_PROXY_PORT, port, FALSE );
122 user = kserver_get_proxy_info (PROXY_USER);
123 if (user) {
124 SetDlgItemText (dlg, IDC_PROXY_USER, user);
125 CheckDlgButton (dlg, IDC_PROXY_AUTH, BST_CHECKED);
126 auth++;
127 }
128 pass = kserver_get_proxy_info(PROXY_PASS);
129 if (pass) {
130 SetDlgItemText( dlg, IDC_PROXY_PWD, pass );
131 auth++;
132 }
133 }
134 enable_proxy_auth (dlg, auth);
135 center_window (dlg, NULL);
136 SetDlgItemText (dlg, IDC_PROXY_AUTH, _("Server requires &authentication"));
137 SetWindowText (dlg, _("Proxy Settings"));
138 SetForegroundWindow (dlg);
139 break;
140
141 case WM_SYSCOMMAND:
142 if( LOWORD (wparam) == SC_CLOSE)
143 EndDialog (dlg, TRUE);
144 return FALSE;
145
146 case WM_COMMAND:
147 switch (HIWORD (wparam)) {
148 case BN_CLICKED:
149 switch( (int)LOWORD( wparam ) ) {
150 case IDC_PROXY_AUTH:
151 if (IsDlgButtonChecked (dlg, IDC_PROXY_AUTH))
152 enable_proxy_auth (dlg, 1);
153 else
154 enable_proxy_auth (dlg, 0);
155 break;
156 }
157 break;
158 }
159
160 switch( LOWORD( wparam ) ) {
161 case IDOK:
162 if (IsDlgButtonChecked (dlg, IDC_PROXY_AUTH) &&
163 item_get_text_length (dlg, IDC_PROXY_HOST) == 0 &&
164 item_get_text_length (dlg, IDC_PROXY_USER) == 0 &&
165 item_get_text_length (dlg, IDC_PROXY_PWD) == 0) {
166 msg_box (dlg, _("Please fill out all required fields for authentication."),
167 _("Proxy Settings"), MB_WARN);
168 return TRUE;
169 }
170 keyserver_proxy_ctx ctx;
171 memset (&ctx, 0, sizeof (ctx));
172 if (read_proxy (dlg, &ctx))
173 return FALSE;
174 kserver_change_proxy (&ctx);
175 proxy_release (&ctx);
176 EndDialog (dlg, TRUE);
177 return TRUE;
178
179 case IDCANCEL:
180 EndDialog (dlg, FALSE);
181 return FALSE;
182 }
183 break;
184 }
185
186 return FALSE;
187 }

Properties

Name Value
svn:eol-style native

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26