diff options
author | Tomas Popela <tpopela@redhat.com> | 2016-01-19 12:06:42 +0100 |
---|---|---|
committer | Tomas Popela <tpopela@redhat.com> | 2016-02-16 11:55:48 +0100 |
commit | 50feaba9f88e86f22dc0aff8b017744dca4ccc75 (patch) | |
tree | 1dd3303dc67434167623f38de4e6bb6a4c926c58 | |
parent | 83514a8385f3430df5fcac42bcfc4aa37db4040c (diff) | |
download | libsoup-50feaba9f88e86f22dc0aff8b017744dca4ccc75.tar.gz |
Connect to the got_headers signal just once
-rw-r--r-- | libsoup/soup-auth-negotiate.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/libsoup/soup-auth-negotiate.c b/libsoup/soup-auth-negotiate.c index 038895b4..41b5093f 100644 --- a/libsoup/soup-auth-negotiate.c +++ b/libsoup/soup-auth-negotiate.c @@ -23,6 +23,13 @@ #include "soup-misc.h" #include "soup-uri.h" +typedef struct { + gulong got_headers_signal_id; +} SoupAuthNegotiatePrivate; +#define SOUP_AUTH_NEGOTIATE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), SOUP_TYPE_AUTH_NEGOTIATE, SoupAuthNegotiatePrivate)) + +G_DEFINE_TYPE (SoupAuthNegotiate, soup_auth_negotiate, SOUP_TYPE_CONNECTION_AUTH) + #define AUTH_GSS_ERROR -1 #define AUTH_GSS_COMPLETE 1 #define AUTH_GSS_CONTINUE 0 @@ -61,8 +68,6 @@ static const gss_OID_desc gss_mech_spnego = { 6, (void *) &spnego_OID }; static GSList *trusted_uris; -G_DEFINE_TYPE (SoupAuthNegotiate, soup_auth_negotiate, SOUP_TYPE_CONNECTION_AUTH) - static void soup_auth_negotiate_init (SoupAuthNegotiate *negotiate) { @@ -78,11 +83,15 @@ static void soup_auth_negotiate_free_connection_state (SoupConnectionAuth *auth, gpointer state) { + SoupAuthNegotiate *negotiate = SOUP_AUTH_NEGOTIATE (auth); + SoupAuthNegotiatePrivate *priv = SOUP_AUTH_NEGOTIATE_GET_PRIVATE (negotiate); SoupNegotiateConnectionState *conn = state; soup_gss_client_cleanup (conn); g_free (conn->response_header); + + priv->got_headers_signal_id = 0; } static void @@ -95,9 +104,11 @@ soup_auth_negotiate_update_connection (SoupConnectionAuth *auth, SoupMessage *ms const char *header, gpointer state) { SoupNegotiateConnectionState *conn = state; + SoupAuthNegotiate *negotiate = SOUP_AUTH_NEGOTIATE (auth); + SoupAuthNegotiatePrivate *priv = SOUP_AUTH_NEGOTIATE_GET_PRIVATE (negotiate); GError *err = NULL; - if (!check_auth_trusted_uri (SOUP_AUTH_NEGOTIATE (auth), msg)) { + if (!check_auth_trusted_uri (negotiate, msg)) { conn->state = SOUP_NEGOTIATE_FAILED; return FALSE; @@ -255,6 +266,8 @@ soup_auth_negotiate_class_init (SoupAuthNegotiateClass *auth_negotiate_class) SoupConnectionAuthClass *conn_auth_class = SOUP_CONNECTION_AUTH_CLASS (auth_negotiate_class); + g_type_class_add_private (auth_negotiate_class, sizeof (SoupAuthNegotiatePrivate)); + auth_class->scheme_name = "Negotiate"; auth_class->strength = 7; |