Hi,

nice work; the patch set looks overall very good. I'll take a closer
look tomorrow.

Two general nitpicks:

Please comment more. Especially the non-static procedures often need a
Gtk-Doc block. E.g. looking at nm_pacrunner_manager_send() I have very
little idea why do I need to pass ip* configs, and what are they used
for without digging too deep into the code. Also, the logic sometimes
need comments: for instance after a quick look at add_ip4_config() I
can't figure why it only works for type=vpn.

Also, please add license blocks for files you add and copyright notices
wherever you add non-trivial amount of code.

Thank you,
Lubo

On Fri, 2016-06-24 at 00:42 +0530, Atul Anand wrote:
> 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__ */
_______________________________________________
networkmanager-list mailing list
networkmanager-list@gnome.org
https://mail.gnome.org/mailman/listinfo/networkmanager-list

Reply via email to