3 using System.Collections;
4 using System.Runtime.InteropServices;
8 internal enum ResolverEvent {
13 internal enum BrowserEvent {
18 internal delegate void ClientHandler (IntPtr client, ClientState state, IntPtr userData);
20 public enum Protocol {
26 public enum ClientState {
34 public class Client : IDisposable
36 private IntPtr handle;
38 [DllImport ("avahi-client")]
39 private static extern IntPtr avahi_client_new (IntPtr poll, ClientHandler handler,
40 IntPtr userData, out int error);
42 [DllImport ("avahi-client")]
43 private static extern void avahi_client_free (IntPtr handle);
45 [DllImport ("avahi-client")]
46 private static extern IntPtr avahi_client_get_version_string (IntPtr handle);
48 [DllImport ("avahi-client")]
49 private static extern IntPtr avahi_client_get_host_name (IntPtr handle);
51 [DllImport ("avahi-client")]
52 private static extern IntPtr avahi_client_get_domain_name (IntPtr handle);
54 [DllImport ("avahi-client")]
55 private static extern IntPtr avahi_client_get_host_name_fqdn (IntPtr handle);
57 [DllImport ("avahi-client")]
58 private static extern ClientState avahi_client_get_state (IntPtr handle);
60 [DllImport ("avahi-client")]
61 private static extern int avahi_client_errno (IntPtr handle);
63 [DllImport ("avahi-glib")]
64 private static extern IntPtr avahi_glib_poll_new (IntPtr context, int priority);
66 [DllImport ("avahi-glib")]
67 private static extern IntPtr avahi_glib_poll_get (IntPtr gpoll);
69 internal IntPtr Handle
71 get { return handle; }
76 get { return Utility.PtrToString (avahi_client_get_version_string (handle)); }
79 public string HostName
81 get { return Utility.PtrToString (avahi_client_get_host_name (handle)); }
84 public string DomainName
86 get { return Utility.PtrToString (avahi_client_get_domain_name (handle)); }
89 public string HostNameFqdn
91 get { return Utility.PtrToString (avahi_client_get_host_name_fqdn (handle)); }
94 public ClientState State
96 get { return (ClientState) avahi_client_get_state (handle); }
99 internal int LastError
101 get { return avahi_client_errno (handle); }
106 IntPtr gpoll = avahi_glib_poll_new (IntPtr.Zero, 0);
107 IntPtr poll = avahi_glib_poll_get (gpoll);
110 handle = avahi_client_new (poll, OnClientCallback, IntPtr.Zero, out error);
112 throw new ClientException (error);
120 public void Dispose ()
122 if (handle != IntPtr.Zero) {
123 avahi_client_free (handle);
124 handle = IntPtr.Zero;
128 internal void CheckError ()
130 int error = LastError;
133 throw new ClientException (error);
136 private void OnClientCallback (IntPtr client, ClientState state, IntPtr userData)
138 Console.WriteLine ("Got new state: " + state);