summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Magne Ingebrigtsen <larsi@gnus.org>2010-09-27 16:35:22 +0200
committerLars Magne Ingebrigtsen <larsi@gnus.org>2010-09-27 16:35:22 +0200
commitd2e9d0bbb2d63fc9588d8b2a13b46be8c67dd944 (patch)
tree18d0ef16bc60414186e2da5848266546f5ce077f
parent14db1c41108e7d2874ec9c5fb653f154228acd7b (diff)
downloademacs-d2e9d0bbb2d63fc9588d8b2a13b46be8c67dd944.tar.gz
Add debugging to the gnutls library, and finish handshaking when it's done.
-rw-r--r--lisp/ChangeLog5
-rw-r--r--lisp/net/gnutls.el8
-rw-r--r--src/ChangeLog4
-rw-r--r--src/gnutls.c38
4 files changed, 21 insertions, 34 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index d7cde04306b..cd30925d9fb 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,8 @@
+2010-09-27 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * net/gnutls.el (starttls-negotiate): Stop looping when we get a t
+ back.
+
2010-09-26 Stefan Monnier <monnier@iro.umontreal.ca>
* emacs-lisp/pcase.el (pcase-let*, pcase-let): plet -> pcase-let.
diff --git a/lisp/net/gnutls.el b/lisp/net/gnutls.el
index 7a2571f8a7c..b393d237d90 100644
--- a/lisp/net/gnutls.el
+++ b/lisp/net/gnutls.el
@@ -80,13 +80,11 @@ CREDENTIALS-FILE is a filename with meaning dependent on CREDENTIALS."
(let ((ret 'gnutls-e-again)
(n 25000))
- (while (and (not (gnutls-error-fatalp ret))
+ (while (and (not (eq ret t))
+ (not (gnutls-error-fatalp ret))
(> n 0))
(setq n (1- n))
- (gnutls-message-maybe
- (setq ret (gnutls-handshake proc))
- "handshake: %s")
- ;(debug "handshake ret" ret (gnutls-error-string ret)))
+ (setq ret (gnutls-handshake proc))
)
(if (gnutls-errorp ret)
(progn
diff --git a/src/ChangeLog b/src/ChangeLog
index b5962a1dd8b..85a623bed50 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,7 @@
+2010-09-27 Lars Magne Ingebrigtsen <larsi@gnus.org>
+
+ * gnutls.c (gnutls_log_function): Added more debugging.
+
2010-09-27 Kenichi Handa <handa@m17n.org>
These changes are to remove restriction on the number of glyphs in
diff --git a/src/gnutls.c b/src/gnutls.c
index 50bf7940119..ff538328984 100644
--- a/src/gnutls.c
+++ b/src/gnutls.c
@@ -221,6 +221,10 @@ Lisp_Object gnutls_emacs_global_deinit (void)
return gnutls_make_error (GNUTLS_E_SUCCESS);
}
+static void gnutls_log_function (int level, const char* string) {
+ message("debug: %s", string);
+}
+
DEFUN ("gnutls-boot", Fgnutls_boot, Sgnutls_boot, 3, 6, 0,
doc: /* Initializes client-mode GnuTLS for process PROC.
Currently only client mode is supported. Returns a success/failure
@@ -264,6 +268,9 @@ KEYFILE and optionally CALLBACK. */)
state = XPROCESS (proc)->gnutls_state;
+ gnutls_global_set_log_level(4);
+ gnutls_global_set_log_function(gnutls_log_function);
+
/* always initialize globals. */
global_init = gnutls_emacs_global_init ();
if (! NILP (Fgnutls_errorp (global_init)))
@@ -272,19 +279,13 @@ KEYFILE and optionally CALLBACK. */)
/* deinit and free resources. */
if (GNUTLS_INITSTAGE (proc) >= GNUTLS_STAGE_CRED_ALLOC)
{
- message ("gnutls: deallocating certificates");
-
if (EQ (type, Qgnutls_x509pki))
{
- message ("gnutls: deallocating x509 certificates");
-
x509_cred = XPROCESS (proc)->x509_cred;
gnutls_certificate_free_credentials (x509_cred);
}
else if (EQ (type, Qgnutls_anon))
{
- message ("gnutls: deallocating anon certificates");
-
anon_cred = XPROCESS (proc)->anon_cred;
gnutls_anon_free_client_credentials (anon_cred);
}
@@ -296,28 +297,20 @@ KEYFILE and optionally CALLBACK. */)
if (GNUTLS_INITSTAGE (proc) >= GNUTLS_STAGE_INIT)
{
- message ("gnutls: deinitializing");
-
Fgnutls_deinit (proc);
}
}
GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_EMPTY;
- message ("gnutls: allocating credentials");
-
if (EQ (type, Qgnutls_x509pki))
{
- message ("gnutls: allocating x509 credentials");
-
x509_cred = XPROCESS (proc)->x509_cred;
if (gnutls_certificate_allocate_credentials (&x509_cred) < 0)
memory_full ();
}
else if (EQ (type, Qgnutls_anon))
{
- message ("gnutls: allocating anon credentials");
-
anon_cred = XPROCESS (proc)->anon_cred;
if (gnutls_anon_allocate_client_credentials (&anon_cred) < 0)
memory_full ();
@@ -333,8 +326,6 @@ KEYFILE and optionally CALLBACK. */)
GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_CRED_ALLOC;
- message ("gnutls: setting the trustfile");
-
if (EQ (type, Qgnutls_x509pki))
{
if (STRINGP (trustfile))
@@ -346,12 +337,8 @@ KEYFILE and optionally CALLBACK. */)
if (ret < GNUTLS_E_SUCCESS)
return gnutls_make_error (ret);
-
- message ("gnutls: processed %d CA certificates", ret);
}
- message ("gnutls: setting the keyfile");
-
if (STRINGP (keyfile))
{
ret = gnutls_certificate_set_x509_crl_file
@@ -361,15 +348,11 @@ KEYFILE and optionally CALLBACK. */)
if (ret < GNUTLS_E_SUCCESS)
return gnutls_make_error (ret);
-
- message ("gnutls: processed %d CRL(s)", ret);
}
}
GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_FILES;
- message ("gnutls: gnutls_init");
-
ret = gnutls_init (&state, GNUTLS_CLIENT);
if (ret < GNUTLS_E_SUCCESS)
@@ -379,8 +362,6 @@ KEYFILE and optionally CALLBACK. */)
GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_INIT;
- message ("gnutls: setting the priority string");
-
ret = gnutls_priority_set_direct(state,
(char*) SDATA (priority_string),
NULL);
@@ -490,15 +471,14 @@ or `gnutls-e-interrupted'. In that case you may resume the handshake
GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_TRANSPORT_POINTERS_SET;
}
- message ("gnutls: handshake: handshaking");
ret = gnutls_handshake (state);
-
GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_HANDSHAKE_TRIED;
- if (GNUTLS_E_SUCCESS == ret)
+ if (GNUTLS_E_SUCCESS == ret || ret == 0)
{
/* here we're finally done. */
GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_READY;
+ return Qt;
}
return gnutls_make_error (ret);