gtlsconnection.h 6.02 KB
Newer Older
1 2 3 4 5 6 7
/* GIO - GLib Input, Output and Streaming Library
 *
 * Copyright (C) 2010 Red Hat, Inc.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
8
 * version 2.1 of the License, or (at your option) any later version.
9 10 11 12 13 14 15
 *
 * This library 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General
16
 * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
17 18
 */

19 20 21
#ifndef __G_TLS_CONNECTION_H__
#define __G_TLS_CONNECTION_H__

22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
#error "Only <gio/gio.h> can be included directly."
#endif

#include <gio/giostream.h>

G_BEGIN_DECLS

#define G_TYPE_TLS_CONNECTION            (g_tls_connection_get_type ())
#define G_TLS_CONNECTION(inst)           (G_TYPE_CHECK_INSTANCE_CAST ((inst), G_TYPE_TLS_CONNECTION, GTlsConnection))
#define G_TLS_CONNECTION_CLASS(class)    (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_TLS_CONNECTION, GTlsConnectionClass))
#define G_IS_TLS_CONNECTION(inst)        (G_TYPE_CHECK_INSTANCE_TYPE ((inst), G_TYPE_TLS_CONNECTION))
#define G_IS_TLS_CONNECTION_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_TLS_CONNECTION))
#define G_TLS_CONNECTION_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), G_TYPE_TLS_CONNECTION, GTlsConnectionClass))

typedef struct _GTlsConnectionClass   GTlsConnectionClass;
typedef struct _GTlsConnectionPrivate GTlsConnectionPrivate;

struct _GTlsConnection {
  GIOStream parent_instance;

  GTlsConnectionPrivate *priv;
};

struct _GTlsConnectionClass
{
  GIOStreamClass parent_class;

  /* signals */
  gboolean          ( *accept_certificate) (GTlsConnection       *connection,
					    GTlsCertificate      *peer_cert,
					    GTlsCertificateFlags  errors);

  /* methods */
  gboolean ( *handshake )        (GTlsConnection       *conn,
				  GCancellable         *cancellable,
				  GError              **error);

  void     ( *handshake_async )  (GTlsConnection       *conn,
				  int                   io_priority,
				  GCancellable         *cancellable,
				  GAsyncReadyCallback   callback,
				  gpointer              user_data);
  gboolean ( *handshake_finish ) (GTlsConnection       *conn,
				  GAsyncResult         *result,
				  GError              **error);

  /*< private >*/
  /* Padding for future expansion */
  gpointer padding[8];
};

74
GLIB_AVAILABLE_IN_ALL
75
GType                 g_tls_connection_get_type                    (void) G_GNUC_CONST;
76

77
GLIB_DEPRECATED
78
void                  g_tls_connection_set_use_system_certdb       (GTlsConnection       *conn,
79
                                                                    gboolean              use_system_certdb);
80 81
GLIB_DEPRECATED
gboolean              g_tls_connection_get_use_system_certdb       (GTlsConnection       *conn);
82

83
GLIB_AVAILABLE_IN_ALL
84 85
void                  g_tls_connection_set_database                (GTlsConnection       *conn,
								    GTlsDatabase         *database);
86
GLIB_AVAILABLE_IN_ALL
87
GTlsDatabase *        g_tls_connection_get_database                (GTlsConnection       *conn);
88

89
GLIB_AVAILABLE_IN_ALL
90
void                  g_tls_connection_set_certificate             (GTlsConnection       *conn,
91
                                                                    GTlsCertificate      *certificate);
92
GLIB_AVAILABLE_IN_ALL
93
GTlsCertificate      *g_tls_connection_get_certificate             (GTlsConnection       *conn);
94

95
GLIB_AVAILABLE_IN_ALL
96 97
void                  g_tls_connection_set_interaction             (GTlsConnection       *conn,
                                                                    GTlsInteraction      *interaction);
98
GLIB_AVAILABLE_IN_ALL
99 100
GTlsInteraction *     g_tls_connection_get_interaction             (GTlsConnection       *conn);

101
GLIB_AVAILABLE_IN_ALL
102
GTlsCertificate      *g_tls_connection_get_peer_certificate        (GTlsConnection       *conn);
103
GLIB_AVAILABLE_IN_ALL
104
GTlsCertificateFlags  g_tls_connection_get_peer_certificate_errors (GTlsConnection       *conn);
105

106
GLIB_AVAILABLE_IN_ALL
107 108
void                  g_tls_connection_set_require_close_notify    (GTlsConnection       *conn,
								    gboolean              require_close_notify);
109
GLIB_AVAILABLE_IN_ALL
110
gboolean              g_tls_connection_get_require_close_notify    (GTlsConnection       *conn);
111

112
GLIB_AVAILABLE_IN_ALL
113 114
void                  g_tls_connection_set_rehandshake_mode        (GTlsConnection       *conn,
								    GTlsRehandshakeMode   mode);
115
GLIB_AVAILABLE_IN_ALL
116
GTlsRehandshakeMode   g_tls_connection_get_rehandshake_mode        (GTlsConnection       *conn);
117

118
GLIB_AVAILABLE_IN_ALL
119 120 121
gboolean              g_tls_connection_handshake                   (GTlsConnection       *conn,
								    GCancellable         *cancellable,
								    GError              **error);
122

123
GLIB_AVAILABLE_IN_ALL
124 125 126 127 128
void                  g_tls_connection_handshake_async             (GTlsConnection       *conn,
								    int                   io_priority,
								    GCancellable         *cancellable,
								    GAsyncReadyCallback   callback,
								    gpointer              user_data);
129
GLIB_AVAILABLE_IN_ALL
130 131 132
gboolean              g_tls_connection_handshake_finish            (GTlsConnection       *conn,
								    GAsyncResult         *result,
								    GError              **error);
133 134 135 136 137 138 139 140 141

/**
 * G_TLS_ERROR:
 *
 * Error domain for TLS. Errors in this domain will be from the
 * #GTlsError enumeration. See #GError for more information on error
 * domains.
 */
#define G_TLS_ERROR (g_tls_error_quark ())
142
GLIB_AVAILABLE_IN_ALL
143 144 145 146
GQuark g_tls_error_quark (void);


/*< protected >*/
147
GLIB_AVAILABLE_IN_ALL
148 149 150
gboolean              g_tls_connection_emit_accept_certificate     (GTlsConnection       *conn,
								    GTlsCertificate      *peer_cert,
								    GTlsCertificateFlags  errors);
151 152 153 154

G_END_DECLS

#endif /* __G_TLS_CONNECTION_H__ */