support SOCKS 5 proxy auth notifications from mgmt

pull/1/head
Heiko Hund 13 years ago
parent e84834a08a
commit 3c81b7a4f2

@ -306,7 +306,11 @@ OnPassword(connection_t *c, char *msg)
} }
else if (strstr(msg, "'HTTP Proxy'")) else if (strstr(msg, "'HTTP Proxy'"))
{ {
LocalizedDialogBoxParam(ID_DLG_PROXY_AUTH, ProxyAuthDialogFunc, (LPARAM) c); QueryProxyAuth(c, http);
}
else if (strstr(msg, "'SOCKS Proxy'"))
{
QueryProxyAuth(c, socks);
} }
} }

@ -41,6 +41,24 @@ typedef struct connection connection_t;
#define MAX_CONFIG_SUBDIRS 50 /* Max number of subdirs to scan for configs */ #define MAX_CONFIG_SUBDIRS 50 /* Max number of subdirs to scan for configs */
typedef enum {
service_noaccess = -1,
service_disconnected = 0,
service_connecting = 1,
service_connected = 2
} service_state_t;
typedef enum {
config,
windows,
manual
} proxy_source_t;
typedef enum {
http,
socks
} proxy_t;
/* connection states */ /* connection states */
typedef enum { typedef enum {
disconnected, disconnected,
@ -63,6 +81,7 @@ struct connection {
conn_state_t state; /* State the connection currently is in */ conn_state_t state; /* State the connection currently is in */
int failed_psw_attempts; /* # of failed attempts entering password(s) */ int failed_psw_attempts; /* # of failed attempts entering password(s) */
time_t connected_since; /* Time when the connection was established */ time_t connected_since; /* Time when the connection was established */
proxy_t proxy_type; /* Set during querying proxy credentials */
struct { struct {
SOCKET sk; SOCKET sk;
@ -77,25 +96,6 @@ struct connection {
HWND hwndStatus; HWND hwndStatus;
}; };
typedef enum {
service_noaccess = -1,
service_disconnected = 0,
service_connecting = 1,
service_connected = 2
} service_state_t;
typedef enum {
config,
windows,
manual
} proxy_source_t;
typedef enum {
http,
socks
} proxy_t;
/* All options used within OpenVPN GUI */ /* All options used within OpenVPN GUI */
typedef struct { typedef struct {
/* Array of configs to autostart */ /* Array of configs to autostart */

@ -324,10 +324,12 @@ GetProxyRegistrySettings()
} }
INT_PTR CALLBACK static INT_PTR CALLBACK
ProxyAuthDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) ProxyAuthDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{ {
LPCSTR proxy_type;
connection_t *c; connection_t *c;
char fmt[32];
switch (msg) switch (msg)
{ {
@ -342,8 +344,14 @@ ProxyAuthDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{ {
case IDOK: case IDOK:
c = (connection_t *) GetProp(hwndDlg, cfgProp); c = (connection_t *) GetProp(hwndDlg, cfgProp);
ManagementCommandFromInput(c, "username \"HTTP Proxy\" \"%s\"", hwndDlg, ID_EDT_PROXY_USER); proxy_type = (c->proxy_type == http ? "HTTP" : "SOCKS");
ManagementCommandFromInput(c, "password \"HTTP Proxy\" \"%s\"", hwndDlg, ID_EDT_PROXY_PASS);
snprintf(fmt, sizeof(fmt), "username \"%s Proxy\" \"%%s\"", proxy_type);
ManagementCommandFromInput(c, fmt, hwndDlg, ID_EDT_PROXY_USER);
snprintf(fmt, sizeof(fmt), "password \"%s Proxy\" \"%%s\"", proxy_type);
ManagementCommandFromInput(c, fmt, hwndDlg, ID_EDT_PROXY_PASS);
EndDialog(hwndDlg, LOWORD(wParam)); EndDialog(hwndDlg, LOWORD(wParam));
return TRUE; return TRUE;
} }
@ -361,6 +369,14 @@ ProxyAuthDialogFunc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
} }
void
QueryProxyAuth(connection_t *c, proxy_t type)
{
c->proxy_type = type;
LocalizedDialogBoxParam(ID_DLG_PROXY_AUTH, ProxyAuthDialogFunc, (LPARAM) c);
}
typedef enum { HTTPS_URL, SOCKS_URL } url_scheme; typedef enum { HTTPS_URL, SOCKS_URL } url_scheme;
static LPCWSTR static LPCWSTR
UrlSchemeStr(const url_scheme scheme) UrlSchemeStr(const url_scheme scheme)

@ -23,7 +23,7 @@
#define PROXY_H #define PROXY_H
INT_PTR CALLBACK ProxySettingsDialogFunc(HWND, UINT, WPARAM, LPARAM); INT_PTR CALLBACK ProxySettingsDialogFunc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK ProxyAuthDialogFunc(HWND, UINT, WPARAM, LPARAM); void QueryProxyAuth(connection_t *, proxy_t);
void OnProxy(connection_t *, char *); void OnProxy(connection_t *, char *);

Loading…
Cancel
Save