X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-sharp%2FClient.cs;h=5734f019903743b1fda1dc6f012dcde40338eaba;hb=9aa4773acbfadbcf95aaf0063510f8be8ddcbd86;hp=d9466bcb95edd63d32c169d4a5841fcf853d9c44;hpb=cc272cf44768c9292879a9ee43783fec4b510ffd;p=catta diff --git a/avahi-sharp/Client.cs b/avahi-sharp/Client.cs index d9466bc..5734f01 100644 --- a/avahi-sharp/Client.cs +++ b/avahi-sharp/Client.cs @@ -29,12 +29,15 @@ namespace Avahi { internal enum ResolverEvent { Found, - Timeout + Failure } internal enum BrowserEvent { Added, - Removed + Removed, + CacheExhausted, + AllForNow, + Failure } internal delegate int PollCallback (IntPtr ufds, uint nfds, int timeout); @@ -47,30 +50,37 @@ namespace Avahi IPv4 = 0, IPv6 = 1 } - - public enum ClientState { + + internal enum ServerState { Invalid, Registering, Running, - Collision, + Collision + } + + public enum ClientState { + Registering = ServerState.Registering, + Running = ServerState.Running, + Collision = ServerState.Collision, Disconnected = 100 } [Flags] public enum LookupFlags { - None, - UseWideArea, - UseMulticast, - NoTxt, - NoAddress + None = 0, + UseWideArea = 1, + UseMulticast = 4, + NoAddress = 8 } [Flags] public enum LookupResultFlags { - None, - Cached, - WideArea, - Multicast + None = 0, + Cached = 1, + WideArea = 2, + Multicast = 4, + Local = 8, + OurOwn = 16, } public class Client : IDisposable @@ -117,7 +127,7 @@ namespace Avahi private static extern void avahi_simple_poll_free (IntPtr spoll); [DllImport ("avahi-common")] - private static extern int avahi_simple_poll_iterate (IntPtr spoll, int timeout); + private static extern int avahi_simple_poll_loop (IntPtr spoll); [DllImport ("avahi-common")] private static extern void avahi_simple_poll_set_func (IntPtr spoll, PollCallback cb); @@ -128,10 +138,6 @@ namespace Avahi [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); @@ -197,11 +203,11 @@ namespace Avahi } } - internal int LastError + internal ErrorCode LastError { get { lock (this) { - return avahi_client_errno (handle); + return (ErrorCode) avahi_client_errno (handle); } } } @@ -232,44 +238,19 @@ namespace Avahi public void Dispose () { - lock (this) { - if (handle != IntPtr.Zero) { - thread.Abort (); - - avahi_client_free (handle); - avahi_simple_poll_quit (spoll); - avahi_simple_poll_free (spoll); - handle = IntPtr.Zero; - } + if (handle != IntPtr.Zero) { + avahi_client_free (handle); + avahi_simple_poll_quit (spoll); + avahi_simple_poll_free (spoll); + handle = IntPtr.Zero; } } - public bool IsServiceLocal (ServiceInfo service) + internal void ThrowError () { - 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); + ErrorCode error = LastError; - Utility.Free (namePtr); - Utility.Free (typePtr); - Utility.Free (domainPtr); - - return result == 1; - } - - internal void CheckError () - { - int error = LastError; - - if (error != 0) + if (error != ErrorCode.Ok) throw new ClientException (error); } @@ -289,12 +270,8 @@ namespace Avahi private void PollLoop () { try { lock (this) { - while (true) { - if (avahi_simple_poll_iterate (spoll, -1) != 0) - break; - } + avahi_simple_poll_loop (spoll); } - } catch (ThreadAbortException e) { } catch (Exception e) { Console.Error.WriteLine ("Error in avahi-sharp event loop: " + e); }