Blame src/nm-proxy-config.c

Packit Service a1bd4f
/* SPDX-License-Identifier: GPL-2.0+ */
Packit 5756e2
/*
Packit 5756e2
 * Copyright (C) 2016 Atul Anand <atulhjp@gmail.com>.
Packit 5756e2
 */
Packit 5756e2
Packit 5756e2
#include "nm-default.h"
Packit 5756e2
Packit 5756e2
#include "nm-proxy-config.h"
Packit 5756e2
Packit 5756e2
#include <stdlib.h>
Packit 5756e2
Packit 5756e2
#include "nm-core-internal.h"
Packit 5756e2
Packit 5756e2
/*****************************************************************************/
Packit 5756e2
Packit 5756e2
typedef struct {
Packit Service a1bd4f
    NMProxyConfigMethod method;
Packit Service a1bd4f
    gboolean            browser_only;
Packit Service a1bd4f
    char *              pac_url;
Packit Service a1bd4f
    char *              pac_script;
Packit 5756e2
} NMProxyConfigPrivate;
Packit 5756e2
Packit 5756e2
struct _NMProxyConfig {
Packit Service a1bd4f
    GObject              parent;
Packit Service a1bd4f
    NMProxyConfigPrivate _priv;
Packit 5756e2
};
Packit 5756e2
Packit 5756e2
struct _NMProxyConfigClass {
Packit Service a1bd4f
    GObjectClass parent;
Packit 5756e2
};
Packit 5756e2
Packit Service a1bd4f
G_DEFINE_TYPE(NMProxyConfig, nm_proxy_config, G_TYPE_OBJECT)
Packit 5756e2
Packit Service a1bd4f
#define NM_PROXY_CONFIG_GET_PRIVATE(self) _NM_GET_PRIVATE(self, NMProxyConfig, NM_IS_PROXY_CONFIG)
Packit 5756e2
Packit 5756e2
/*****************************************************************************/
Packit 5756e2
Packit 5756e2
void
Packit Service a1bd4f
nm_proxy_config_set_method(NMProxyConfig *config, NMProxyConfigMethod method)
Packit 5756e2
{
Packit Service a1bd4f
    NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE(config);
Packit 5756e2
Packit Service a1bd4f
    priv->method = method;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
NMProxyConfigMethod
Packit Service a1bd4f
nm_proxy_config_get_method(const NMProxyConfig *config)
Packit 5756e2
{
Packit Service a1bd4f
    const NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE(config);
Packit 5756e2
Packit Service a1bd4f
    return priv->method;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
void
Packit Service a1bd4f
nm_proxy_config_merge_setting(NMProxyConfig *config, NMSettingProxy *setting)
Packit 5756e2
{
Packit Service a1bd4f
    const char *          tmp = NULL;
Packit Service a1bd4f
    NMProxyConfigPrivate *priv;
Packit Service a1bd4f
    NMSettingProxyMethod  method;
Packit 5756e2
Packit Service a1bd4f
    if (!setting)
Packit Service a1bd4f
        return;
Packit 5756e2
Packit Service a1bd4f
    g_return_if_fail(NM_IS_SETTING_PROXY(setting));
Packit 5756e2
Packit Service a1bd4f
    priv = NM_PROXY_CONFIG_GET_PRIVATE(config);
Packit 5756e2
Packit Service a1bd4f
    nm_clear_g_free(&priv->pac_script);
Packit 5756e2
Packit Service a1bd4f
    method = nm_setting_proxy_get_method(setting);
Packit Service a1bd4f
    switch (method) {
Packit Service a1bd4f
    case NM_SETTING_PROXY_METHOD_AUTO:
Packit Service a1bd4f
        priv->method = NM_PROXY_CONFIG_METHOD_AUTO;
Packit 5756e2
Packit Service a1bd4f
        /* Free DHCP Obtained PAC Url (i.e Option 252)
Packit Service a1bd4f
         * only when libnm overrides it.
Packit Service a1bd4f
         */
Packit Service a1bd4f
        tmp = nm_setting_proxy_get_pac_url(setting);
Packit Service a1bd4f
        if (tmp) {
Packit Service a1bd4f
            g_free(priv->pac_url);
Packit Service a1bd4f
            priv->pac_url = g_strdup(tmp);
Packit Service a1bd4f
        }
Packit 5756e2
Packit Service a1bd4f
        tmp              = nm_setting_proxy_get_pac_script(setting);
Packit Service a1bd4f
        priv->pac_script = g_strdup(tmp);
Packit 5756e2
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    case NM_SETTING_PROXY_METHOD_NONE:
Packit Service a1bd4f
        priv->method = NM_PROXY_CONFIG_METHOD_NONE;
Packit Service a1bd4f
        break;
Packit Service a1bd4f
    }
Packit 5756e2
Packit Service a1bd4f
    priv->browser_only = nm_setting_proxy_get_browser_only(setting);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
gboolean
Packit Service a1bd4f
nm_proxy_config_get_browser_only(const NMProxyConfig *config)
Packit 5756e2
{
Packit Service a1bd4f
    const NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE(config);
Packit 5756e2
Packit Service a1bd4f
    return priv->browser_only;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
void
Packit Service a1bd4f
nm_proxy_config_set_pac_url(NMProxyConfig *config, const char *url)
Packit 5756e2
{
Packit Service a1bd4f
    NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE(config);
Packit 5756e2
Packit Service a1bd4f
    g_free(priv->pac_url);
Packit Service a1bd4f
    priv->pac_url = g_strdup(url);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
const char *
Packit Service a1bd4f
nm_proxy_config_get_pac_url(const NMProxyConfig *config)
Packit 5756e2
{
Packit Service a1bd4f
    const NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE(config);
Packit 5756e2
Packit Service a1bd4f
    return priv->pac_url;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
void
Packit Service a1bd4f
nm_proxy_config_set_pac_script(NMProxyConfig *config, const char *script)
Packit 5756e2
{
Packit Service a1bd4f
    NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE(config);
Packit 5756e2
Packit Service a1bd4f
    g_free(priv->pac_script);
Packit Service a1bd4f
    priv->pac_script = g_strdup(script);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
const char *
Packit Service a1bd4f
nm_proxy_config_get_pac_script(const NMProxyConfig *config)
Packit 5756e2
{
Packit Service a1bd4f
    const NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE(config);
Packit 5756e2
Packit Service a1bd4f
    return priv->pac_script;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
/*****************************************************************************/
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
nm_proxy_config_init(NMProxyConfig *config)
Packit 5756e2
{
Packit Service a1bd4f
    NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE(config);
Packit 5756e2
Packit Service a1bd4f
    priv->method = NM_PROXY_CONFIG_METHOD_NONE;
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
NMProxyConfig *
Packit Service a1bd4f
nm_proxy_config_new(void)
Packit 5756e2
{
Packit Service a1bd4f
    return NM_PROXY_CONFIG(g_object_new(NM_TYPE_PROXY_CONFIG, NULL));
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
finalize(GObject *object)
Packit 5756e2
{
Packit Service a1bd4f
    NMProxyConfig *       self = NM_PROXY_CONFIG(object);
Packit Service a1bd4f
    NMProxyConfigPrivate *priv = NM_PROXY_CONFIG_GET_PRIVATE(self);
Packit 5756e2
Packit Service a1bd4f
    g_free(priv->pac_url);
Packit Service a1bd4f
    g_free(priv->pac_script);
Packit 5756e2
Packit Service a1bd4f
    G_OBJECT_CLASS(nm_proxy_config_parent_class)->finalize(object);
Packit 5756e2
}
Packit 5756e2
Packit 5756e2
static void
Packit Service a1bd4f
nm_proxy_config_class_init(NMProxyConfigClass *klass)
Packit 5756e2
{
Packit Service a1bd4f
    GObjectClass *object_class = G_OBJECT_CLASS(klass);
Packit 5756e2
Packit Service a1bd4f
    object_class->finalize = finalize;
Packit 5756e2
}