+++ /dev/null
-using System;
-using System.Net;
-using System.Collections;
-using System.Runtime.InteropServices;
-using Gtk;
-using Mono.Unix;
-using Mono.Unix.Native;
-
-namespace Avahi.UI
-{
- public class ServiceDialog : Dialog
- {
- [DllImport ("avahi-ui")]
- private static extern IntPtr aui_service_dialog_new (string title, IntPtr parent, IntPtr dummy);
-
- [DllImport ("avahi-ui")]
- private static extern void aui_service_dialog_set_browse_service_typesv (IntPtr dialog, IntPtr[] types);
-
- [DllImport ("avahi-ui")]
- private static extern IntPtr aui_service_dialog_get_browse_service_types (IntPtr dialog);
-
- [DllImport ("avahi-ui")]
- private static extern IntPtr aui_service_dialog_get_domain (IntPtr dialog);
-
- [DllImport ("avahi-ui")]
- private static extern void aui_service_dialog_set_domain (IntPtr dialog, IntPtr domain);
-
- [DllImport ("avahi-ui")]
- private static extern IntPtr aui_service_dialog_get_service_type (IntPtr dialog);
-
- [DllImport ("avahi-ui")]
- private static extern void aui_service_dialog_set_service_type (IntPtr dialog, IntPtr type);
-
- [DllImport ("avahi-ui")]
- private static extern IntPtr aui_service_dialog_get_service_name (IntPtr dialog);
-
- [DllImport ("avahi-ui")]
- private static extern void aui_service_dialog_set_service_name (IntPtr dialog, IntPtr type);
-
- [DllImport ("avahi-ui")]
- private static extern IntPtr aui_service_dialog_get_address (IntPtr dialog);
-
- [DllImport ("avahi-ui")]
- private static extern UInt16 aui_service_dialog_get_port (IntPtr dialog);
-
- [DllImport ("avahi-ui")]
- private static extern IntPtr aui_service_dialog_get_host_name (IntPtr dialog);
-
- [DllImport ("avahi-ui")]
- private static extern IntPtr aui_service_dialog_get_txt_data (IntPtr dialog);
-
- [DllImport ("avahi-ui")]
- private static extern bool aui_service_dialog_get_resolve_service (IntPtr dialog);
-
- [DllImport ("avahi-ui")]
- private static extern void aui_service_dialog_set_resolve_service (IntPtr dialog, bool val);
-
- [DllImport ("avahi-ui")]
- private static extern bool aui_service_dialog_get_resolve_host_name (IntPtr dialog);
-
- [DllImport ("avahi-ui")]
- private static extern void aui_service_dialog_set_resolve_host_name (IntPtr dialog, bool val);
-
- [DllImport ("avahi-ui")]
- private static extern Protocol aui_service_dialog_get_address_family (IntPtr dialog);
-
- [DllImport ("avahi-ui")]
- private static extern void aui_service_dialog_set_address_family (IntPtr dialog, Protocol proto);
-
- [DllImport ("avahi-common")]
- private static extern IntPtr avahi_address_snprint (IntPtr buf, int size, IntPtr address);
-
- [DllImport ("avahi-common")]
- private static extern IntPtr avahi_string_list_get_next (IntPtr list);
-
- [DllImport ("avahi-common")]
- private static extern IntPtr avahi_string_list_get_text (IntPtr list);
-
- [DllImport ("avahi-common")]
- private static extern int avahi_string_list_get_size (IntPtr list);
-
- public string[] BrowseServiceTypes {
- get {
- IntPtr arr = aui_service_dialog_get_browse_service_types (Raw);
-
- ArrayList values = new ArrayList ();
-
- for (int i = 0;;i++) {
- IntPtr ptr = Marshal.ReadIntPtr (arr, i * Marshal.SizeOf (typeof (IntPtr)));
-
- if (ptr == IntPtr.Zero)
- break;
-
- values.Add (GLib.Marshaller.Utf8PtrToString (ptr));
- }
-
- return (string[]) values.ToArray (typeof (string));
- } set {
- IntPtr[] types;
- if (value == null) {
- types = new IntPtr[] { IntPtr.Zero };
- } else {
- types = new IntPtr[value.Length + 1];
-
- for (int i = 0; i < value.Length; i++) {
- types[i] = GLib.Marshaller.StringToPtrGStrdup (value[i]);
- }
-
- types[value.Length] = IntPtr.Zero;
- }
-
- aui_service_dialog_set_browse_service_typesv (Raw, types);
-
- for (int i = 0;;i++) {
- if (types[i] != IntPtr.Zero)
- break;
-
- GLib.Marshaller.Free (types[i]);
- }
- }
- }
-
- public string ServiceType {
- get {
- return GLib.Marshaller.Utf8PtrToString (aui_service_dialog_get_service_type (Raw));
- } set {
- IntPtr type = GLib.Marshaller.StringToPtrGStrdup (value);
- aui_service_dialog_set_service_type (Raw, type);
- GLib.Marshaller.Free (type);
- }
- }
-
- public string ServiceName {
- get {
- return GLib.Marshaller.Utf8PtrToString (aui_service_dialog_get_service_name (Raw));
- } set {
- IntPtr name = GLib.Marshaller.StringToPtrGStrdup (value);
- aui_service_dialog_set_service_name (Raw, name);
- GLib.Marshaller.Free (name);
- }
- }
-
- public IPAddress Address {
- get {
- return PtrToAddress (aui_service_dialog_get_address (Raw));
- }
- }
-
- public UInt16 Port {
- get {
- return aui_service_dialog_get_port (Raw);
- }
- }
-
- public string HostName {
- get {
- return GLib.Marshaller.Utf8PtrToString (aui_service_dialog_get_host_name (Raw));
- }
- }
-
- public string Domain {
- get {
- return GLib.Marshaller.Utf8PtrToString (aui_service_dialog_get_domain (Raw));
- } set {
- IntPtr domain = GLib.Marshaller.StringToPtrGStrdup (value);
- aui_service_dialog_set_domain (Raw, domain);
- GLib.Marshaller.Free (domain);
- }
- }
-
- public byte[][] TxtData {
- get {
- ArrayList txtlist = new ArrayList ();
- IntPtr txt = aui_service_dialog_get_txt_data (Raw);
-
- for (IntPtr l = txt; l != IntPtr.Zero; l = avahi_string_list_get_next (l)) {
- IntPtr buf = avahi_string_list_get_text (l);
- int len = avahi_string_list_get_size (l);
-
- byte[] txtbuf = new byte[len];
- Marshal.Copy (buf, txtbuf, 0, len);
- txtlist.Add (txtbuf);
- }
-
- return (byte[][]) txtlist.ToArray (typeof (byte[]));
- }
- }
-
- public bool ResolveServiceEnabled {
- get {
- return aui_service_dialog_get_resolve_service (Raw);
- } set {
- aui_service_dialog_set_resolve_service (Raw, value);
- }
- }
-
- public bool ResolveHostNameEnabled {
- get {
- return aui_service_dialog_get_resolve_host_name (Raw);
- } set {
- aui_service_dialog_set_resolve_host_name (Raw, value);
- }
- }
-
- public Protocol AddressFamily {
- get {
- return aui_service_dialog_get_address_family (Raw);
- } set {
- aui_service_dialog_set_address_family (Raw, value);
- }
- }
-
- public ServiceDialog (string title, Window parent, params object[] buttonData)
- {
- Raw = aui_service_dialog_new (title, parent == null ? IntPtr.Zero : parent.Handle,
- IntPtr.Zero);
-
- for (int i = 0; i < buttonData.Length - 1; i += 2) {
- AddButton ((string) buttonData[i], (int) buttonData[i + 1]);
- }
- }
-
- private static IPAddress PtrToAddress (IntPtr ptr)
- {
- IPAddress address = null;
-
- if (ptr != IntPtr.Zero) {
- IntPtr buf = Stdlib.malloc (256);
- IntPtr addrPtr = avahi_address_snprint (buf, 256, ptr);
- address = IPAddress.Parse (GLib.Marshaller.Utf8PtrToString (addrPtr));
-
- Stdlib.free (addrPtr);
- }
-
- return address;
- }
- }
-}