]> git.meshlink.io Git - catta/blobdiff - avahi-sharp/EntryGroup.cs
fix avahi_netlink_new to allow multiple netlinks per process
[catta] / avahi-sharp / EntryGroup.cs
index ccdeec9fc5e24d138eb0cf72872f38e0af9b9415..24abae4d5222b0b4c0998b8ef9eac73d5578110e 100644 (file)
@@ -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);
 
@@ -127,21 +125,11 @@ namespace Avahi
         [DllImport ("avahi-common")]
         private static extern void avahi_string_list_free (IntPtr list);
 
-        [DllImport ("avahi-common")]
-        private static extern int avahi_service_name_join (IntPtr buf, int len, byte[] name, byte[] type,
-                                                           byte[] domain);
-
-        [DllImport ("avahi-common")]
-        private static extern int avahi_service_name_split (byte[] service, IntPtr name, int name_len,
-                                                            IntPtr type, int type_len,
-                                                            IntPtr domain, int domain_len);
-
-        
         [DllImport ("avahi-common")]
         private static extern IntPtr avahi_alternative_service_name (byte[] name);
 
         public event EntryGroupStateHandler StateChanged;
-        
+
         public EntryGroupState State
         {
             get {
@@ -159,7 +147,7 @@ namespace Avahi
                 }
             }
         }
-        
+
         public EntryGroup (Client client)
         {
             this.client = client;
@@ -246,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 ();
             }
@@ -291,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)
         {
@@ -371,58 +363,6 @@ namespace Avahi
             }
         }
 
-        public static string JoinServiceName (string name, string type, string domain)
-        {
-            int len = 4 * (name.Length + type.Length + domain.Length) + 4;
-            IntPtr buf = Stdlib.malloc ((ulong) len);
-
-            int ret = avahi_service_name_join (buf, len,
-                                               Utility.StringToBytes (name),
-                                               Utility.StringToBytes (type),
-                                               Utility.StringToBytes (domain));
-
-            if (ret < 0) {
-                Utility.Free (buf);
-                return null; // FIXME, should throw exception
-            }
-
-            string service = Utility.PtrToString (buf);
-            Utility.Free (buf);
-
-            return service;
-        }
-
-        public static void SplitServiceName (string service, out string name, out string type, out string domain)
-        {
-            int len = 1024;
-
-            IntPtr namePtr = Stdlib.malloc ((ulong) len);
-            IntPtr typePtr = Stdlib.malloc ((ulong) len);
-            IntPtr domainPtr = Stdlib.malloc ((ulong) len);
-            
-            int ret = avahi_service_name_split (Utility.StringToBytes (service), namePtr, len, typePtr, len,
-                                                domainPtr, len);
-
-            if (ret < 0) {
-                Utility.Free (namePtr);
-                Utility.Free (typePtr);
-                Utility.Free (domainPtr);
-                
-                name = null;
-                type = null;
-                domain = null;
-                return;
-            }
-
-            name = Utility.PtrToString (namePtr);
-            type = Utility.PtrToString (typePtr);
-            domain = Utility.PtrToString (domainPtr);
-
-            Utility.Free (namePtr);
-            Utility.Free (typePtr);
-            Utility.Free (domainPtr);
-        }
-
         public static string GetAlternativeServiceName (string name) {
             return Utility.PtrToStringFree (avahi_alternative_service_name (Utility.StringToBytes (name)));
         }