4 This file is part of avahi.
6 avahi is free software; you can redistribute it and/or modify it
7 under the terms of the GNU Lesser General Public License as
8 published by the Free Software Foundation; either version 2.1 of the
9 License, or (at your option) any later version.
11 avahi is distributed in the hope that it will be useful, but WITHOUT
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
14 Public License for more details.
16 You should have received a copy of the GNU Lesser General Public
17 License along with avahi; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
23 using System.Runtime.InteropServices;
29 public enum EntryGroupState {
36 internal delegate void EntryGroupCallback (IntPtr group, EntryGroupState state, IntPtr userdata);
37 public delegate void EntryGroupStateHandler (object o, EntryGroupState state);
39 public class EntryGroup : IDisposable
41 private Client client;
42 private IntPtr handle;
44 [DllImport ("avahi-client")]
45 private static extern IntPtr avahi_entry_group_new (IntPtr client, EntryGroupCallback cb, IntPtr userdata);
47 [DllImport ("avahi-client")]
48 private static extern void avahi_entry_group_commit (IntPtr group);
50 [DllImport ("avahi-client")]
51 private static extern void avahi_entry_group_reset (IntPtr group);
53 [DllImport ("avahi-client")]
54 private static extern EntryGroupState avahi_entry_group_get_state (IntPtr group);
56 [DllImport ("avahi-client")]
57 private static extern bool avahi_entry_group_is_empty (IntPtr group);
59 [DllImport ("avahi-client")]
60 private static extern void avahi_entry_group_add_service_strlst (IntPtr group, int iface, Protocol proto,
61 IntPtr name, IntPtr type, IntPtr domain,
62 IntPtr host, UInt16 port, IntPtr strlst);
64 [DllImport ("avahi-client")]
65 private static extern void avahi_entry_group_free (IntPtr group);
67 [DllImport ("avahi-common")]
68 private static extern IntPtr avahi_string_list_new (IntPtr txt);
70 [DllImport ("avahi-common")]
71 private static extern IntPtr avahi_string_list_add (IntPtr list, IntPtr txt);
73 [DllImport ("avahi-common")]
74 private static extern void avahi_string_list_free (IntPtr list);
76 public event EntryGroupStateHandler StateChanged;
78 public EntryGroupState State
80 get { return avahi_entry_group_get_state (handle); }
85 get { return avahi_entry_group_is_empty (handle); }
88 public EntryGroup (Client client)
91 handle = avahi_entry_group_new (client.Handle, OnEntryGroupCallback, IntPtr.Zero);
100 public void Dispose ()
102 if (handle != IntPtr.Zero) {
103 avahi_entry_group_free (handle);
104 handle = IntPtr.Zero;
108 public void Commit ()
110 avahi_entry_group_commit (handle);
111 client.CheckError ();
116 avahi_entry_group_reset (handle);
117 client.CheckError ();
120 public void AddService (string name, string type, string domain,
121 UInt16 port, params string[] txt)
123 AddService (-1, Protocol.Unspecified, name, type, domain, null, port, txt);
126 public void AddService (int iface, Protocol proto, string name, string type, string domain,
127 string host, UInt16 port, params string[] txt)
129 IntPtr list = avahi_string_list_new (IntPtr.Zero);
132 foreach (string item in txt) {
133 IntPtr itemPtr = Utility.StringToPtr (item);
134 list = avahi_string_list_add (list, itemPtr);
135 Utility.Free (itemPtr);
139 IntPtr namePtr = Utility.StringToPtr (name);
140 IntPtr typePtr = Utility.StringToPtr (type);
141 IntPtr domainPtr = Utility.StringToPtr (domain);
142 IntPtr hostPtr = Utility.StringToPtr (host);
143 avahi_entry_group_add_service_strlst (handle, iface, proto, namePtr, typePtr, domainPtr,
144 hostPtr, port, list);
145 avahi_string_list_free (list);
147 client.CheckError ();
150 private void OnEntryGroupCallback (IntPtr group, EntryGroupState state, IntPtr userdata)
152 if (StateChanged != null)
153 StateChanged (this, state);