A new Object NMProxyConfig added with properties for proxies, PAC Url and PAC Script. Getters are setters implemented for manipulating those fields. --- src/Makefile.am | 4 + src/nm-proxy-config.c | 243 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/nm-proxy-config.h | 53 +++++++++++ 3 files changed, 300 insertions(+) create mode 100644 src/nm-proxy-config.c create mode 100644 src/nm-proxy-config.h
diff --git a/src/Makefile.am b/src/Makefile.am index 5e289d9..700cfc4 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -415,6 +415,8 @@ libNetworkManager_la_SOURCES = \ nm-exported-object.h \ nm-firewall-manager.c \ nm-firewall-manager.h \ + nm-proxy-config.c \ + nm-proxy-config.h \ nm-ip4-config.c \ nm-ip4-config.h \ nm-ip6-config.c \ @@ -565,6 +567,8 @@ libnm_iface_helper_la_SOURCES = \ \ nm-exported-object.c \ nm-exported-object.h \ + nm-proxy-config.c \ + nm-proxy-config.h \ nm-ip4-config.c \ nm-ip4-config.h \ nm-ip6-config.c \ diff --git a/src/nm-proxy-config.c b/src/nm-proxy-config.c new file mode 100644 index 0000000..93f9b21 --- /dev/null +++ b/src/nm-proxy-config.c @@ -0,0 +1,243 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ + +#include "nm-default.h" + +#include "nm-proxy-config.h" + +#include <string.h> + +#include "nm-utils.h" +#include "NetworkManagerUtils.h" + +#define NM_PROXY_CONFIG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_PROXY_CONFIG, NMProxyConfigPrivate)) + +G_DEFINE_TYPE (NMProxyConfig, nm_proxy_config, G_TYPE_OBJECT) + +typedef struct { + NMProxyConfigMethod method; + GPtrArray *proxies; + char *pac_url; + char *pac_script; +} NMProxyConfigPrivate; + +NM_GOBJECT_PROPERTIES_DEFINE (NMProxyConfig, + PROP_METHOD, + PROP_PROXIES, + PROP_PAC_URL, + PROP_PAC_SCRIPT, +); + +NMProxyConfig * +nm_proxy_config_new (void) +{ + return NM_PROXY_CONFIG (g_object_new (NM_TYPE_PROXY_CONFIG, NULL)); +} + +void +nm_proxy_config_set_method (NMProxyConfig *config, NMProxyConfigMethod method) +{ + NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE (config); + + priv->method = method; +} + +NMProxyConfigMethod +nm_proxy_config_get_method (const NMProxyConfig *config) +{ + NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE (config); + + return priv->method; +} + +void +nm_proxy_config_reset_proxies (NMProxyConfig *config) +{ + NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE (config); + + if (priv->proxies->len !=0) { + g_ptr_array_set_size (priv->proxies, 0); + _notify (config, PROP_PROXIES); + } +} + +void +nm_proxy_config_add_proxy (NMProxyConfig *config, const char *proxy) +{ + NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE (config); + int i; + + g_return_if_fail (proxy != NULL); + g_return_if_fail (proxy[0] != '\0'); + + for (i = 0; i < priv->proxies->len; i++) + if (!g_strcmp0 (g_ptr_array_index (priv->proxies, i), proxy)) + return; + + g_ptr_array_add (priv->proxies, g_strdup (proxy)); + _notify (config, PROP_PROXIES); +} + +void +nm_proxy_config_del_proxy (NMProxyConfig *config, guint i) +{ + NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE (config); + + g_return_if_fail (i < priv->proxies->len); + + g_ptr_array_remove_index (priv->proxies, i); + _notify (config, PROP_PROXIES); +} + +guint32 +nm_proxy_config_get_num_proxies (const NMProxyConfig *config) +{ + NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE (config); + + return priv->proxies->len; +} + +const char * +nm_proxy_config_get_proxy (const NMProxyConfig *config, guint i) +{ + NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE (config); + + return g_ptr_array_index (priv->proxies, i); +} + +void +nm_proxy_config_set_pac_url (NMProxyConfig *config, const char *url) +{ + NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE (config); + + g_free (priv->pac_url); + priv->pac_url = g_strdup (url); +} + +const char * +nm_proxy_config_get_pac_url (const NMProxyConfig *config) +{ + NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE (config); + + return priv->pac_url; +} + +void +nm_proxy_config_set_pac_script (NMProxyConfig *config, const char *script) +{ + NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE (config); + + g_free (priv->pac_script); + priv->pac_script = g_strdup (script); +} + +const char * +nm_proxy_config_get_pac_script (const NMProxyConfig *config) +{ + NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE (config); + + return priv->pac_script; +} + +static void +nm_proxy_config_init (NMProxyConfig *config) +{ + NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE (config); + + priv->method = NM_PROXY_CONFIG_METHOD_NONE; + priv->proxies = g_ptr_array_new_with_free_func (g_free); +} + +static void +finalize (GObject *object) +{ + NMProxyConfig *self = NM_PROXY_CONFIG (object); + NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE (self); + + g_ptr_array_unref (priv->proxies); + g_free (priv->pac_url); + g_free (priv->pac_script); + + G_OBJECT_CLASS (nm_proxy_config_parent_class)->finalize (object); +} + +static void +get_property (GObject *object, guint prop_id, + GValue *value, GParamSpec *pspec) +{ + NMProxyConfig *config = NM_PROXY_CONFIG (object); + NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE (config); + + switch (prop_id) { + case PROP_METHOD: + g_value_set_int (value, priv->method); + break; + case PROP_PROXIES: + nm_utils_g_value_set_strv (value, priv->proxies); + break; + case PROP_PAC_URL: + g_value_set_string (value, priv->pac_url); + break; + case PROP_PAC_SCRIPT: + g_value_set_string (value, priv->pac_script); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + NMProxyConfig *self = NM_PROXY_CONFIG (object); + NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE (self); + + switch (prop_id) { + case PROP_METHOD: + priv->method = g_value_get_int (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + +static void +nm_proxy_config_class_init (NMProxyConfigClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + g_type_class_add_private (object_class, sizeof (NMProxyConfigPrivate)); + + /* virtual methods */ + object_class->get_property = get_property; + object_class->set_property = set_property; + object_class->finalize = finalize; + + obj_properties[PROP_METHOD] = + g_param_spec_int (NM_PROXY_CONFIG_METHOD, "", "", + 0, G_MAXINT, 0, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS); + obj_properties[PROP_PROXIES] = + g_param_spec_boxed (NM_PROXY_CONFIG_PROXIES, "", "", + G_TYPE_STRV, + G_PARAM_READABLE | + G_PARAM_STATIC_STRINGS); + obj_properties[PROP_PAC_URL] = + g_param_spec_string (NM_PROXY_CONFIG_PAC_URL, "", "", + NULL, + G_PARAM_READABLE | + G_PARAM_STATIC_STRINGS); + obj_properties[PROP_PAC_SCRIPT] = + g_param_spec_string (NM_PROXY_CONFIG_PAC_SCRIPT, "", "", + NULL, + G_PARAM_READABLE | + G_PARAM_STATIC_STRINGS); + + g_object_class_install_properties (object_class, _PROPERTY_ENUMS_LAST, obj_properties); +} diff --git a/src/nm-proxy-config.h b/src/nm-proxy-config.h new file mode 100644 index 0000000..b709e82 --- /dev/null +++ b/src/nm-proxy-config.h @@ -0,0 +1,53 @@ +/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */ + +#include "nm-default.h" + +#ifndef __NETWORKMANAGER_PROXY_CONFIG_H__ +#define __NETWORKMANAGER_PROXY_CONFIG_H__ + +typedef enum { + NM_PROXY_CONFIG_METHOD_NONE = 0, + NM_PROXY_CONFIG_METHOD_AUTO, + NM_PROXY_CONFIG_METHOD_MANUAL +} NMProxyConfigMethod; + +#define NM_TYPE_PROXY_CONFIG (nm_proxy_config_get_type ()) +#define NM_PROXY_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), NM_TYPE_PROXY_CONFIG, NMProxyConfig)) +#define NM_PROXY_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), NM_TYPE_PROXY_CONFIG, NMProxyConfigClass)) +#define NM_IS_PROXY_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), NM_TYPE_PROXY_CONFIG)) +#define NM_IS_PROXY_CONFIG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), NM_TYPE_PROXY_CONFIG)) +#define NM_PROXY_CONFIG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), NM_TYPE_PROXY_CONFIG, NMProxyConfigClass)) + +struct _NMProxyConfig { + GObject parent; +}; + +typedef struct { + GObjectClass parent; +} NMProxyConfigClass; + +#define NM_PROXY_CONFIG_METHOD "method" +#define NM_PROXY_CONFIG_PROXIES "proxies" +#define NM_PROXY_CONFIG_PAC_URL "pac-url" +#define NM_PROXY_CONFIG_PAC_SCRIPT "pac-script" + +GType nm_proxy_config_get_type (void); + +NMProxyConfig * nm_proxy_config_new (void); + +void nm_proxy_config_set_method (NMProxyConfig *config, NMProxyConfigMethod method); +NMProxyConfigMethod nm_proxy_config_get_method (const NMProxyConfig *config); + +void nm_proxy_config_reset_proxies (NMProxyConfig *config); +void nm_proxy_config_add_proxy (NMProxyConfig *config, const char *proxy); +void nm_proxy_config_del_proxy (NMProxyConfig *config, guint i); +guint32 nm_proxy_config_get_num_proxies (const NMProxyConfig *config); +const char * nm_proxy_config_get_proxy (const NMProxyConfig *config, guint i); + +void nm_proxy_config_set_pac_url (NMProxyConfig *config, const char *url); +const char * nm_proxy_config_get_pac_url (const NMProxyConfig *config); + +void nm_proxy_config_set_pac_script (NMProxyConfig *config, const char *script); +const char * nm_proxy_config_get_pac_script (const NMProxyConfig *config); + +#endif /* __NETWORKMANAGER_PROXY_CONFIG_H__ */ -- 2.5.5 _______________________________________________ networkmanager-list mailing list networkmanager-list@gnome.org https://mail.gnome.org/mailman/listinfo/networkmanager-list