[PATCH 3/5] ProxyConfig fields added to NMDevice and NMVpnConnection.
- From: Atul Anand <atulhjp gmail com>
- To: networkmanager-list gnome org
- Cc: dwmw2 infradead org
- Subject: [PATCH 3/5] ProxyConfig fields added to NMDevice and NMVpnConnection.
- Date: Fri, 24 Jun 2016 00:42:30 +0530
Fields for storing ProxyConfig added to store proxy details
for that Object.
---
src/devices/nm-device.c | 51 +++++++++++++++++++++++++++++++++++++
src/devices/nm-device.h | 3 +++
src/vpn-manager/nm-vpn-connection.c | 24 +++++++++++++++++
src/vpn-manager/nm-vpn-connection.h | 2 ++
4 files changed, 80 insertions(+)
diff --git a/src/devices/nm-device.c b/src/devices/nm-device.c
index 5fd0bf3..cc99bd1 100644
--- a/src/devices/nm-device.c
+++ b/src/devices/nm-device.c
@@ -45,6 +45,7 @@
#include "nm-lndp-rdisc.h"
#include "nm-dhcp-manager.h"
#include "nm-activation-request.h"
+#include "nm-proxy-config.h"
#include "nm-ip4-config.h"
#include "nm-ip6-config.h"
#include "nm-dnsmasq-manager.h"
@@ -111,6 +112,7 @@ NM_GOBJECT_PROPERTIES_DEFINE (NMDevice,
PROP_CARRIER,
PROP_MTU,
PROP_IP4_ADDRESS,
+ PROP_PROXY_CONFIG,
PROP_IP4_CONFIG,
PROP_DHCP4_CONFIG,
PROP_IP6_CONFIG,
@@ -288,6 +290,9 @@ typedef struct _NMDevicePrivate {
guint32 dhcp_timeout;
char * dhcp_anycast_address;
+ /* Proxy Configuration */
+ NMProxyConfig * proxy_config;
+
/* IP4 configuration info */
NMIP4Config * ip4_config; /* Combined config from VPN, settings, and device */
IpState ip4_state;
@@ -396,6 +401,8 @@ typedef struct _NMDevicePrivate {
guint check_delete_unrealized_id;
} NMDevicePrivate;
+static void nm_device_set_proxy_config (NMDevice *self, GHashTable *options);
+
static gboolean nm_device_set_ip4_config (NMDevice *self,
NMIP4Config *config,
guint32 default_route_metric,
@@ -4790,6 +4797,8 @@ dhcp4_state_changed (NMDhcpClient *client,
break;
}
+ nm_device_set_proxy_config (self, options);
+
nm_dhcp4_config_set_options (priv->dhcp4.config, options);
_notify (self, PROP_DHCP4_CONFIG);
priv->dhcp4.num_tries_left = DHCP_NUM_TRIES_MAX;
@@ -8223,6 +8232,39 @@ nm_device_get_dhcp4_config (NMDevice *self)
return NM_DEVICE_GET_PRIVATE (self)->dhcp4.config;
}
+NMProxyConfig *
+nm_device_get_proxy_config (NMDevice *self)
+{
+ g_return_val_if_fail (NM_IS_DEVICE (self), NULL);
+
+ return NM_DEVICE_GET_PRIVATE (self)->proxy_config;
+}
+
+static void
+nm_device_set_proxy_config (NMDevice *self, GHashTable *options)
+{
+ NMDevicePrivate *priv;
+ char *pac = NULL;
+
+ g_return_if_fail (NM_IS_DEVICE (self));
+
+ priv = NM_DEVICE_GET_PRIVATE (self);
+ if (!options)
+ _LOGI (LOGD_DEVICE, "Failed to get DHCP options");
+
+ priv->proxy_config = nm_proxy_config_new ();
+
+ pac = g_hash_table_lookup (options, "wpad");
+ if (pac) {
+ nm_proxy_config_set_method (priv->proxy_config, NM_PROXY_CONFIG_METHOD_AUTO);
+ nm_proxy_config_set_pac_url (priv->proxy_config, pac);
+ _LOGD (LOGD_PROXY, "Device's proxy config method: AUTO");
+ } else {
+ nm_proxy_config_set_method (priv->proxy_config, NM_PROXY_CONFIG_METHOD_NONE);
+ _LOGI (LOGD_PROXY, "PAC url not obtained from DHCP server");
+ }
+}
+
NMIP4Config *
nm_device_get_ip4_config (NMDevice *self)
{
@@ -10477,6 +10519,7 @@ _cleanup_generic_post (NMDevice *self, CleanupType cleanup_type)
*/
nm_device_set_ip4_config (self, NULL, 0, TRUE, TRUE, NULL);
nm_device_set_ip6_config (self, NULL, TRUE, TRUE, NULL);
+ g_clear_object (&priv->proxy_config);
g_clear_object (&priv->con_ip4_config);
g_clear_object (&priv->dev_ip4_config);
g_clear_object (&priv->ext_ip4_config);
@@ -11889,6 +11932,9 @@ get_property (GObject *object, guint prop_id,
case PROP_MTU:
g_value_set_uint (value, priv->mtu);
break;
+ case PROP_PROXY_CONFIG:
+ nm_utils_g_value_set_object_path (value, ip_config_valid (priv->state) ? priv->proxy_config :
NULL);
+ break;
case PROP_IP4_CONFIG:
nm_utils_g_value_set_object_path (value, ip_config_valid (priv->state) ? priv->ip4_config :
NULL);
break;
@@ -12093,6 +12139,11 @@ nm_device_class_init (NMDeviceClass *klass)
0, G_MAXUINT32, 0, /* FIXME */
G_PARAM_READWRITE |
G_PARAM_STATIC_STRINGS);
+ obj_properties[PROP_PROXY_CONFIG] =
+ g_param_spec_string (NM_DEVICE_PROXY_CONFIG, "", "",
+ NULL,
+ G_PARAM_READWRITE |
+ G_PARAM_STATIC_STRINGS);
obj_properties[PROP_IP4_CONFIG] =
g_param_spec_string (NM_DEVICE_IP4_CONFIG, "", "",
NULL,
diff --git a/src/devices/nm-device.h b/src/devices/nm-device.h
index 4b365d6..f058eea 100644
--- a/src/devices/nm-device.h
+++ b/src/devices/nm-device.h
@@ -40,6 +40,7 @@
#define NM_DEVICE_CAPABILITIES "capabilities"
#define NM_DEVICE_CARRIER "carrier"
#define NM_DEVICE_IP4_ADDRESS "ip4-address"
+#define NM_DEVICE_PROXY_CONFIG "proxy-config"
#define NM_DEVICE_IP4_CONFIG "ip4-config"
#define NM_DEVICE_DHCP4_CONFIG "dhcp4-config"
#define NM_DEVICE_IP6_CONFIG "ip6-config"
@@ -359,6 +360,8 @@ const char * nm_device_get_initial_hw_address (NMDevice *dev);
NMDhcp4Config * nm_device_get_dhcp4_config (NMDevice *dev);
NMDhcp6Config * nm_device_get_dhcp6_config (NMDevice *dev);
+NMProxyConfig * nm_device_get_proxy_config (NMDevice *dev);
+
NMIP4Config * nm_device_get_ip4_config (NMDevice *dev);
void nm_device_replace_vpn4_config (NMDevice *dev,
NMIP4Config *old,
diff --git a/src/vpn-manager/nm-vpn-connection.c b/src/vpn-manager/nm-vpn-connection.c
index b2aa8f6..6ed79cd 100644
--- a/src/vpn-manager/nm-vpn-connection.c
+++ b/src/vpn-manager/nm-vpn-connection.c
@@ -31,6 +31,7 @@
#include <syslog.h>
#include "nm-vpn-connection.h"
+#include "nm-proxy-config.h"
#include "nm-ip4-config.h"
#include "nm-ip6-config.h"
#include "nm-platform.h"
@@ -107,6 +108,7 @@ typedef struct {
GCancellable *cancellable;
GVariant *connect_hash;
guint connect_timeout;
+ NMProxyConfig *proxy_config;
gboolean has_ip4;
NMIP4Config *ip4_config;
guint32 ip4_internal_gw;
@@ -511,6 +513,7 @@ _set_vpn_state (NMVpnConnection *self,
_get_applied_connection (self),
parent_dev,
priv->ip_iface,
+ priv->proxy_config,
priv->ip4_config,
priv->ip6_config,
dispatcher_pre_up_done,
@@ -530,6 +533,7 @@ _set_vpn_state (NMVpnConnection *self,
_get_applied_connection (self),
parent_dev,
priv->ip_iface,
+ priv->proxy_config,
priv->ip4_config,
priv->ip6_config,
NULL,
@@ -543,6 +547,7 @@ _set_vpn_state (NMVpnConnection *self,
_get_applied_connection (self),
parent_dev,
priv->ip_iface,
+ priv->proxy_config,
priv->ip4_config,
priv->ip6_config);
} else {
@@ -551,6 +556,7 @@ _set_vpn_state (NMVpnConnection *self,
_get_applied_connection (self),
parent_dev,
priv->ip_iface,
+ priv->proxy_config,
priv->ip4_config,
priv->ip6_config,
dispatcher_pre_down_done,
@@ -573,6 +579,7 @@ _set_vpn_state (NMVpnConnection *self,
parent_dev,
priv->ip_iface,
NULL,
+ NULL,
NULL);
} else {
nm_dispatcher_call_vpn (DISPATCHER_ACTION_VPN_DOWN,
@@ -584,6 +591,7 @@ _set_vpn_state (NMVpnConnection *self,
NULL,
NULL,
NULL,
+ NULL,
NULL);
}
}
@@ -1251,6 +1259,12 @@ process_generic_config (NMVpnConnection *self, GVariant *dict)
g_object_notify (G_OBJECT (self), NM_VPN_CONNECTION_BANNER);
}
+ if (g_variant_lookup (dict, NM_VPN_PLUGIN_CONFIG_PROXY_PAC, "&s", &str)) {
+ nm_proxy_config_set_method (priv->proxy_config, NM_PROXY_CONFIG_METHOD_AUTO);
+ nm_proxy_config_set_pac_url (priv->proxy_config, str);
+ } else
+ nm_proxy_config_set_method (priv->proxy_config, NM_PROXY_CONFIG_METHOD_NONE);
+
/* External world-visible address of the VPN server */
priv->ip4_external_gw = 0;
g_clear_pointer (&priv->ip6_external_gw, g_free);
@@ -2135,6 +2149,14 @@ nm_vpn_connection_get_banner (NMVpnConnection *self)
return NM_VPN_CONNECTION_GET_PRIVATE (self)->banner;
}
+NMProxyConfig *
+nm_vpn_connection_get_proxy_config (NMVpnConnection *self)
+{
+ g_return_val_if_fail (NM_IS_VPN_CONNECTION (self), NULL);
+
+ return NM_VPN_CONNECTION_GET_PRIVATE (self)->proxy_config;
+}
+
NMIP4Config *
nm_vpn_connection_get_ip4_config (NMVpnConnection *self)
{
@@ -2509,6 +2531,7 @@ nm_vpn_connection_init (NMVpnConnection *self)
priv->vpn_state = STATE_WAITING;
priv->secrets_idx = SECRETS_REQ_SYSTEM;
+ priv->proxy_config = g_object_ref (nm_proxy_config_new ());
priv->default_route_manager = g_object_ref (nm_default_route_manager_get ());
priv->route_manager = g_object_ref (nm_route_manager_get ());
}
@@ -2533,6 +2556,7 @@ dispose (GObject *object)
g_cancellable_cancel (priv->cancellable);
g_clear_object (&priv->cancellable);
}
+ g_clear_object (&priv->proxy_config);
nm_exported_object_clear_and_unexport (&priv->ip4_config);
nm_exported_object_clear_and_unexport (&priv->ip6_config);
g_clear_object (&priv->proxy);
diff --git a/src/vpn-manager/nm-vpn-connection.h b/src/vpn-manager/nm-vpn-connection.h
index 6837432..09a0379 100644
--- a/src/vpn-manager/nm-vpn-connection.h
+++ b/src/vpn-manager/nm-vpn-connection.h
@@ -89,6 +89,8 @@ void nm_vpn_connection_disconnect (NMVpnConnection *self,
NMVpnConnectionStateReason reason,
gboolean quitting);
+NMProxyConfig * nm_vpn_connection_get_proxy_config (NMVpnConnection *self);
+
NMIP4Config * nm_vpn_connection_get_ip4_config (NMVpnConnection *self);
NMIP6Config * nm_vpn_connection_get_ip6_config (NMVpnConnection *self);
const char * nm_vpn_connection_get_ip_iface (NMVpnConnection *self, gboolean fallback_device);
--
2.5.5
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]