X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-sharp%2FEntryGroup.cs;h=24abae4d5222b0b4c0998b8ef9eac73d5578110e;hb=d7b03753f10d93d278091d39b95adf3b18a2770c;hp=ab89544b4f1cc1e847bc87e8be51fbd1cc8c248e;hpb=69d2b9fee695cf2e65f1eda9c8ce66085efe2856;p=catta diff --git a/avahi-sharp/EntryGroup.cs b/avahi-sharp/EntryGroup.cs index ab89544..24abae4 100644 --- a/avahi-sharp/EntryGroup.cs +++ b/avahi-sharp/EntryGroup.cs @@ -1,5 +1,3 @@ -/* $Id$ */ - /*** This file is part of avahi. @@ -41,7 +39,7 @@ namespace Avahi UseWideArea = 128, UseMulticast = 256 } - + public enum EntryGroupState { Uncommited, Registering, @@ -58,7 +56,7 @@ namespace Avahi { get { return state; } } - + public EntryGroupStateArgs (EntryGroupState state) { this.state = state; @@ -67,13 +65,13 @@ namespace Avahi internal delegate void EntryGroupCallback (IntPtr group, EntryGroupState state, IntPtr userdata); public delegate void EntryGroupStateHandler (object o, EntryGroupStateArgs args); - + public class EntryGroup : IDisposable { private Client client; private IntPtr handle; private EntryGroupCallback cb; - + [DllImport ("avahi-client")] private static extern IntPtr avahi_entry_group_new (IntPtr client, EntryGroupCallback cb, IntPtr userdata); @@ -114,7 +112,7 @@ namespace Avahi private static extern int avahi_entry_group_add_record (IntPtr group, int iface, Protocol proto, PublishFlags flags, byte[] name, RecordClass clazz, RecordType type, uint ttl, byte[] rdata, int size); - + [DllImport ("avahi-client")] private static extern void avahi_entry_group_free (IntPtr group); @@ -131,7 +129,7 @@ namespace Avahi private static extern IntPtr avahi_alternative_service_name (byte[] name); public event EntryGroupStateHandler StateChanged; - + public EntryGroupState State { get { @@ -149,7 +147,7 @@ namespace Avahi } } } - + public EntryGroup (Client client) { this.client = client; @@ -236,14 +234,18 @@ namespace Avahi private void AddService (int iface, Protocol proto, PublishFlags flags, string name, string type, string domain, string host, UInt16 port, IntPtr list) { - int ret = avahi_entry_group_add_service_strlst (handle, iface, proto, flags, + int ret; + + lock (client) { + ret = avahi_entry_group_add_service_strlst (handle, iface, proto, flags, Utility.StringToBytes (name), Utility.StringToBytes (type), Utility.StringToBytes (domain), Utility.StringToBytes (host), port, list); - + } + avahi_string_list_free (list); - + if (ret < 0) { client.ThrowError (); } @@ -281,7 +283,7 @@ namespace Avahi UpdateService (iface, proto, flags, name, type, domain, list); } - + private void UpdateService (int iface, Protocol proto, PublishFlags flags, string name, string type, string domain, IntPtr list) {