// 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 NetworkAddress : GLib.Object, GLib.ISocketConnectable {

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

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate IntPtr d_g_network_address_new(IntPtr hostname, ushort port);
		static d_g_network_address_new g_network_address_new = FuncLoader.LoadFunction<d_g_network_address_new>(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gio), "g_network_address_new"));

		public NetworkAddress (string hostname, ushort port) : base (IntPtr.Zero)
		{
			if (GetType () != typeof (NetworkAddress)) {
				var vals = new List<GLib.Value> ();
				var names = new List<string> ();
				names.Add ("hostname");
				vals.Add (new GLib.Value (hostname));
				names.Add ("port");
				vals.Add (new GLib.Value (port));
				CreateNativeObject (names.ToArray (), vals.ToArray ());
				return;
			}
			IntPtr native_hostname = GLib.Marshaller.StringToPtrGStrdup (hostname);
			Raw = g_network_address_new(native_hostname, port);
			GLib.Marshaller.Free (native_hostname);
		}

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

		public NetworkAddress (ushort port) : base (IntPtr.Zero)
		{
			if (GetType () != typeof (NetworkAddress)) {
				var vals = new List<GLib.Value> ();
				var names = new List<string> ();
				names.Add ("port");
				vals.Add (new GLib.Value (port));
				CreateNativeObject (names.ToArray (), vals.ToArray ());
				return;
			}
			Raw = g_network_address_new_loopback(port);
		}

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

		[GLib.Property ("hostname")]
		public string Hostname {
			get  {
				IntPtr raw_ret = g_network_address_get_hostname(Handle);
				string ret = GLib.Marshaller.Utf8PtrToString (raw_ret);
				return ret;
			}
		}

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

		[GLib.Property ("port")]
		public ushort Port {
			get  {
				ushort raw_ret = g_network_address_get_port(Handle);
				ushort ret = raw_ret;
				return ret;
			}
		}

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

		[GLib.Property ("scheme")]
		public string Scheme {
			get  {
				IntPtr raw_ret = g_network_address_get_scheme(Handle);
				string ret = GLib.Marshaller.Utf8PtrToString (raw_ret);
				return ret;
			}
		}


		// 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 (GLib.Object.class_abi.Fields);

				return _class_abi;
			}
		}


		// End of the ABI representation.

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

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

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate IntPtr d_g_network_address_parse(IntPtr host_and_port, ushort default_port, out IntPtr error);
		static d_g_network_address_parse g_network_address_parse = FuncLoader.LoadFunction<d_g_network_address_parse>(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gio), "g_network_address_parse"));

		public static unsafe GLib.ISocketConnectable Parse(string host_and_port, ushort default_port) {
			IntPtr native_host_and_port = GLib.Marshaller.StringToPtrGStrdup (host_and_port);
			IntPtr error = IntPtr.Zero;
			IntPtr raw_ret = g_network_address_parse(native_host_and_port, default_port, out error);
			GLib.ISocketConnectable ret = GLib.SocketConnectableAdapter.GetObject (raw_ret, false);
			GLib.Marshaller.Free (native_host_and_port);
			if (error != IntPtr.Zero) throw new GLib.GException (error);
			return ret;
		}

		[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
		delegate IntPtr d_g_network_address_parse_uri(IntPtr uri, ushort default_port, out IntPtr error);
		static d_g_network_address_parse_uri g_network_address_parse_uri = FuncLoader.LoadFunction<d_g_network_address_parse_uri>(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gio), "g_network_address_parse_uri"));

		public static unsafe GLib.ISocketConnectable ParseUri(string uri, ushort default_port) {
			IntPtr native_uri = GLib.Marshaller.StringToPtrGStrdup (uri);
			IntPtr error = IntPtr.Zero;
			IntPtr raw_ret = g_network_address_parse_uri(native_uri, default_port, out error);
			GLib.ISocketConnectable ret = GLib.SocketConnectableAdapter.GetObject (raw_ret, false);
			GLib.Marshaller.Free (native_uri);
			if (error != IntPtr.Zero) throw new GLib.GException (error);
			return ret;
		}

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

		public GLib.SocketAddressEnumerator Enumerate() {
			IntPtr raw_ret = g_socket_connectable_enumerate(Handle);
			GLib.SocketAddressEnumerator ret = GLib.Object.GetObject(raw_ret) as GLib.SocketAddressEnumerator;
			return ret;
		}

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

		public GLib.SocketAddressEnumerator ProxyEnumerate() {
			IntPtr raw_ret = g_socket_connectable_proxy_enumerate(Handle);
			GLib.SocketAddressEnumerator ret = GLib.Object.GetObject(raw_ret) as GLib.SocketAddressEnumerator;
			return ret;
		}

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

		public override string ToString() {
			IntPtr raw_ret = g_socket_connectable_to_string(Handle);
			string ret = GLib.Marshaller.PtrToStringGFree(raw_ret);
			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.Object.abi_info.Fields
							, (uint) sizeof( IntPtr ) // priv
							, null
							, null
							, (uint) sizeof(IntPtr)
							, 0
							),
					});

				return _abi_info;
			}
		}


		// End of the ABI representation.

#endregion
	}
}
