SoupProxyURIResolver* soupProxyResolverWkNew(const char* httpProxy, const char* noProxy) { SoupURI* proxyURI = soup_uri_new(httpProxy); SoupProxyURIResolver* resolver = SOUP_PROXY_URI_RESOLVER(g_object_new(SOUP_TYPE_PROXY_RESOLVER_WK, SOUP_PROXY_RESOLVER_WK_PROXY_URI, proxyURI, SOUP_PROXY_RESOLVER_WK_NO_PROXY, noProxy ? noProxy : defaultNoProxyValue, 0)); soup_uri_free(proxyURI); return resolver; }
static void soupProxyResolverWkGetProxyURIAsync(SoupProxyURIResolver* proxyResolver, SoupURI* uri, GMainContext* asyncContext, GCancellable*, SoupProxyURIResolverCallback callback, void* userData) { SoupWkAsyncData* ssad; ssad = g_slice_new0(SoupWkAsyncData); ssad->proxyResolver = SOUP_PROXY_URI_RESOLVER(g_object_ref(proxyResolver)); ssad->uri = soup_uri_copy(uri); ssad->callback = callback; ssad->userData = userData; soup_add_completion(asyncContext, idle_return_proxy_uri, ssad); }
/** * soup_session_add_feature: * @session: a #SoupSession * @feature: an object that implements #SoupSessionFeature * * Adds @feature's functionality to @session. You can also add a * feature to the session at construct time by using the * %SOUP_SESSION_ADD_FEATURE property. * * Since: 2.24 **/ void soup_session_add_feature (SoupSession *session, SoupSessionFeature *feature) { SoupSessionPrivate *priv; g_return_if_fail (SOUP_IS_SESSION (session)); g_return_if_fail (SOUP_IS_SESSION_FEATURE (feature)); priv = SOUP_SESSION_GET_PRIVATE (session); priv->features = g_slist_prepend (priv->features, g_object_ref (feature)); soup_session_feature_attach (feature, session); if (SOUP_IS_PROXY_URI_RESOLVER (feature)) priv->proxy_resolver = SOUP_PROXY_URI_RESOLVER (feature); }
static void compat_got_proxy (SoupProxyResolver *proxy_resolver, SoupMessage *msg, guint status, SoupAddress *proxy_addr, gpointer user_data) { ProxyURIResolverAsyncData *purad = user_data; SoupURI *proxy_uri; proxy_uri = proxy_addr ? uri_from_address (proxy_addr) : NULL; purad->callback (SOUP_PROXY_URI_RESOLVER (proxy_resolver), status, proxy_uri, purad->user_data); g_object_unref (msg); if (proxy_uri) soup_uri_free (proxy_uri); g_slice_free (ProxyURIResolverAsyncData, purad); }
static void set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { SoupSession *session = SOUP_SESSION (object); SoupSessionPrivate *priv = SOUP_SESSION_GET_PRIVATE (session); SoupURI *uri; gboolean ca_file_changed = FALSE; const char *new_ca_file, *user_agent; switch (prop_id) { case PROP_PROXY_URI: uri = g_value_get_boxed (value); if (uri) { soup_session_remove_feature_by_type (session, SOUP_TYPE_PROXY_RESOLVER); priv->proxy_resolver = SOUP_PROXY_URI_RESOLVER (soup_proxy_resolver_static_new (uri)); soup_session_add_feature (session, SOUP_SESSION_FEATURE (priv->proxy_resolver)); g_object_unref (priv->proxy_resolver); } else if (priv->proxy_resolver && SOUP_IS_PROXY_RESOLVER_STATIC (priv->proxy_resolver)) soup_session_remove_feature_by_type (session, SOUP_TYPE_PROXY_RESOLVER); soup_session_abort (session); break; case PROP_MAX_CONNS: priv->max_conns = g_value_get_int (value); break; case PROP_MAX_CONNS_PER_HOST: priv->max_conns_per_host = g_value_get_int (value); break; case PROP_USE_NTLM: g_object_set_property (G_OBJECT (priv->auth_manager), SOUP_AUTH_MANAGER_NTLM_USE_NTLM, value); break; case PROP_SSL_CA_FILE: new_ca_file = g_value_get_string (value); if (!safe_str_equal (priv->ssl_ca_file, new_ca_file)) ca_file_changed = TRUE; g_free (priv->ssl_ca_file); priv->ssl_ca_file = g_strdup (new_ca_file); if (ca_file_changed && priv->ssl_creds) { soup_ssl_free_client_credentials (priv->ssl_creds); priv->ssl_creds = NULL; } break; case PROP_ASYNC_CONTEXT: priv->async_context = g_value_get_pointer (value); if (priv->async_context) g_main_context_ref (priv->async_context); break; case PROP_TIMEOUT: priv->io_timeout = g_value_get_uint (value); break; case PROP_USER_AGENT: g_free (priv->user_agent); user_agent = g_value_get_string (value); if (!user_agent) priv->user_agent = NULL; else if (!*user_agent) { priv->user_agent = g_strdup (SOUP_SESSION_USER_AGENT_BASE); } else if (g_str_has_suffix (user_agent, " ")) { priv->user_agent = g_strdup_printf ("%s%s", user_agent, SOUP_SESSION_USER_AGENT_BASE); } else priv->user_agent = g_strdup (user_agent); break; case PROP_IDLE_TIMEOUT: priv->idle_timeout = g_value_get_uint (value); break; case PROP_ADD_FEATURE: soup_session_add_feature (session, g_value_get_object (value)); break; case PROP_ADD_FEATURE_BY_TYPE: soup_session_add_feature_by_type (session, g_value_get_gtype (value)); break; case PROP_REMOVE_FEATURE_BY_TYPE: soup_session_remove_feature_by_type (session, g_value_get_gtype (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }