diff options
author | Arne Schwabe <arne@rfc2549.org> | 2015-09-15 11:23:32 +0200 |
---|---|---|
committer | Gert Doering <gert@greenie.muc.de> | 2015-09-15 12:47:45 +0200 |
commit | 300039789b23216f1733890063cef3120722f4cf (patch) | |
tree | aaf5c4d6487dd796828c00f10a3aef986cd860fe /src/openvpn/manage.c | |
parent | 1d11134feee33689904ded0c6a0108e865d17d7e (diff) | |
download | openvpn-300039789b23216f1733890063cef3120722f4cf.tar.gz openvpn-300039789b23216f1733890063cef3120722f4cf.tar.xz openvpn-300039789b23216f1733890063cef3120722f4cf.zip |
Add support for requesting the fd again to rebind to the next interface.
This not done via android_control since calling management from management
leads to an infinitive loop
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <1442309019-7586-2-git-send-email-arne@rfc2549.org>
URL: http://article.gmane.org/gmane.network.openvpn.devel/10110
Signed-off-by: Gert Doering <gert@greenie.muc.de>
Diffstat (limited to 'src/openvpn/manage.c')
-rw-r--r-- | src/openvpn/manage.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/openvpn/manage.c b/src/openvpn/manage.c index 4f0945c..af4aa44 100644 --- a/src/openvpn/manage.c +++ b/src/openvpn/manage.c @@ -1127,6 +1127,26 @@ man_remote (struct management *man, const char **p) } } +#ifdef TARGET_ANDROID +static void +man_network_change (struct management *man) +{ + /* Called to signal the OpenVPN that the network configuration has changed and + the client should either float or reconnect. + + The code is currently only used by ics-openvpn + */ + if (man->persist.callback.network_change) + { + int fd = (*man->persist.callback.network_change)(man->persist.callback.arg); + man->connection.fdtosend = fd; + msg (M_CLIENT, "PROTECTFD: fd '%d' sent to be protected", fd); + if (fd == -2) + man_signal (man, "SIGUSR1"); + } +} +#endif + static void man_dispatch_command (struct management *man, struct status_output *so, const char **p, const int nparms) { @@ -1170,6 +1190,12 @@ man_dispatch_command (struct management *man, struct status_output *so, const ch if (man_need (man, p, 1, 0)) man_signal (man, p[1]); } +#ifdef TARGET_ANDROID + else if (streq (p[0], "network-change")) + { + man_network_change(man); + } +#endif else if (streq (p[0], "load-stats")) { man_load_stats (man); |