]> git.meshlink.io Git - catta/blobdiff - avahi-sharp/ServiceTypeBrowser.cs
get rid of a lot of old svn cruft
[catta] / avahi-sharp / ServiceTypeBrowser.cs
index 754b9b151066e7769711583a7805e95b9949fd26..e1356d00a4623cf1a2ddae808972273e6bebcafb 100644 (file)
@@ -1,5 +1,3 @@
-/* $Id$ */
-
 /***
   This file is part of avahi.
 
 using System;
 using System.Collections;
 using System.Runtime.InteropServices;
+using System.Text;
 
 namespace Avahi
 {
     internal delegate void ServiceTypeBrowserCallback (IntPtr browser, int iface, Protocol proto, BrowserEvent bevent,
                                                        IntPtr type, IntPtr domain, LookupResultFlags flags,
                                                        IntPtr userdata);
-    
+
     public struct ServiceTypeInfo
     {
         public int NetworkInterface;
@@ -38,8 +37,23 @@ namespace Avahi
         public LookupResultFlags Flags;
     }
 
-    public delegate void ServiceTypeInfoHandler (object o, ServiceTypeInfo info);
-    
+    public class ServiceTypeInfoArgs : EventArgs
+    {
+        private ServiceTypeInfo type;
+
+        public ServiceTypeInfo ServiceType
+        {
+            get { return type; }
+        }
+
+        public ServiceTypeInfoArgs (ServiceTypeInfo type)
+        {
+            this.type = type;
+        }
+    }
+
+    public delegate void ServiceTypeInfoHandler (object o, ServiceTypeInfoArgs args);
+
     public class ServiceTypeBrowser : BrowserBase, IDisposable
     {
         private IntPtr handle;
@@ -53,10 +67,10 @@ namespace Avahi
 
         private ArrayList addListeners = new ArrayList ();
         private ArrayList removeListeners = new ArrayList ();
-        
+
         [DllImport ("avahi-client")]
         private static extern IntPtr avahi_service_type_browser_new (IntPtr client, int iface, int proto,
-                                                                     IntPtr domain, LookupFlags flags,
+                                                                     byte[] domain, LookupFlags flags,
                                                                      ServiceTypeBrowserCallback cb,
                                                                      IntPtr userdata);
 
@@ -74,7 +88,7 @@ namespace Avahi
                 Stop (false);
             }
         }
-        
+
         public event ServiceTypeInfoHandler ServiceTypeRemoved
         {
             add {
@@ -128,10 +142,12 @@ namespace Avahi
                 return;
 
             lock (client) {
-                IntPtr domainPtr = Utility.StringToPtr (domain);
-                handle = avahi_service_type_browser_new (client.Handle, iface, (int) proto, domainPtr, flags,
+                handle = avahi_service_type_browser_new (client.Handle, iface, (int) proto,
+                                                         Utility.StringToBytes (domain), flags,
                                                          cb, IntPtr.Zero);
-                Utility.Free (domainPtr);
+
+                if (handle == IntPtr.Zero)
+                    client.ThrowError ();
             }
         }
 
@@ -159,20 +175,18 @@ namespace Avahi
             info.ServiceType = Utility.PtrToString (type);
             info.Flags = flags;
 
-            infos.Add (info);
-
             switch (bevent) {
             case BrowserEvent.Added:
                 infos.Add (info);
 
                 foreach (ServiceTypeInfoHandler handler in addListeners)
-                    handler (this, info);
+                    handler (this, new ServiceTypeInfoArgs (info));
                 break;
             case BrowserEvent.Removed:
                 infos.Remove (info);
 
                 foreach (ServiceTypeInfoHandler handler in removeListeners)
-                    handler (this, info);
+                    handler (this, new ServiceTypeInfoArgs (info));
                 break;
             default:
                 EmitBrowserEvent (bevent);