]> git.meshlink.io Git - catta/blobdiff - avahi-sharp/Client.cs
add some missing events to the resolver classes, and make them
[catta] / avahi-sharp / Client.cs
index 783c00342f6fdd6b6f29783b8a08c3ce255b4ebb..e148ff30ba8f379e04b76a00ec49614d097b34ec 100644 (file)
@@ -29,12 +29,18 @@ namespace Avahi
 {
     internal enum ResolverEvent {
         Found,
-        Timeout
+        Timeout,
+        NotFound,
+        Failure
     }
     
     internal enum BrowserEvent {
         Added,
-        Removed
+        Removed,
+        CacheExhausted,
+        AllForNow,
+        NotFound,
+        Failure
     }
 
     internal delegate int PollCallback (IntPtr ufds, uint nfds, int timeout);
@@ -55,6 +61,23 @@ namespace Avahi
         Collision,
         Disconnected = 100
     }
+
+    [Flags]
+    public enum LookupFlags {
+        None = 0,
+        UseWideArea = 1,
+        UseMulticast = 2,
+        NoTxt = 4,
+        NoAddress = 8
+    }
+
+    [Flags]
+    public enum LookupResultFlags {
+        None = 0,
+        Cached = 1,
+        WideArea = 2,
+        Multicast = 4
+    }
     
     public class Client : IDisposable
     {
@@ -108,6 +131,14 @@ namespace Avahi
         [DllImport ("avahi-common")]
         private static extern void avahi_simple_poll_quit (IntPtr spoll);
 
+        [DllImport ("avahi-client")]
+        private static extern uint avahi_client_get_local_service_cookie (IntPtr client);
+
+        [DllImport ("avahi-client")]
+        private static extern int avahi_client_is_service_local (IntPtr client, int iface, Protocol proto,
+                                                                 IntPtr name, IntPtr type, IntPtr domain);
+
+
         [DllImport ("libc")]
         private static extern int poll(IntPtr ufds, uint nfds, int timeout);
 
@@ -163,6 +194,15 @@ namespace Avahi
             }
         }
 
+        public uint LocalServiceCookie
+        {
+            get {
+                lock (this) {
+                    return avahi_client_get_local_service_cookie (handle);
+                }
+            }
+        }
+
         internal int LastError
         {
             get {
@@ -210,6 +250,27 @@ namespace Avahi
             }
         }
 
+        public bool IsServiceLocal (ServiceInfo service)
+        {
+            return IsServiceLocal (service.NetworkInterface, service.Protocol, service.Name,
+                                   service.ServiceType, service.Domain);
+        }
+
+        public bool IsServiceLocal (int iface, Protocol proto, string name, string type, string domain)
+        {
+            IntPtr namePtr = Utility.StringToPtr (name);
+            IntPtr typePtr = Utility.StringToPtr (type);
+            IntPtr domainPtr = Utility.StringToPtr (domain);
+            
+            int result = avahi_client_is_service_local (handle, iface, proto, namePtr, typePtr, domainPtr);
+
+            Utility.Free (namePtr);
+            Utility.Free (typePtr);
+            Utility.Free (domainPtr);
+
+            return result == 1;
+        }
+
         internal void CheckError ()
         {
             int error = LastError;