summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomas Popela <tpopela@redhat.com>2016-01-19 12:06:42 +0100
committerTomas Popela <tpopela@redhat.com>2016-02-16 11:55:48 +0100
commit50feaba9f88e86f22dc0aff8b017744dca4ccc75 (patch)
tree1dd3303dc67434167623f38de4e6bb6a4c926c58
parent83514a8385f3430df5fcac42bcfc4aa37db4040c (diff)
downloadlibsoup-50feaba9f88e86f22dc0aff8b017744dca4ccc75.tar.gz
Connect to the got_headers signal just once
-rw-r--r--libsoup/soup-auth-negotiate.c19
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;