]> git.meshlink.io Git - catta/blob - avahi-sharp/Client.cs
99651cd0e093f8afcfecf4d7e88238e4b01aed28
[catta] / avahi-sharp / Client.cs
1
2 using System;
3 using System.Collections;
4 using System.Runtime.InteropServices;
5
6 namespace Avahi
7 {
8     internal enum ResolverEvent {
9         Found,
10         Timeout
11     }
12     
13     internal enum BrowserEvent {
14         Added,
15         Removed
16     }
17     
18     internal delegate void ClientHandler (IntPtr client, ClientState state, IntPtr userData);
19
20     public enum Protocol {
21         Unspecified = 0,
22         IPv4 = 2,
23         IPv6 = 10
24     }
25     
26     public enum ClientState {
27         Invalid,
28         Registering,
29         Running,
30         Collision,
31         Disconnected = 100
32     }
33     
34     public class Client : IDisposable
35     {
36         private IntPtr handle;
37
38         [DllImport ("avahi-client")]
39         private static extern IntPtr avahi_client_new (IntPtr poll, ClientHandler handler,
40                                                        IntPtr userData, out int error);
41
42         [DllImport ("avahi-client")]
43         private static extern void avahi_client_free (IntPtr handle);
44
45         [DllImport ("avahi-client")]
46         private static extern IntPtr avahi_client_get_version_string (IntPtr handle);
47
48         [DllImport ("avahi-client")]
49         private static extern IntPtr avahi_client_get_host_name (IntPtr handle);
50
51         [DllImport ("avahi-client")]
52         private static extern IntPtr avahi_client_get_domain_name (IntPtr handle);
53
54         [DllImport ("avahi-client")]
55         private static extern IntPtr avahi_client_get_host_name_fqdn (IntPtr handle);
56
57         [DllImport ("avahi-client")]
58         private static extern ClientState avahi_client_get_state (IntPtr handle);
59
60         [DllImport ("avahi-client")]
61         private static extern int avahi_client_errno (IntPtr handle);
62         
63         [DllImport ("avahi-glib")]
64         private static extern IntPtr avahi_glib_poll_new (IntPtr context, int priority);
65
66         [DllImport ("avahi-glib")]
67         private static extern IntPtr avahi_glib_poll_get (IntPtr gpoll);
68
69         internal IntPtr Handle
70         {
71             get { return handle; }
72         }
73         
74         public string Version
75         {
76             get { return Utility.PtrToString (avahi_client_get_version_string (handle)); }
77         }
78
79         public string HostName
80         {
81             get { return Utility.PtrToString (avahi_client_get_host_name (handle)); }
82         }
83
84         public string DomainName
85         {
86             get { return Utility.PtrToString (avahi_client_get_domain_name (handle)); }
87         }
88
89         public string HostNameFqdn
90         {
91             get { return Utility.PtrToString (avahi_client_get_host_name_fqdn (handle)); }
92         }
93
94         public ClientState State
95         {
96             get { return (ClientState) avahi_client_get_state (handle); }
97         }
98
99         internal int LastError
100         {
101             get { return avahi_client_errno (handle); }
102         }
103
104         public Client ()
105         {
106             IntPtr gpoll = avahi_glib_poll_new (IntPtr.Zero, 0);
107             IntPtr poll = avahi_glib_poll_get (gpoll);
108
109             int error;
110             handle = avahi_client_new (poll, OnClientCallback, IntPtr.Zero, out error);
111             if (error != 0)
112                 throw new ClientException (error);
113         }
114
115         ~Client ()
116         {
117             Dispose ();
118         }
119
120         public void Dispose ()
121         {
122             if (handle != IntPtr.Zero) {
123                 avahi_client_free (handle);
124                 handle = IntPtr.Zero;
125             }
126         }
127
128         internal void CheckError ()
129         {
130             int error = LastError;
131
132             if (error != 0)
133                 throw new ClientException (error);
134         }
135         
136         private void OnClientCallback (IntPtr client, ClientState state, IntPtr userData)
137         {
138             Console.WriteLine ("Got new state: " + state);
139         }
140     }
141 }