src:(proxy): A new Object NMProxyConfig with Proxy Parameters
A new config object NMProxyConfig has been implemented inside core which contains proxy parameters.
This commit is contained in:

committed by
Thomas Haller

parent
2a40112ebe
commit
ecfcdbda46
@@ -442,6 +442,8 @@ libNetworkManager_la_SOURCES = \
|
|||||||
nm-exported-object.h \
|
nm-exported-object.h \
|
||||||
nm-firewall-manager.c \
|
nm-firewall-manager.c \
|
||||||
nm-firewall-manager.h \
|
nm-firewall-manager.h \
|
||||||
|
nm-proxy-config.c \
|
||||||
|
nm-proxy-config.h \
|
||||||
nm-ip4-config.c \
|
nm-ip4-config.c \
|
||||||
nm-ip4-config.h \
|
nm-ip4-config.h \
|
||||||
nm-ip6-config.c \
|
nm-ip6-config.c \
|
||||||
@@ -566,6 +568,8 @@ nm_iface_helper_SOURCES = \
|
|||||||
\
|
\
|
||||||
nm-exported-object.c \
|
nm-exported-object.c \
|
||||||
nm-exported-object.h \
|
nm-exported-object.h \
|
||||||
|
nm-proxy-config.c \
|
||||||
|
nm-proxy-config.h \
|
||||||
nm-ip4-config.c \
|
nm-ip4-config.c \
|
||||||
nm-ip4-config.h \
|
nm-ip4-config.h \
|
||||||
nm-ip6-config.c \
|
nm-ip6-config.c \
|
||||||
|
245
src/nm-proxy-config.c
Normal file
245
src/nm-proxy-config.c
Normal file
@@ -0,0 +1,245 @@
|
|||||||
|
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
|
||||||
|
/* NetworkManager
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* (C) Copyright 2016 Atul Anand <atulhjp@gmail.com>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "nm-default.h"
|
||||||
|
|
||||||
|
#include "nm-proxy-config.h"
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "nm-core-internal.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;
|
||||||
|
GPtrArray *excludes;
|
||||||
|
gboolean browser_only;
|
||||||
|
char *pac_url;
|
||||||
|
char *pac_script;
|
||||||
|
} NMProxyConfigPrivate;
|
||||||
|
|
||||||
|
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_merge_setting (NMProxyConfig *config, NMSettingProxy *setting)
|
||||||
|
{
|
||||||
|
const char *tmp = NULL;
|
||||||
|
guint32 port = 0;
|
||||||
|
NMProxyConfigPrivate *priv;
|
||||||
|
NMSettingProxyMethod method;
|
||||||
|
|
||||||
|
if (!setting)
|
||||||
|
return;
|
||||||
|
|
||||||
|
g_return_if_fail (NM_IS_SETTING_PROXY (setting));
|
||||||
|
|
||||||
|
priv = NM_PROXY_CONFIG_GET_PRIVATE (config);
|
||||||
|
|
||||||
|
g_ptr_array_free (priv->proxies, TRUE);
|
||||||
|
g_ptr_array_free (priv->excludes, TRUE);
|
||||||
|
g_free (priv->pac_script);
|
||||||
|
|
||||||
|
priv->proxies = NULL;
|
||||||
|
priv->excludes = NULL;
|
||||||
|
priv->pac_script = NULL;
|
||||||
|
|
||||||
|
method = nm_setting_proxy_get_method (setting);
|
||||||
|
switch (method) {
|
||||||
|
case NM_SETTING_PROXY_METHOD_AUTO:
|
||||||
|
priv->method = NM_PROXY_CONFIG_METHOD_AUTO;
|
||||||
|
|
||||||
|
/* Free DHCP Obtained PAC Url (i.e Option 252)
|
||||||
|
* only when libnm overrides it.
|
||||||
|
*/
|
||||||
|
tmp = nm_setting_proxy_get_pac_url (setting);
|
||||||
|
if (tmp) {
|
||||||
|
g_free (priv->pac_url);
|
||||||
|
priv->pac_url = g_strdup (tmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
tmp = nm_setting_proxy_get_pac_script (setting);
|
||||||
|
priv->pac_script = g_strdup (tmp);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case NM_SETTING_PROXY_METHOD_MANUAL:
|
||||||
|
priv->method = NM_PROXY_CONFIG_METHOD_MANUAL;
|
||||||
|
|
||||||
|
priv->excludes = _nm_utils_strv_to_ptrarray ((char **) nm_setting_proxy_get_no_proxy_for (setting));
|
||||||
|
|
||||||
|
priv->proxies = g_ptr_array_new_with_free_func (g_free);
|
||||||
|
|
||||||
|
tmp = nm_setting_proxy_get_http_proxy (setting);
|
||||||
|
port = nm_setting_proxy_get_http_port (setting);
|
||||||
|
|
||||||
|
/* If HTTP Proxy has been selected for all Protocols
|
||||||
|
* set up a generic proxy in PacRunner i.e without a
|
||||||
|
* protocol prefix.
|
||||||
|
*/
|
||||||
|
if (nm_setting_proxy_get_http_default (setting)) {
|
||||||
|
if (tmp && port)
|
||||||
|
g_ptr_array_add (priv->proxies, g_strdup_printf ("%s:%u/", tmp, port));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tmp && port)
|
||||||
|
g_ptr_array_add (priv->proxies, g_strdup_printf ("http://%s:%u/", tmp, port));
|
||||||
|
|
||||||
|
tmp = nm_setting_proxy_get_ssl_proxy (setting);
|
||||||
|
port = nm_setting_proxy_get_ssl_port (setting);
|
||||||
|
if (tmp && port)
|
||||||
|
g_ptr_array_add (priv->proxies, g_strdup_printf ("https://%s:%u/", tmp, port));
|
||||||
|
|
||||||
|
tmp = nm_setting_proxy_get_ftp_proxy (setting);
|
||||||
|
port = nm_setting_proxy_get_ftp_port (setting);
|
||||||
|
if (tmp && port)
|
||||||
|
g_ptr_array_add (priv->proxies, g_strdup_printf ("ftp://%s:%u/", tmp, port));
|
||||||
|
|
||||||
|
tmp = nm_setting_proxy_get_socks_proxy (setting);
|
||||||
|
port = nm_setting_proxy_get_socks_port (setting);
|
||||||
|
if (tmp && port)
|
||||||
|
g_ptr_array_add (priv->proxies, g_strdup_printf (nm_setting_proxy_get_socks_version_5 (setting) ?
|
||||||
|
"socks5://%s:%u/" : "socks4://%s:%u/", tmp, port));
|
||||||
|
|
||||||
|
break;
|
||||||
|
case NM_SETTING_PROXY_METHOD_NONE:
|
||||||
|
priv->method = NM_PROXY_CONFIG_METHOD_NONE;
|
||||||
|
/* Do Nothing */
|
||||||
|
}
|
||||||
|
|
||||||
|
priv->browser_only = nm_setting_proxy_get_browser_only (setting);
|
||||||
|
}
|
||||||
|
|
||||||
|
char **
|
||||||
|
nm_proxy_config_get_proxies (const NMProxyConfig *config)
|
||||||
|
{
|
||||||
|
NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE (config);
|
||||||
|
|
||||||
|
return _nm_utils_ptrarray_to_strv (priv->proxies);
|
||||||
|
}
|
||||||
|
|
||||||
|
char **
|
||||||
|
nm_proxy_config_get_excludes (const NMProxyConfig *config)
|
||||||
|
{
|
||||||
|
NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE (config);
|
||||||
|
|
||||||
|
return _nm_utils_ptrarray_to_strv (priv->excludes);
|
||||||
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
nm_proxy_config_get_browser_only (const NMProxyConfig *config)
|
||||||
|
{
|
||||||
|
NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE (config);
|
||||||
|
|
||||||
|
return priv->browser_only;
|
||||||
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
priv->excludes = 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);
|
||||||
|
|
||||||
|
if (priv->proxies)
|
||||||
|
g_ptr_array_free (priv->proxies, TRUE);
|
||||||
|
if (priv->excludes)
|
||||||
|
g_ptr_array_free (priv->excludes, TRUE);
|
||||||
|
g_free (priv->pac_url);
|
||||||
|
g_free (priv->pac_script);
|
||||||
|
|
||||||
|
G_OBJECT_CLASS (nm_proxy_config_parent_class)->finalize (object);
|
||||||
|
}
|
||||||
|
|
||||||
|
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));
|
||||||
|
|
||||||
|
object_class->finalize = finalize;
|
||||||
|
}
|
68
src/nm-proxy-config.h
Normal file
68
src/nm-proxy-config.h
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
|
||||||
|
/* NetworkManager
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License along
|
||||||
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
*
|
||||||
|
* (C) Copyright 2016 Atul Anand <atulhjp@gmail.com>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __NETWORKMANAGER_PROXY_CONFIG_H__
|
||||||
|
#define __NETWORKMANAGER_PROXY_CONFIG_H__
|
||||||
|
|
||||||
|
#include "nm-setting-proxy.h"
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
NM_PROXY_CONFIG_METHOD_AUTO = 0,
|
||||||
|
NM_PROXY_CONFIG_METHOD_MANUAL,
|
||||||
|
NM_PROXY_CONFIG_METHOD_NONE
|
||||||
|
} 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;
|
||||||
|
|
||||||
|
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_merge_setting (NMProxyConfig *config, NMSettingProxy *setting);
|
||||||
|
|
||||||
|
char ** nm_proxy_config_get_proxies (const NMProxyConfig *config);
|
||||||
|
|
||||||
|
char ** nm_proxy_config_get_excludes (const NMProxyConfig *config);
|
||||||
|
|
||||||
|
gboolean nm_proxy_config_get_browser_only (const NMProxyConfig *config);
|
||||||
|
|
||||||
|
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__ */
|
@@ -42,6 +42,7 @@ typedef struct _NMDefaultRouteManager NMDefaultRouteManager;
|
|||||||
typedef struct _NMDevice NMDevice;
|
typedef struct _NMDevice NMDevice;
|
||||||
typedef struct _NMDhcp4Config NMDhcp4Config;
|
typedef struct _NMDhcp4Config NMDhcp4Config;
|
||||||
typedef struct _NMDhcp6Config NMDhcp6Config;
|
typedef struct _NMDhcp6Config NMDhcp6Config;
|
||||||
|
typedef struct _NMProxyConfig NMProxyConfig;
|
||||||
typedef struct _NMIP4Config NMIP4Config;
|
typedef struct _NMIP4Config NMIP4Config;
|
||||||
typedef struct _NMIP6Config NMIP6Config;
|
typedef struct _NMIP6Config NMIP6Config;
|
||||||
typedef struct _NMManager NMManager;
|
typedef struct _NMManager NMManager;
|
||||||
|
Reference in New Issue
Block a user