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

Diff of /trunk/Src/wptProxySettingsDlg.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

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

Legend:
Removed from v.22  
changed lines
  Added in v.47

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26