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
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)))
/* 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);
}
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 ();
GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_CRED_ALLOC;
- message ("gnutls: setting the trustfile");
-
if (EQ (type, Qgnutls_x509pki))
{
if (STRINGP (trustfile))
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
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)
GNUTLS_INITSTAGE (proc) = GNUTLS_STAGE_INIT;
- message ("gnutls: setting the priority string");
-
ret = gnutls_priority_set_direct(state,
(char*) SDATA (priority_string),
NULL);
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);