diff options
Diffstat (limited to 'main/openvpn/src')
| -rw-r--r-- | main/openvpn/src/openvpn/init.c | 17 | ||||
| -rw-r--r-- | main/openvpn/src/openvpn/manage.c | 17 | ||||
| -rw-r--r-- | main/openvpn/src/openvpn/manage.h | 3 | 
3 files changed, 37 insertions, 0 deletions
| diff --git a/main/openvpn/src/openvpn/init.c b/main/openvpn/src/openvpn/init.c index c39646de..a866b7d6 100644 --- a/main/openvpn/src/openvpn/init.c +++ b/main/openvpn/src/openvpn/init.c @@ -3209,6 +3209,20 @@ management_show_net_callback (void *arg, const int msglevel)  #endif  } +#ifdef TARGET_ANDROID +int +managmenet_callback_network_change (void *arg) +{ +  struct context *c = (struct context *) arg; +  if (!c->c2.link_socket) +    return -1; +  if (c->c2.link_socket->sd == SOCKET_UNDEFINED) +    return -1; + +  return c->c2.link_socket->sd; +} +#endif +  #endif  void @@ -3224,6 +3238,9 @@ init_management_callback_p2p (struct context *c)        cb.show_net = management_show_net_callback;        cb.proxy_cmd = management_callback_proxy_cmd;        cb.remote_cmd = management_callback_remote_cmd; +#ifdef TARGET_ANDROID +      cb.network_change = managmenet_callback_network_change; +#endif        management_set_callback (management, &cb);      }  #endif diff --git a/main/openvpn/src/openvpn/manage.c b/main/openvpn/src/openvpn/manage.c index 561c252b..855ed042 100644 --- a/main/openvpn/src/openvpn/manage.c +++ b/main/openvpn/src/openvpn/manage.c @@ -1105,6 +1105,19 @@ man_remote (struct management *man, const char **p)      }  } +#ifdef TARGET_ANDROID +static void +man_network_change (struct management *man) +{ +  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); +    } +} +#endif +  static void  man_dispatch_command (struct management *man, struct status_output *so, const char **p, const int nparms)  { @@ -1148,6 +1161,10 @@ man_dispatch_command (struct management *man, struct status_output *so, const ch        if (man_need (man, p, 1, 0))  	man_signal (man, p[1]);      } +  else if (streq (p[0], "network-change")) +    { +        man_network_change(man); +    }    else if (streq (p[0], "load-stats"))      {        man_load_stats (man); diff --git a/main/openvpn/src/openvpn/manage.h b/main/openvpn/src/openvpn/manage.h index 1c8dda69..c48875c7 100644 --- a/main/openvpn/src/openvpn/manage.h +++ b/main/openvpn/src/openvpn/manage.h @@ -173,6 +173,9 @@ struct management_callback  #endif    bool (*proxy_cmd) (void *arg, const char **p);    bool (*remote_cmd) (void *arg, const char **p); +#ifdef TARGET_ANDROID +  int (*network_change) (void *arg); +#endif  };  /* | 
