1 /* GIO - GLib Input, Output and Streaming Library 2 * 3 * Copyright (C) 2010 Red Hat, Inc. 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public 7 * 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 * This library is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Lesser General Public License for more details. 14 * 15 * 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 #ifndef __G_TLS_CONNECTION_H__ 20 #define __G_TLS_CONNECTION_H__ 21 22 #if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) 23 #error "Only <gio/gio.h> can be included directly." 24 #endif 25 26 #include <gio/giostream.h> 27 28 G_BEGIN_DECLS 29 30 #define G_TYPE_TLS_CONNECTION (g_tls_connection_get_type ()) 31 #define G_TLS_CONNECTION(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), G_TYPE_TLS_CONNECTION, GTlsConnection)) 32 #define G_TLS_CONNECTION_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), G_TYPE_TLS_CONNECTION, GTlsConnectionClass)) 33 #define G_IS_TLS_CONNECTION(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), G_TYPE_TLS_CONNECTION)) 34 #define G_IS_TLS_CONNECTION_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), G_TYPE_TLS_CONNECTION)) 35 #define G_TLS_CONNECTION_GET_CLASS(inst) (G_TYPE_INSTANCE_GET_CLASS ((inst), G_TYPE_TLS_CONNECTION, GTlsConnectionClass)) 36 37 typedef struct _GTlsConnectionClass GTlsConnectionClass; 38 typedef struct _GTlsConnectionPrivate GTlsConnectionPrivate; 39 40 struct _GTlsConnection { 41 GIOStream parent_instance; 42 43 GTlsConnectionPrivate *priv; 44 }; 45 46 struct _GTlsConnectionClass 47 { 48 GIOStreamClass parent_class; 49 50 /* signals */ 51 gboolean ( *accept_certificate) (GTlsConnection *connection, 52 GTlsCertificate *peer_cert, 53 GTlsCertificateFlags errors); 54 55 /* methods */ 56 gboolean ( *handshake ) (GTlsConnection *conn, 57 GCancellable *cancellable, 58 GError **error); 59 60 void ( *handshake_async ) (GTlsConnection *conn, 61 int io_priority, 62 GCancellable *cancellable, 63 GAsyncReadyCallback callback, 64 gpointer user_data); 65 gboolean ( *handshake_finish ) (GTlsConnection *conn, 66 GAsyncResult *result, 67 GError **error); 68 69 G_GNUC_BEGIN_IGNORE_DEPRECATIONS 70 gboolean ( *get_binding_data) (GTlsConnection *conn, 71 GTlsChannelBindingType type, 72 GByteArray *data, 73 GError **error); 74 G_GNUC_END_IGNORE_DEPRECATIONS 75 76 /*< private >*/ 77 /* Padding for future expansion */ 78 gpointer padding[7]; 79 }; 80 81 GLIB_AVAILABLE_IN_ALL 82 GType g_tls_connection_get_type (void) G_GNUC_CONST; 83 84 GLIB_DEPRECATED 85 void g_tls_connection_set_use_system_certdb (GTlsConnection *conn, 86 gboolean use_system_certdb); 87 GLIB_DEPRECATED 88 gboolean g_tls_connection_get_use_system_certdb (GTlsConnection *conn); 89 90 GLIB_AVAILABLE_IN_ALL 91 void g_tls_connection_set_database (GTlsConnection *conn, 92 GTlsDatabase *database); 93 GLIB_AVAILABLE_IN_ALL 94 GTlsDatabase * g_tls_connection_get_database (GTlsConnection *conn); 95 96 GLIB_AVAILABLE_IN_ALL 97 void g_tls_connection_set_certificate (GTlsConnection *conn, 98 GTlsCertificate *certificate); 99 GLIB_AVAILABLE_IN_ALL 100 GTlsCertificate *g_tls_connection_get_certificate (GTlsConnection *conn); 101 102 GLIB_AVAILABLE_IN_ALL 103 void g_tls_connection_set_interaction (GTlsConnection *conn, 104 GTlsInteraction *interaction); 105 GLIB_AVAILABLE_IN_ALL 106 GTlsInteraction * g_tls_connection_get_interaction (GTlsConnection *conn); 107 108 GLIB_AVAILABLE_IN_ALL 109 GTlsCertificate *g_tls_connection_get_peer_certificate (GTlsConnection *conn); 110 GLIB_AVAILABLE_IN_ALL 111 GTlsCertificateFlags g_tls_connection_get_peer_certificate_errors (GTlsConnection *conn); 112 113 GLIB_AVAILABLE_IN_ALL 114 void g_tls_connection_set_require_close_notify (GTlsConnection *conn, 115 gboolean require_close_notify); 116 GLIB_AVAILABLE_IN_ALL 117 gboolean g_tls_connection_get_require_close_notify (GTlsConnection *conn); 118 119 G_GNUC_BEGIN_IGNORE_DEPRECATIONS 120 GLIB_DEPRECATED_IN_2_60 121 void g_tls_connection_set_rehandshake_mode (GTlsConnection *conn, 122 GTlsRehandshakeMode mode); 123 GLIB_DEPRECATED_IN_2_60 124 GTlsRehandshakeMode g_tls_connection_get_rehandshake_mode (GTlsConnection *conn); 125 G_GNUC_END_IGNORE_DEPRECATIONS 126 127 GLIB_AVAILABLE_IN_2_60 128 void g_tls_connection_set_advertised_protocols (GTlsConnection *conn, 129 const gchar * const *protocols); 130 131 GLIB_AVAILABLE_IN_2_60 132 const gchar * g_tls_connection_get_negotiated_protocol (GTlsConnection *conn); 133 134 G_GNUC_BEGIN_IGNORE_DEPRECATIONS 135 GLIB_AVAILABLE_IN_2_66 136 gboolean g_tls_connection_get_channel_binding_data (GTlsConnection *conn, 137 GTlsChannelBindingType type, 138 GByteArray *data, 139 GError **error); 140 G_GNUC_END_IGNORE_DEPRECATIONS 141 142 GLIB_AVAILABLE_IN_ALL 143 gboolean g_tls_connection_handshake (GTlsConnection *conn, 144 GCancellable *cancellable, 145 GError **error); 146 147 GLIB_AVAILABLE_IN_ALL 148 void g_tls_connection_handshake_async (GTlsConnection *conn, 149 int io_priority, 150 GCancellable *cancellable, 151 GAsyncReadyCallback callback, 152 gpointer user_data); 153 GLIB_AVAILABLE_IN_ALL 154 gboolean g_tls_connection_handshake_finish (GTlsConnection *conn, 155 GAsyncResult *result, 156 GError **error); 157 158 /** 159 * G_TLS_ERROR: 160 * 161 * Error domain for TLS. Errors in this domain will be from the 162 * #GTlsError enumeration. See #GError for more information on error 163 * domains. 164 */ 165 #define G_TLS_ERROR (g_tls_error_quark ()) 166 GLIB_AVAILABLE_IN_ALL 167 GQuark g_tls_error_quark (void); 168 169 /** 170 * G_TLS_CHANNEL_BINDING_ERROR: 171 * 172 * Error domain for TLS channel binding. Errors in this domain will be from the 173 * #GTlsChannelBindingError enumeration. See #GError for more information on error 174 * domains. 175 * 176 * Since: 2.66 177 */ 178 #define G_TLS_CHANNEL_BINDING_ERROR (g_tls_channel_binding_error_quark ()) 179 GLIB_AVAILABLE_IN_2_66 180 GQuark g_tls_channel_binding_error_quark (void); 181 182 /*< protected >*/ 183 GLIB_AVAILABLE_IN_ALL 184 gboolean g_tls_connection_emit_accept_certificate (GTlsConnection *conn, 185 GTlsCertificate *peer_cert, 186 GTlsCertificateFlags errors); 187 188 G_END_DECLS 189 190 #endif /* __G_TLS_CONNECTION_H__ */ 191