// This file was generated by the Gtk# code generator.
// Any changes made will be lost if regenerated.

namespace GLib {

	using System;
	using System.Collections;
	using System.Collections.Generic;
	using System.Runtime.InteropServices;
	using static GLib.AbiStructExtension;

#region Autogenerated code
	public partial class TlsConnection : GLib.IOStream {

		public TlsConnection (IntPtr raw) : base(raw) {}

		protected TlsConnection() : base(IntPtr.Zero)
		{
			CreateNativeObject (Array.Empty<string> (), Array.Empty<GLib.Value> ());
		}

		[GLib.Property ("base-io-stream")]
		public GLib.IOStream BaseIoStream {
			get {
				GLib.Value val = GetProperty ("base-io-stream");
				GLib.IOStream ret = (GLib.IOStream) val;
				val.Dispose ();
				return ret;
			}
		}

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate bool d_g_tls_connection_get_use_system_certdb(IntPtr raw);
		static d_g_tls_connection_get_use_system_certdb g_tls_connection_get_use_system_certdb = FuncLoader.LoadFunction<d_g_tls_connection_get_use_system_certdb>(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gio), "g_tls_connection_get_use_system_certdb"));

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate void d_g_tls_connection_set_use_system_certdb(IntPtr raw, bool use_system_certdb);
		static d_g_tls_connection_set_use_system_certdb g_tls_connection_set_use_system_certdb = FuncLoader.LoadFunction<d_g_tls_connection_set_use_system_certdb>(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gio), "g_tls_connection_set_use_system_certdb"));

		[Obsolete]
		[GLib.Property ("use-system-certdb")]
		public bool UseSystemCertdb {
			get  {
				bool raw_ret = g_tls_connection_get_use_system_certdb(Handle);
				bool ret = raw_ret;
				return ret;
			}
			set  {
				g_tls_connection_set_use_system_certdb(Handle, value);
			}
		}

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate IntPtr d_g_tls_connection_get_database(IntPtr raw);
		static d_g_tls_connection_get_database g_tls_connection_get_database = FuncLoader.LoadFunction<d_g_tls_connection_get_database>(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gio), "g_tls_connection_get_database"));

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate void d_g_tls_connection_set_database(IntPtr raw, IntPtr database);
		static d_g_tls_connection_set_database g_tls_connection_set_database = FuncLoader.LoadFunction<d_g_tls_connection_set_database>(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gio), "g_tls_connection_set_database"));

		[GLib.Property ("database")]
		public GLib.TlsDatabase Database {
			get  {
				IntPtr raw_ret = g_tls_connection_get_database(Handle);
				GLib.TlsDatabase ret = GLib.Object.GetObject(raw_ret) as GLib.TlsDatabase;
				return ret;
			}
			set  {
				g_tls_connection_set_database(Handle, value == null ? IntPtr.Zero : value.Handle);
			}
		}

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate IntPtr d_g_tls_connection_get_interaction(IntPtr raw);
		static d_g_tls_connection_get_interaction g_tls_connection_get_interaction = FuncLoader.LoadFunction<d_g_tls_connection_get_interaction>(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gio), "g_tls_connection_get_interaction"));

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate void d_g_tls_connection_set_interaction(IntPtr raw, IntPtr interaction);
		static d_g_tls_connection_set_interaction g_tls_connection_set_interaction = FuncLoader.LoadFunction<d_g_tls_connection_set_interaction>(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gio), "g_tls_connection_set_interaction"));

		[GLib.Property ("interaction")]
		public GLib.TlsInteraction Interaction {
			get  {
				IntPtr raw_ret = g_tls_connection_get_interaction(Handle);
				GLib.TlsInteraction ret = GLib.Object.GetObject(raw_ret) as GLib.TlsInteraction;
				return ret;
			}
			set  {
				g_tls_connection_set_interaction(Handle, value == null ? IntPtr.Zero : value.Handle);
			}
		}

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate bool d_g_tls_connection_get_require_close_notify(IntPtr raw);
		static d_g_tls_connection_get_require_close_notify g_tls_connection_get_require_close_notify = FuncLoader.LoadFunction<d_g_tls_connection_get_require_close_notify>(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gio), "g_tls_connection_get_require_close_notify"));

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate void d_g_tls_connection_set_require_close_notify(IntPtr raw, bool require_close_notify);
		static d_g_tls_connection_set_require_close_notify g_tls_connection_set_require_close_notify = FuncLoader.LoadFunction<d_g_tls_connection_set_require_close_notify>(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gio), "g_tls_connection_set_require_close_notify"));

		[GLib.Property ("require-close-notify")]
		public bool RequireCloseNotify {
			get  {
				bool raw_ret = g_tls_connection_get_require_close_notify(Handle);
				bool ret = raw_ret;
				return ret;
			}
			set  {
				g_tls_connection_set_require_close_notify(Handle, value);
			}
		}

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate int d_g_tls_connection_get_rehandshake_mode(IntPtr raw);
		static d_g_tls_connection_get_rehandshake_mode g_tls_connection_get_rehandshake_mode = FuncLoader.LoadFunction<d_g_tls_connection_get_rehandshake_mode>(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gio), "g_tls_connection_get_rehandshake_mode"));

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate void d_g_tls_connection_set_rehandshake_mode(IntPtr raw, int mode);
		static d_g_tls_connection_set_rehandshake_mode g_tls_connection_set_rehandshake_mode = FuncLoader.LoadFunction<d_g_tls_connection_set_rehandshake_mode>(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gio), "g_tls_connection_set_rehandshake_mode"));

		[GLib.Property ("rehandshake-mode")]
		public GLib.TlsRehandshakeMode RehandshakeMode {
			get  {
				int raw_ret = g_tls_connection_get_rehandshake_mode(Handle);
				GLib.TlsRehandshakeMode ret = (GLib.TlsRehandshakeMode) raw_ret;
				return ret;
			}
			set  {
				g_tls_connection_set_rehandshake_mode(Handle, (int) value);
			}
		}

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate IntPtr d_g_tls_connection_get_certificate(IntPtr raw);
		static d_g_tls_connection_get_certificate g_tls_connection_get_certificate = FuncLoader.LoadFunction<d_g_tls_connection_get_certificate>(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gio), "g_tls_connection_get_certificate"));

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate void d_g_tls_connection_set_certificate(IntPtr raw, IntPtr certificate);
		static d_g_tls_connection_set_certificate g_tls_connection_set_certificate = FuncLoader.LoadFunction<d_g_tls_connection_set_certificate>(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gio), "g_tls_connection_set_certificate"));

		[GLib.Property ("certificate")]
		public GLib.TlsCertificate Certificate {
			get  {
				IntPtr raw_ret = g_tls_connection_get_certificate(Handle);
				GLib.TlsCertificate ret = GLib.Object.GetObject(raw_ret) as GLib.TlsCertificate;
				return ret;
			}
			set  {
				g_tls_connection_set_certificate(Handle, value == null ? IntPtr.Zero : value.Handle);
			}
		}

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate IntPtr d_g_tls_connection_get_peer_certificate(IntPtr raw);
		static d_g_tls_connection_get_peer_certificate g_tls_connection_get_peer_certificate = FuncLoader.LoadFunction<d_g_tls_connection_get_peer_certificate>(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gio), "g_tls_connection_get_peer_certificate"));

		[GLib.Property ("peer-certificate")]
		public GLib.TlsCertificate PeerCertificate {
			get  {
				IntPtr raw_ret = g_tls_connection_get_peer_certificate(Handle);
				GLib.TlsCertificate ret = GLib.Object.GetObject(raw_ret) as GLib.TlsCertificate;
				return ret;
			}
		}

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate int d_g_tls_connection_get_peer_certificate_errors(IntPtr raw);
		static d_g_tls_connection_get_peer_certificate_errors g_tls_connection_get_peer_certificate_errors = FuncLoader.LoadFunction<d_g_tls_connection_get_peer_certificate_errors>(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gio), "g_tls_connection_get_peer_certificate_errors"));

		[GLib.Property ("peer-certificate-errors")]
		public GLib.TlsCertificateFlags PeerCertificateErrors {
			get  {
				int raw_ret = g_tls_connection_get_peer_certificate_errors(Handle);
				GLib.TlsCertificateFlags ret = (GLib.TlsCertificateFlags) raw_ret;
				return ret;
			}
		}

		[GLib.Signal("accept-certificate")]
		public event GLib.AcceptCertificateHandler AcceptCertificate {
			add {
				this.AddSignalHandler ("accept-certificate", value, typeof (GLib.AcceptCertificateArgs));
			}
			remove {
				this.RemoveSignalHandler ("accept-certificate", value);
			}
		}

		static AcceptCertificateNativeDelegate AcceptCertificate_cb_delegate;
		static AcceptCertificateNativeDelegate AcceptCertificateVMCallback {
			get {
				if (AcceptCertificate_cb_delegate == null)
					AcceptCertificate_cb_delegate = new AcceptCertificateNativeDelegate (AcceptCertificate_cb);
				return AcceptCertificate_cb_delegate;
			}
		}

		static void OverrideAcceptCertificate (GLib.GType gtype)
		{
			OverrideAcceptCertificate (gtype, AcceptCertificateVMCallback);
		}

		static void OverrideAcceptCertificate (GLib.GType gtype, AcceptCertificateNativeDelegate callback)
		{
			unsafe {
				IntPtr* raw_ptr = (IntPtr*)(((long) gtype.GetClassPtr()) + (long) class_abi.GetFieldOffset("accept_certificate"));
				*raw_ptr = Marshal.GetFunctionPointerForDelegate(callback);
			}
		}

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate bool AcceptCertificateNativeDelegate (IntPtr inst, IntPtr peer_cert, int errors);

		static bool AcceptCertificate_cb (IntPtr inst, IntPtr peer_cert, int errors)
		{
			try {
				TlsConnection __obj = GLib.Object.GetObject (inst, false) as TlsConnection;
				bool __result;
				__result = __obj.OnAcceptCertificate (GLib.Object.GetObject(peer_cert) as GLib.TlsCertificate, (GLib.TlsCertificateFlags) errors);
				return __result;
			} catch (Exception e) {
				GLib.ExceptionManager.RaiseUnhandledException (e, true);
				// NOTREACHED: above call does not return.
				throw;
			}
		}

		[GLib.DefaultSignalHandler(Type=typeof(GLib.TlsConnection), ConnectionMethod="OverrideAcceptCertificate")]
		protected virtual bool OnAcceptCertificate (GLib.TlsCertificate peer_cert, GLib.TlsCertificateFlags errors)
		{
			return InternalAcceptCertificate (peer_cert, errors);
		}

		private bool InternalAcceptCertificate (GLib.TlsCertificate peer_cert, GLib.TlsCertificateFlags errors)
		{
			AcceptCertificateNativeDelegate unmanaged = class_abi.BaseOverride<AcceptCertificateNativeDelegate>(this.LookupGType(), "accept_certificate");
			if (unmanaged == null) return false;

			bool __result = unmanaged (this.Handle, peer_cert == null ? IntPtr.Zero : peer_cert.Handle, (int) errors);
			return __result;
		}

		static HandshakeNativeDelegate Handshake_cb_delegate;
		static HandshakeNativeDelegate HandshakeVMCallback {
			get {
				if (Handshake_cb_delegate == null)
					Handshake_cb_delegate = new HandshakeNativeDelegate (Handshake_cb);
				return Handshake_cb_delegate;
			}
		}

		static void OverrideHandshake (GLib.GType gtype)
		{
			OverrideHandshake (gtype, HandshakeVMCallback);
		}

		static void OverrideHandshake (GLib.GType gtype, HandshakeNativeDelegate callback)
		{
			unsafe {
				IntPtr* raw_ptr = (IntPtr*)(((long) gtype.GetClassPtr()) + (long) class_abi.GetFieldOffset("handshake"));
				*raw_ptr = Marshal.GetFunctionPointerForDelegate(callback);
			}
		}

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate bool HandshakeNativeDelegate (IntPtr inst, IntPtr cancellable, out IntPtr error);

		static bool Handshake_cb (IntPtr inst, IntPtr cancellable, out IntPtr error)
		{
			error = IntPtr.Zero;

			try {
				TlsConnection __obj = GLib.Object.GetObject (inst, false) as TlsConnection;
				bool __result;
				__result = __obj.OnHandshake (GLib.Object.GetObject(cancellable) as GLib.Cancellable);
				return __result;
			} catch (Exception e) {
				GLib.ExceptionManager.RaiseUnhandledException (e, true);
				// NOTREACHED: above call does not return.
				throw;
			}
		}

		[GLib.DefaultSignalHandler(Type=typeof(GLib.TlsConnection), ConnectionMethod="OverrideHandshake")]
		protected virtual bool OnHandshake (GLib.Cancellable cancellable)
		{
			return InternalHandshake (cancellable);
		}

		private bool InternalHandshake (GLib.Cancellable cancellable)
		{
			HandshakeNativeDelegate unmanaged = class_abi.BaseOverride<HandshakeNativeDelegate>(this.LookupGType(), "handshake");
			if (unmanaged == null) throw new InvalidOperationException ("No base method to invoke");

			IntPtr error = IntPtr.Zero;
			bool __result = unmanaged (this.Handle, cancellable == null ? IntPtr.Zero : cancellable.Handle, out error);
			return __result;
		}

		static HandshakeAsyncNativeDelegate HandshakeAsync_cb_delegate;
		static HandshakeAsyncNativeDelegate HandshakeAsyncVMCallback {
			get {
				if (HandshakeAsync_cb_delegate == null)
					HandshakeAsync_cb_delegate = new HandshakeAsyncNativeDelegate (HandshakeAsync_cb);
				return HandshakeAsync_cb_delegate;
			}
		}

		static void OverrideHandshakeAsync (GLib.GType gtype)
		{
			OverrideHandshakeAsync (gtype, HandshakeAsyncVMCallback);
		}

		static void OverrideHandshakeAsync (GLib.GType gtype, HandshakeAsyncNativeDelegate callback)
		{
			unsafe {
				IntPtr* raw_ptr = (IntPtr*)(((long) gtype.GetClassPtr()) + (long) class_abi.GetFieldOffset("handshake_async"));
				*raw_ptr = Marshal.GetFunctionPointerForDelegate(callback);
			}
		}

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate void HandshakeAsyncNativeDelegate (IntPtr inst, int io_priority, IntPtr cancellable, GLibSharp.AsyncReadyCallbackNative cb, IntPtr user_data);

		static void HandshakeAsync_cb (IntPtr inst, int io_priority, IntPtr cancellable, GLibSharp.AsyncReadyCallbackNative cb, IntPtr user_data)
		{
			try {
				TlsConnection __obj = GLib.Object.GetObject (inst, false) as TlsConnection;
				GLibSharp.AsyncReadyCallbackInvoker cb_invoker = new GLibSharp.AsyncReadyCallbackInvoker (cb, user_data);
				__obj.OnHandshakeAsync (io_priority, GLib.Object.GetObject(cancellable) as GLib.Cancellable, cb_invoker.Handler);
			} catch (Exception e) {
				GLib.ExceptionManager.RaiseUnhandledException (e, false);
			}
		}

		[GLib.DefaultSignalHandler(Type=typeof(GLib.TlsConnection), ConnectionMethod="OverrideHandshakeAsync")]
		protected virtual void OnHandshakeAsync (int io_priority, GLib.Cancellable cancellable, GLib.AsyncReadyCallback cb)
		{
			InternalHandshakeAsync (io_priority, cancellable, cb);
		}

		private void InternalHandshakeAsync (int io_priority, GLib.Cancellable cancellable, GLib.AsyncReadyCallback cb)
		{
			HandshakeAsyncNativeDelegate unmanaged = class_abi.BaseOverride<HandshakeAsyncNativeDelegate>(this.LookupGType(), "handshake_async");
			if (unmanaged == null) return;

			GLibSharp.AsyncReadyCallbackWrapper cb_wrapper = new GLibSharp.AsyncReadyCallbackWrapper (cb);
			cb_wrapper.PersistUntilCalled ();
			unmanaged (this.Handle, io_priority, cancellable == null ? IntPtr.Zero : cancellable.Handle, cb_wrapper.NativeDelegate, IntPtr.Zero);
		}

		static HandshakeFinishNativeDelegate HandshakeFinish_cb_delegate;
		static HandshakeFinishNativeDelegate HandshakeFinishVMCallback {
			get {
				if (HandshakeFinish_cb_delegate == null)
					HandshakeFinish_cb_delegate = new HandshakeFinishNativeDelegate (HandshakeFinish_cb);
				return HandshakeFinish_cb_delegate;
			}
		}

		static void OverrideHandshakeFinish (GLib.GType gtype)
		{
			OverrideHandshakeFinish (gtype, HandshakeFinishVMCallback);
		}

		static void OverrideHandshakeFinish (GLib.GType gtype, HandshakeFinishNativeDelegate callback)
		{
			unsafe {
				IntPtr* raw_ptr = (IntPtr*)(((long) gtype.GetClassPtr()) + (long) class_abi.GetFieldOffset("handshake_finish"));
				*raw_ptr = Marshal.GetFunctionPointerForDelegate(callback);
			}
		}

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate bool HandshakeFinishNativeDelegate (IntPtr inst, IntPtr result, out IntPtr error);

		static bool HandshakeFinish_cb (IntPtr inst, IntPtr result, out IntPtr error)
		{
			error = IntPtr.Zero;

			try {
				TlsConnection __obj = GLib.Object.GetObject (inst, false) as TlsConnection;
				bool __result;
				__result = __obj.OnHandshakeFinish (GLib.AsyncResultAdapter.GetObject (result, false));
				return __result;
			} catch (Exception e) {
				GLib.ExceptionManager.RaiseUnhandledException (e, true);
				// NOTREACHED: above call does not return.
				throw;
			}
		}

		[GLib.DefaultSignalHandler(Type=typeof(GLib.TlsConnection), ConnectionMethod="OverrideHandshakeFinish")]
		protected virtual bool OnHandshakeFinish (GLib.IAsyncResult result)
		{
			return InternalHandshakeFinish (result);
		}

		private bool InternalHandshakeFinish (GLib.IAsyncResult result)
		{
			HandshakeFinishNativeDelegate unmanaged = class_abi.BaseOverride<HandshakeFinishNativeDelegate>(this.LookupGType(), "handshake_finish");
			if (unmanaged == null) throw new InvalidOperationException ("No base method to invoke");

			IntPtr error = IntPtr.Zero;
			bool __result = unmanaged (this.Handle, result == null ? IntPtr.Zero : ((result is GLib.Object) ? (result as GLib.Object).Handle : (result as GLib.AsyncResultAdapter).Handle), out error);
			return __result;
		}


		// Internal representation of the wrapped structure ABI.
		static GLib.AbiStruct _class_abi = null;
		static public unsafe new GLib.AbiStruct class_abi {
			get {
				if (_class_abi == null)
					_class_abi = new GLib.AbiStruct (new List<GLib.AbiField>{ 
						new GLib.AbiField("accept_certificate"
							, GLib.IOStream.class_abi.Fields
							, (uint) sizeof( IntPtr ) // accept_certificate
							, null
							, "handshake"
							, (uint) sizeof(IntPtr)
							, 0
							),
						new GLib.AbiField("handshake"
							, -1
							, (uint) sizeof( IntPtr ) // handshake
							, "accept_certificate"
							, "handshake_async"
							, (uint) sizeof(IntPtr)
							, 0
							),
						new GLib.AbiField("handshake_async"
							, -1
							, (uint) sizeof( IntPtr ) // handshake_async
							, "handshake"
							, "handshake_finish"
							, (uint) sizeof(IntPtr)
							, 0
							),
						new GLib.AbiField("handshake_finish"
							, -1
							, (uint) sizeof( IntPtr ) // handshake_finish
							, "handshake_async"
							, "padding"
							, (uint) sizeof(IntPtr)
							, 0
							),
						new GLib.AbiField("padding"
							, -1
							, (uint) sizeof( IntPtr ) * 8 // padding
							, "handshake_finish"
							, null
							, (uint) sizeof(IntPtr)
							, 0
							),
					});

				return _class_abi;
			}
		}


		// End of the ABI representation.

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate bool d_g_tls_connection_emit_accept_certificate(IntPtr raw, IntPtr peer_cert, int errors);
		static d_g_tls_connection_emit_accept_certificate g_tls_connection_emit_accept_certificate = FuncLoader.LoadFunction<d_g_tls_connection_emit_accept_certificate>(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gio), "g_tls_connection_emit_accept_certificate"));

		public bool EmitAcceptCertificate(GLib.TlsCertificate peer_cert, GLib.TlsCertificateFlags errors) {
			bool raw_ret = g_tls_connection_emit_accept_certificate(Handle, peer_cert == null ? IntPtr.Zero : peer_cert.Handle, (int) errors);
			bool ret = raw_ret;
			return ret;
		}

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate IntPtr d_g_tls_connection_get_type();
		static d_g_tls_connection_get_type g_tls_connection_get_type = FuncLoader.LoadFunction<d_g_tls_connection_get_type>(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gio), "g_tls_connection_get_type"));

		public static new GLib.GType GType { 
			get {
				IntPtr raw_ret = g_tls_connection_get_type();
				GLib.GType ret = new GLib.GType(raw_ret);
				return ret;
			}
		}

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate bool d_g_tls_connection_handshake(IntPtr raw, IntPtr cancellable, out IntPtr error);
		static d_g_tls_connection_handshake g_tls_connection_handshake = FuncLoader.LoadFunction<d_g_tls_connection_handshake>(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gio), "g_tls_connection_handshake"));

		public unsafe bool Handshake(GLib.Cancellable cancellable) {
			IntPtr error = IntPtr.Zero;
			bool raw_ret = g_tls_connection_handshake(Handle, cancellable == null ? IntPtr.Zero : cancellable.Handle, out error);
			bool ret = raw_ret;
			if (error != IntPtr.Zero) throw new GLib.GException (error);
			return ret;
		}

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate void d_g_tls_connection_handshake_async(IntPtr raw, int io_priority, IntPtr cancellable, GLibSharp.AsyncReadyCallbackNative cb, IntPtr user_data);
		static d_g_tls_connection_handshake_async g_tls_connection_handshake_async = FuncLoader.LoadFunction<d_g_tls_connection_handshake_async>(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gio), "g_tls_connection_handshake_async"));

		public void HandshakeAsync(int io_priority, GLib.Cancellable cancellable, GLib.AsyncReadyCallback cb) {
			GLibSharp.AsyncReadyCallbackWrapper cb_wrapper = new GLibSharp.AsyncReadyCallbackWrapper (cb);
			cb_wrapper.PersistUntilCalled ();
			g_tls_connection_handshake_async(Handle, io_priority, cancellable == null ? IntPtr.Zero : cancellable.Handle, cb_wrapper.NativeDelegate, IntPtr.Zero);
		}

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate bool d_g_tls_connection_handshake_finish(IntPtr raw, IntPtr result, out IntPtr error);
		static d_g_tls_connection_handshake_finish g_tls_connection_handshake_finish = FuncLoader.LoadFunction<d_g_tls_connection_handshake_finish>(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gio), "g_tls_connection_handshake_finish"));

		public unsafe bool HandshakeFinish(GLib.IAsyncResult result) {
			IntPtr error = IntPtr.Zero;
			bool raw_ret = g_tls_connection_handshake_finish(Handle, result == null ? IntPtr.Zero : ((result is GLib.Object) ? (result as GLib.Object).Handle : (result as GLib.AsyncResultAdapter).Handle), out error);
			bool ret = raw_ret;
			if (error != IntPtr.Zero) throw new GLib.GException (error);
			return ret;
		}


		// Internal representation of the wrapped structure ABI.
		static GLib.AbiStruct _abi_info = null;
		static public unsafe new GLib.AbiStruct abi_info {
			get {
				if (_abi_info == null)
					_abi_info = new GLib.AbiStruct (new List<GLib.AbiField>{ 
						new GLib.AbiField("priv"
							, GLib.IOStream.abi_info.Fields
							, (uint) sizeof( IntPtr ) // priv
							, null
							, null
							, (uint) sizeof(IntPtr)
							, 0
							),
					});

				return _abi_info;
			}
		}


		// End of the ABI representation.

#endregion
	}
}
