diff src/tls.h @ 5814:a216b3c2b09e

Add TLS support. See xemacs-patches message with ID <CAHCOHQk6FNm2xf=XiGEpPq43+7WOzNZ=SuD9V79o3wb9WVCTrQ@mail.gmail.com>.
author Jerry James <james@xemacs.org>
date Tue, 07 Oct 2014 21:16:10 -0600
parents
children d59bfb050ca8
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/tls.h	Tue Oct 07 21:16:10 2014 -0600
@@ -0,0 +1,96 @@
+/* Transport Layer Security implementation -- header file.
+   Copyright (C) 2014 Jerry James
+
+This file is part of XEmacs.
+
+XEmacs is free software: you can redistribute it and/or modify it
+under the terms of the GNU General Public License as published by the
+Free Software Foundation, either version 3 of the License, or (at your
+option) any later version.
+
+XEmacs is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with XEmacs.  If not, see <http://www.gnu.org/licenses/>. */
+
+/* Synched up with: Not in FSF. */
+
+/* Written by Jerry James. */
+
+#ifndef INCLUDED_tls_h_
+#define INCLUDED_tls_h_
+
+extern Lisp_Object Qtls_error;
+
+void syms_of_tls (void);
+void vars_of_tls (void);
+void init_tls (void);
+
+#ifdef WITH_TLS
+
+#ifdef HAVE_NSS
+#include <prio.h>
+
+#define TLS_SETUP_SOCK 0
+
+typedef struct tls_state
+{
+  PRFileDesc *tls_file_desc;
+  int tls_refcount;
+} tls_state_t;
+#endif
+
+#ifdef HAVE_GNUTLS
+#include <gnutls/gnutls.h>
+
+#define TLS_SETUP_SOCK 1
+
+typedef struct tls_state
+{
+  gnutls_session_t tls_session;
+  int tls_refcount;
+} tls_state_t;
+#endif
+
+#ifdef HAVE_OPENSSL
+# include <openssl/ssl.h>
+
+#define TLS_SETUP_SOCK 1
+
+typedef struct tls_state
+{
+  SSL *tls_connection;
+  int tls_refcount;
+} tls_state_t;
+#endif
+
+tls_state_t *tls_open (int, const Extbyte *);
+tls_state_t *tls_negotiate (int, const Extbyte *, Lisp_Object);
+void tls_close_connection (tls_state_t *);
+Lisp_Object make_tls_output_stream (tls_state_t *);
+Lisp_Object make_tls_input_stream (tls_state_t *);
+int tls_get_fd (tls_state_t *);
+Bytecount tls_read (tls_state_t *, unsigned char *, Bytecount, unsigned int);
+Bytecount tls_write (tls_state_t *, const unsigned char *, Bytecount,
+		     unsigned int);
+int tls_close (tls_state_t *);
+#else /* WITH_TLS */
+typedef int tls_state_t;
+#define TLS_SETUP_SOCK 1
+#define tls_open(x,y)							\
+  signal_error (Qtls_error, "TLS support unavailable", Qnil), NULL
+#define tls_negotiate(x,y,z) NULL
+#define make_tls_input_stream(x)					\
+  signal_error (Qtls_error, "TLS support unavailable", Qnil), NULL
+#define make_tls_output_stream(x)					\
+  signal_error (Qtls_error, "TLS support unavailable", Qnil), NULL
+#define tls_get_fd(x, y)	-1
+#define tls_read(w,x,y,z)	-1
+#define tls_write(w,x,y,z)	-1
+#define tls_close(x)		-1
+#endif /* WITH_TLS */
+
+#endif /* INCLUDED_tls_h_ */