static void finalize (GObject *object) { SoupAuthDomainDigestPrivate *priv = SOUP_AUTH_DOMAIN_DIGEST_GET_PRIVATE (object); if (priv->auth_dnotify) priv->auth_dnotify (priv->auth_data); G_OBJECT_CLASS (soup_auth_domain_digest_parent_class)->finalize (object); }
static char * soup_auth_domain_digest_accepts (SoupAuthDomain *domain, SoupMessage *msg, const char *header) { SoupAuthDomainDigestPrivate *priv = SOUP_AUTH_DOMAIN_DIGEST_GET_PRIVATE (domain); GHashTable *params; const char *username; gboolean accept = FALSE; char *ret_user; if (strncmp (header, "Digest ", 7) != 0) return NULL; params = soup_header_parse_param_list (header + 7); if (!params) return NULL; username = g_hash_table_lookup (params, "username"); if (!username) { soup_header_free_param_list (params); return NULL; } if (priv->auth_callback) { char *hex_urp; hex_urp = priv->auth_callback (domain, msg, username, priv->auth_data); if (hex_urp) { accept = check_hex_urp (domain, msg, params, username, hex_urp); g_free (hex_urp); } else accept = FALSE; } else { accept = soup_auth_domain_try_generic_auth_callback ( domain, msg, username); } ret_user = accept ? g_strdup (username) : NULL; soup_header_free_param_list (params); return ret_user; }
/** * soup_auth_domain_digest_set_auth_callback: * @domain: the domain * @callback: the callback * @user_data: data to pass to @auth_callback * @dnotify: destroy notifier to free @user_data when @domain * is destroyed * * Sets the callback that @domain will use to authenticate incoming * requests. For each request containing authorization, @domain will * invoke the callback, and then either accept or reject the request * based on @callback's return value. * * You can also set the auth callback by setting the * %SOUP_AUTH_DOMAIN_DIGEST_AUTH_CALLBACK and * %SOUP_AUTH_DOMAIN_DIGEST_AUTH_DATA properties, which can also be * used to set the callback at construct time. **/ void soup_auth_domain_digest_set_auth_callback (SoupAuthDomain *domain, SoupAuthDomainDigestAuthCallback callback, gpointer user_data, GDestroyNotify dnotify) { SoupAuthDomainDigestPrivate *priv = SOUP_AUTH_DOMAIN_DIGEST_GET_PRIVATE (domain); if (priv->auth_dnotify) priv->auth_dnotify (priv->auth_data); priv->auth_callback = callback; priv->auth_data = user_data; priv->auth_dnotify = dnotify; g_object_notify (G_OBJECT (domain), SOUP_AUTH_DOMAIN_DIGEST_AUTH_CALLBACK); g_object_notify (G_OBJECT (domain), SOUP_AUTH_DOMAIN_DIGEST_AUTH_DATA); }
static void get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { SoupAuthDomainDigestPrivate *priv = SOUP_AUTH_DOMAIN_DIGEST_GET_PRIVATE (object); switch (prop_id) { case PROP_AUTH_CALLBACK: g_value_set_pointer (value, priv->auth_callback); break; case PROP_AUTH_DATA: g_value_set_pointer (value, priv->auth_data); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
static void soup_auth_domain_digest_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { SoupAuthDomainDigestPrivate *priv = SOUP_AUTH_DOMAIN_DIGEST_GET_PRIVATE (object); switch (prop_id) { case PROP_AUTH_CALLBACK: priv->auth_callback = g_value_get_pointer (value); break; case PROP_AUTH_DATA: if (priv->auth_dnotify) { priv->auth_dnotify (priv->auth_data); priv->auth_dnotify = NULL; } priv->auth_data = g_value_get_pointer (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }