Update system tray to populate Windows VPN flyout
PATCH 1/1 Update system tray to populate Windows VPN flyout
From ed96e2d91a0eb9ecdaab8d7104f397f7d77e5ced Mon Sep 17 00:00:00 2001
From: Kevin Kane <[email protected]...>
Date: Fri, 13 Jul 2018 09:50:00 -0700
Subject: Update system tray to populate Windows VPN flyout
Add a DLL to be wired in as a custom dialer, which introduces new build dependencies Add copyright notices as required where Microsoft has contributed code
---
.gitignore | 3 + BUILD.rst | 1 + Makefile.am | 10 ++- configure.ac | 4 ++ dialer.c | 171 +++++++++++++++++++++++++++++++++++++++++++++++++++ tray.c | 117 +++++++++++++++++++++++++++++++++++ tray.h | 2 + 7 files changed, 307 insertions(+), 1 deletion(-)
create mode 100644 dialer.c
.gitignore +0 -0
@@ -10,6 +10,8 @@
*.log
*.tar.gz
*.bak
+*.lo
+*.la
.depsMakefile
@@ -30,3 +32,4 @@ depcomp
stamp-h1
install-sh
missing
+libtool
BUILD.rst +1 -3
@@ -24,6 +24,7 @@ their dependencies. You can install these packages using the standard - mingw64-x86_64-gcc-core - mingw64-x86_64-g++ - mingw64-x86_64-openssl +- libtool Build
Makefile.am +0 -0
@@ -2,6 +2,7 @@
#
# Copyright (C) 2004 Mathias Sundman <[email protected]...>
# 2010 Heiko Hund <[email protected]...>
+# Portions Copyright (C) 2018 Microsoft Corporation
#
# This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by
@@ -22,6 +23,7 @@ RCCOMPILE = $(WINDRES) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS)AUTOMAKE_OPTIONS = foreign 1.9
+ACLOCAL_AMFLAGS = -I m4
MAINTAINERCLEANFILES = \
config.log config.status \
@@ -106,7 +108,13 @@ openvpn_gui_LDADD = \
-lnetapi32 \
-lole32 \
-lshlwapi \- -lsecur32
+ -lsecur32 \
+ -lrasapi32
openvpn-gui-res.o: $(openvpn_gui_RESOURCES) $(srcdir)/openvpn-gui-res.h
$(RCCOMPILE) -i $< -o $@ + +lib_LTLIBRARIES = libopenvpndialer.la +libopenvpndialer_la_SOURCES = dialer.c +libopenvpndialer_la_LDFLAGS = -no-undefined +libopenvpndialer_la_LIBADD = -lrasapi32
\ No newline at end of file
configure.ac +0 -0
@@ -2,6 +2,7 @@ dnl OpenVPN-GUI -- A Windows GUI for OpenVPN.
dnl
dnl Copyright (C) 2004 Mathias Sundman <[email protected]...>
dnl 2010 Heiko Hund <[email protected]...>
+dnl Portions Copyright (C) 2018 Microsoft Corporation
dnl
dnl This program is free software; you can redistribute it and/or modify
dnl it under the terms of the GNU General Public License as published by
@@ -29,10 +30,13 @@ AC_DEFINE([CORE_COPYRIGHT_YEAR_END], ["2018"], [Last copyright year for daemon i AC_CONFIG_AUX_DIR([.])AM_CONFIG_HEADER([config.h])AC_CONFIG_SRCDIR([main.h])
+AC_CONFIG_MACRO_DIRS([m4])AM_INIT_AUTOMAKEAC_CANONICAL_HOSTAC_USE_SYSTEM_EXTENSIONSAC_PROG_CC_C99
+LT_INIT([win32-dll])
+AC_LIBTOOL_WIN32_DLLAC_CHECK_TOOL([WINDRES], [windres])
AC_ARG_ENABLE(
dialer.c new file +171 -0
171 lines not on this page · raw message
tray.c +1 -0
@@ -3,6 +3,7 @@* * Copyright (C) 2004 Mathias Sundman <[email protected]...> * 2010 Heiko Hund <[email protected]...> +* Portions Copyright (C) 2018 Microsoft Corporation * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by
@@ -28,6 +29,8 @@
#include <shellapi.h>
#include <tchar.h>
#include <time.h>
+#include <ras.h>
+#include <raserror.h>
#include "tray.h"
#include "service.h"
@@ -47,6 +50,116 @@ HMENU hMenuService;
NOTIFYICONDATA ni;
extern options_t o;
+static const TCHAR VpnEntryPrefix[] = _T("OpenVPN "); +static const TCHAR WindowCaption[] = _T("OpenVPN-GUI"); +
+/* Delete OpenVPN entries from Windows networking/VPN flyout */ +void
+ClearNetworkFlyout()
+{
+ DWORD result = ERROR_SUCCESS;
+ LPRASENTRYNAME entryName = NULL;
+ DWORD entryNameSize = 0;
+ DWORD entryCount = 0;
+
+ /* Determine memory required */
+ result = RasEnumEntries(NULL, NULL, NULL, &entryNameSize, &entryCount);
+ if (ERROR_BUFFER_TOO_SMALL != result)
+ {
+ /* Anything else is unexpected. */
+ MessageBox(NULL, _T("ClearNetworkFlyout: Could not get memory needed for RAS entries"), WindowCaption, MB_OK);
+ return;
+ }
+
+ entryName = (LPRASENTRYNAME)malloc(entryNameSize);
+ if (NULL == entryName)
+ {
+ /* No memory! */
+ MessageBox(NULL, _T("ClearNetworkFlyout: No memory allocating entry name"), WindowCaption, MB_OK);
+ return;+ }
+
+ entryName[0].dwSize = sizeof(RASENTRYNAME);
+
+ result = RasEnumEntries(NULL, NULL, entryName, &entryNameSize, &entryCount);
+ if (ERROR_SUCCESS != result)
+ {
+ MessageBox(NULL, _T("ClearNetworkFlyout: Could not enumerate RAS entries"), WindowCaption, MB_OK);
+ free(entryName);
+ return;+ }
+
+ for (DWORD i = 0; i < entryCount; i++)
+ {
+ if ((entryName[i].dwFlags == REN_User) &&
+ (0 == _tcsncmp(VpnEntryPrefix, entryName[i].szEntryName, _countof(VpnEntryPrefix) - 1)))
+ {
+ /* TODO: Retrieve the entry and verify that it references our custom dialer DLL? RasEnumEntries doesn't
+ * give us this information but we could retrieve the entry and check. This would keep us from purging any
+ * entries which for some inexplicable reason started with the VpnEntryPrefix string.
+ */
+ result = RasDeleteEntry(NULL, entryName[i].szEntryName);
+ if (ERROR_SUCCESS != result)
+ {+ MessageBox(NULL, _T("ClearNetworkFlyout: Failed to delete entry"), WindowCaption, MB_OK);
+ /* Continue processing; don't return. */
+ }
+ }
+ }
+
+ free(entryName);
+
+ return;
+}
+
+static const TCHAR DialerFileName[] = _T("libopenvpndialer-0.dll"); +static const TCHAR DeviceName[] = _T("TAP-Windows Adapter V9"); +
+/* Create VPN flyout entry for a new connection */ +static void
+CreateNetworkFlyoutEntry(const connection_t *c, int number) +{
+ DWORD result = ERROR_SUCCESS;
+ RASENTRY entry;
+ TCHAR entryName[RAS_MaxEntryName + 1];
+
+ memset(&entry, 0, sizeof(entry));
+ entry.dwSize = sizeof(entry);
+ _tcsncpy(entry.szDeviceType, RASDT_Vpn, _countof(RASDT_Vpn));
+ _tcsncpy(entry.szDeviceName, DeviceName, _countof(DeviceName));
+
+ entry.dwfOptions = RASEO_Custom;
+ /* Take the exe_path, strip off everything after the last backslash, and append DialerFileName */
+ TCHAR* lastBackslash = _tcsrchr(o.exe_path, _T('\\'));
+ if (NULL == lastBackslash)
+ {
+ MessageBox(NULL, _T("CreateNetworkFlyoutEntry: No last backslash found"), WindowCaption, MB_OK);
+ return;
+ }
+ _tcsncpy(entry.szCustomDialDll, o.exe_path, (lastBackslash - o.exe_path + 1));
+ /* Check for possible overrun */
+ if (_tcslen(entry.szCustomDialDll) + _countof(DialerFileName) >= _countof(entry.szCustomDialDll))
+ {+ MessageBox(NULL, _T("CreateNetworkFlyoutEntry: Not enough space for custom dialer DLL filename"), WindowCaption, MB_OK);
+ return;
+ }
+ _tcsncat(entry.szCustomDialDll, DialerFileName, _countof(DialerFileName));
+
+ /* Use the local phone number space to store the entry number for the custom dialer to use. */
+ _sntprintf_0(entry.szLocalPhoneNumber, _T("%d"), number);
+ entry.dwType = RASET_Vpn;
+ entry.dwEncryptionType = ET_Optional;
+
+ _sntprintf_0(entryName, _T("%s%s"), VpnEntryPrefix, c->config_name);
+ result = RasSetEntryProperties(NULL, entryName, &entry, sizeof(entry), NULL, 0);
+ if (ERROR_SUCCESS != result)
+ {
+ TCHAR message[512];
+ _sntprintf_0(message, _T("CreateNetworkFlyoutEntry: Could not RasSetEntryProperties: %lu"), result);
+ MessageBox(NULL, message, WindowCaption, MB_OK);
+ return;+ }
+}
/* Create popup menus */
void
@@ -92,6 +205,7 @@ CreatePopupMenus()
AppendMenu(hMenu, MF_STRING ,IDM_CLOSE, LoadLocalizedString(IDS_MENU_CLOSE));
SetMenuStatus(&o.conn[0], o.conn[0].state);
+ CreateNetworkFlyoutEntry(&o.conn[0], 0);
}
else {
/* Create Main menu with all connections */@@ -135,6 +249,7 @@ CreatePopupMenus()
#endif
SetMenuStatus(&o.conn[i], o.conn[i].state);
+ CreateNetworkFlyoutEntry(&o.conn[i], i);
}
}@@ -152,6 +267,7 @@ DestroyPopupMenus()
DestroyMenu(hMenuService);
DestroyMenu(hMenu);+ ClearNetworkFlyout();
}
@@ -218,6 +334,7 @@ voidOnDestroyTray()
{
DestroyMenu(hMenu);
+ ClearNetworkFlyout();
Shell_NotifyIcon(NIM_DELETE, &ni);
}tray.h +1 -0
@@ -3,6 +3,7 @@* * Copyright (C) 2004 Mathias Sundman <[email protected]...> * 2010 Heiko Hund <[email protected]...> +* Portions Copyright (C) 2018 Microsoft Corporation * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by
@@ -51,5 +52,6 @@ void SetMenuStatus(connection_t *, conn_state_t);
void SetServiceMenuStatus();
void ShowTrayBalloon(TCHAR *, TCHAR *);
void CheckAndSetTrayIcon();
+void ClearNetworkFlyout();
#endif
--
2.17.1.windows.2
Hi,
Quoted 10 lines · Kevin Kane via Openvpn-devel
From
ed96e2d91a0eb9ecdaab8d7104f397f7d77e5cedMon Sep 17 00:00:00 2001From: Kevin Kane <[email protected]...>
Date: Fri, 13 Jul 2018 09:50:00 -0700
Subject: Update system tray to populate Windows VPN flyout
Quoted 9 lines
Add a DLL to be wired in as a custom dialer, which introduces new build dependencies
Add copyright notices as required where Microsoft has contributed code
Signed-off-by Kevin Kane <[email protected]...>
As discussed in a previous thread, I'm not sure we should have this in its current form:
(i) It adds and entry per config to network connections which will be a nuisance for users who have far too many configs (there are some users with 100's of config files) -- so we at least need an option to enable/disable this.
(ii) This only supports connect, not disconnect and the entry does not show whether its connected or not -- so this is a feature of very dubious utility.
(iii) Communicating with the GUI using COPYDATA message (we support connect, disconnect, status etc.) should be preferred over hard-coding IDM_CONNECTMENU.
Selva
I agree. This was the consensus when we discussed this feature before, but there was some interest in possibly taking this work in an experimental branch and later building something more production-ready on top of the plumbing work. It is with that expectation I'm offering it upstream.
-----Original Message-----
From: Selva Nair <[email protected]...>
Sent: Wednesday, July 25, 2018 10:28 AM
To: Kevin Kane <[email protected]...>
Cc: openvpn-devel <[email protected]>
Subject: Re: [Openvpn-devel] [PATCH] [openvpn-gui] Update system tray to populate Windows VPN flyout
Hi,
Quoted 10 lines · Kevin Kane via Openvpn-devel
From
ed96e2d91a0eb9ecdaab8d7104f397f7d77e5cedMon Sep 17 00:00:00 2001From: Kevin Kane <[email protected]...>
Date: Fri, 13 Jul 2018 09:50:00 -0700
Subject: Update system tray to populate Windows VPN flyout
Quoted 9 lines
Add a DLL to be wired in as a custom dialer, which introduces new build dependencies
Add copyright notices as required where Microsoft has contributed code
Signed-off-by Kevin Kane <[email protected]...>
As discussed in a previous thread, I'm not sure we should have this in its current form:
(i) It adds and entry per config to network connections which will be a nuisance for users who have far too many configs (there are some users with 100's of config files) -- so we at least need an option to enable/disable this.
(ii) This only supports connect, not disconnect and the entry does not show whether its connected or not -- so this is a feature of very dubious utility.
(iii) Communicating with the GUI using COPYDATA message (we support connect, disconnect, status etc.) should be preferred over hard-coding IDM_CONNECTMENU.
Selva
Hi,
as a side note, your mail client massacres leading whitespace, so the patch is all squeezed to the left side:
Makefile.am line 6
Quoted 10 lines · Kevin Kane via Openvpn-devel
Makefile.am +1
-0@@ -2,6 +2,7 @@ # # Copyright (C) 2004 Mathias Sundman <[email protected]...> # 2010 Heiko Hund <[email protected]...> +# Portions Copyright (C) 2018 Microsoft Corporation #
... which makes it impossible to apply without manually adding the leading space in non-changed lines.
Interesting enough...
Quoted 7 lines
Makefile.am +0
-0* * Copyright (C) 2004 Mathias Sundman <[email protected]...>* 2010 Heiko Hund <[email protected]...>
+ * Portions Copyright (C) 2018 Microsoft Corporation
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
... the effect differs...
But anyway. If possible, use "git send-email" (which is much better at not massacring things than the standard clients) - and point it to something which is not Exchange. Unfortunately, we've seen that as well, git-send-email sending via SMTP to Exchange, and Exchange hacking and slaying at the patch...
thanks :)
gert
Signature · 6 lines
"If was one thing all people took for granted, was conviction that if you
feed honest figures into a computer, honest figures come out. Never doubted
it myself till I met a computer with a sense of humor."
Robert A. Heinlein, The Moon is a Harsh Mistress
Gert Doering - Munich, Germany [email protected]...Ugh. Thanks, Outlook. I'd have to use a personal e-mail account to use something other than Exchange.
The other option is for me to add the files to the e-mail as attachments. Is that acceptable, or do you really need the patch text to be in the message body?
-----Original Message-----
From: Gert Doering <[email protected]...>
Sent: Wednesday, July 25, 2018 11:00 AM
To: Kevin Kane <[email protected]...>
Cc: openvpn-devel <[email protected]>
Subject: Re: [Openvpn-devel] [PATCH] [openvpn-gui] Update system tray to populate Windows VPN flyout
Hi,
as a side note, your mail client massacres leading whitespace, so the patch is all squeezed to the left side:
Makefile.am line 6
Quoted 9 lines · Kevin Kane via Openvpn-devel
Makefile.am +1
-0@@ -2,6 +2,7 @@ # # Copyright (C) 2004 Mathias Sundman <[email protected]...> # 2010 Heiko Hund <[email protected]...> +# Portions Copyright (C) 2018 Microsoft Corporation #
... which makes it impossible to apply without manually adding the leading space in non-changed lines.
Interesting enough...
Quoted 8 lines
Makefile.am +0
-0* * Copyright (C) 2004 Mathias Sundman <[email protected]...>* 2010 Heiko Hund <[email protected]...>
+ * Portions Copyright (C) 2018 Microsoft Corporation
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published
by
... the effect differs...
But anyway. If possible, use "git send-email" (which is much better at not massacring things than the standard clients) - and point it to something which is not Exchange. Unfortunately, we've seen that as well, git-send-email sending via SMTP to Exchange, and Exchange hacking and slaying at the patch...
thanks :)
gert
--
"If was one thing all people took for granted, was conviction that if you feed honest figures into a computer, honest figures come out. Never doubted it myself till I met a computer with a sense of humor."
Robert A. Heinlein, The Moon is a Harsh Mistress
Gert Doering - Munich, Germany [email protected]...
Hi,
Quoted 3 lines · Kevin Kane
Ugh. Thanks, Outlook. I'd have to use a personal e-mail account to use something other than Exchange.
The other option is for me to add the files to the e-mail as attachments. Is that acceptable, or do you really need the patch text to be in the message body?
For applying with "git am" and for reviewing with "I can just quote parts of the patch and comment on it", attachments in anything that is not text/plain format are also not ideal, but we can try that.
We've had a few patches come in recently that were attachment in a signed mail, and neither patchwork nor git could handle these mails in a satisfying way - as in: patchwork did not recognize them as "patch", and "git am" declared "no patch in there" - so "save patch as individual file, git am, manually add in-reply-to to the auto- generated "patch applied" reply mail, etc.
It's a bit of try and error what works in a given environment.
(git send-email talking SMTP to Exchange might actually work more nicely than outlook. Maybe that was just one particularily weird version of Exchange, or "too many virus scanner plugins hooked in", given that this was Sophos...)
gert
Signature · 6 lines
"If was one thing all people took for granted, was conviction that if you
feed honest figures into a computer, honest figures come out. Never doubted
it myself till I met a computer with a sense of humor."
Robert A. Heinlein, The Moon is a Harsh Mistress
Gert Doering - Munich, Germany [email protected]...Alright, I found the SMTP server and sent the patches out again with git send-email. Let me know how those look.
-----Original Message-----
From: Gert Doering <[email protected]...>
Sent: Wednesday, July 25, 2018 11:18 AM
To: Kevin Kane <[email protected]...>
Cc: Gert Doering <[email protected]...>; openvpn-devel <[email protected]>
Subject: Re: [Openvpn-devel] [PATCH] [openvpn-gui] Update system tray to populate Windows VPN flyout
Hi,
Quoted 3 lines · Kevin Kane
Ugh. Thanks, Outlook. I'd have to use a personal e-mail account to use something other than Exchange.
The other option is for me to add the files to the e-mail as attachments. Is that acceptable, or do you really need the patch text to be in the message body?
For applying with "git am" and for reviewing with "I can just quote parts of the patch and comment on it", attachments in anything that is not text/plain format are also not ideal, but we can try that.
We've had a few patches come in recently that were attachment in a signed mail, and neither patchwork nor git could handle these mails in a satisfying way - as in: patchwork did not recognize them as "patch", and "git am" declared "no patch in there" - so "save patch as individual file, git am, manually add in-reply-to to the auto- generated "patch applied" reply mail, etc.
It's a bit of try and error what works in a given environment.
(git send-email talking SMTP to Exchange might actually work more nicely than outlook. Maybe that was just one particularily weird version of Exchange, or "too many virus scanner plugins hooked in", given that this was Sophos...)
gert
--
"If was one thing all people took for granted, was conviction that if you feed honest figures into a computer, honest figures come out. Never doubted it myself till I met a computer with a sense of humor."
Robert A. Heinlein, The Moon is a Harsh Mistress
Gert Doering - Munich, Germany [email protected]...
чт, 26 июл. 2018 г. в 1:04, Kevin Kane via Openvpn-devel < [email protected]>:
Quoted 3 lines
Alright, I found the SMTP server and sent the patches out again with git send-email. Let me know how those look.
looks good from patchwork point of view:
https://patchwork.openvpn.net/project/openvpn2/list/
Quoted 59 lines
-----Original Message-----
From: Gert Doering <[email protected]...>
Sent: Wednesday, July 25, 2018 11:18 AM
To: Kevin Kane <[email protected]...>
Cc: Gert Doering <[email protected]...>; openvpn-devel < [email protected]>
Subject: Re: [Openvpn-devel] [PATCH] [openvpn-gui] Update system tray to populate Windows VPN flyoutHi,
Quoted 1 line · Kevin Kane
Ugh. Thanks, Outlook. I'd have to use a personal e-mail account to use
something other than Exchange.
Quoted 2 lines
The other option is for me to add the files to the e-mail as
attachments. Is that acceptable, or do you really need the patch text to be in the message body?
For applying with "git am" and for reviewing with "I can just quote parts of the patch and comment on it", attachments in anything that is not text/plain format are also not ideal, but we can try that.
We've had a few patches come in recently that were attachment in a signed mail, and neither patchwork nor git could handle these mails in a satisfying way - as in: patchwork did not recognize them as "patch", and "git am" declared "no patch in there" - so "save patch as individual file, git am, manually add in-reply-to to the auto- generated "patch applied" reply mail, etc.
It's a bit of try and error what works in a given environment.
(git send-email talking SMTP to Exchange might actually work more nicely than outlook. Maybe that was just one particularily weird version of Exchange, or "too many virus scanner plugins hooked in", given that this was Sophos...)
gert
--
"If was one thing all people took for granted, was conviction that if you feed honest figures into a computer, honest figures come out. Never doubted it myself till I met a computer with a sense of humor."
Robert A. Heinlein, The Moon is a Harsh
MistressGert Doering - Munich, Germany
[email protected]...------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Openvpn-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/openvpn-devel