From: James Willcox Date: Sun, 20 Nov 2005 17:37:32 +0000 (+0000) Subject: move JoinServiceName and SplitServiceName to the Client class X-Git-Url: https://git.meshlink.io/?a=commitdiff_plain;h=69d2b9fee695cf2e65f1eda9c8ce66085efe2856;p=catta move JoinServiceName and SplitServiceName to the Client class git-svn-id: file:///home/lennart/svn/public/avahi/trunk@1021 941a03a8-eaeb-0310-b9a0-b1bbd8fe43fe --- diff --git a/avahi-sharp/AvahiTest.cs b/avahi-sharp/AvahiTest.cs index 99cd6e2..07b5396 100644 --- a/avahi-sharp/AvahiTest.cs +++ b/avahi-sharp/AvahiTest.cs @@ -32,7 +32,7 @@ public class AvahiTest { public static void Main () { client = new Client (); - Console.WriteLine ("joined service name: " + EntryGroup.JoinServiceName ("FooBar", "_foo", "local")); + Console.WriteLine ("joined service name: " + Client.JoinServiceName ("FooBar", "_foo", "local")); EntryGroup eg = new EntryGroup (client); eg.StateChanged += OnEntryGroupChanged; diff --git a/avahi-sharp/Client.cs b/avahi-sharp/Client.cs index 01b08bd..80349dd 100644 --- a/avahi-sharp/Client.cs +++ b/avahi-sharp/Client.cs @@ -24,6 +24,7 @@ using System; using System.Threading; using System.Collections; using System.Runtime.InteropServices; +using Mono.Unix; namespace Avahi { @@ -161,6 +162,15 @@ namespace Avahi [DllImport ("avahi-client")] private static extern uint avahi_client_get_local_service_cookie (IntPtr client); + [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 ("libc")] private static extern int poll(IntPtr ufds, uint nfds, int timeout); @@ -272,6 +282,58 @@ 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); + } + internal void ThrowError () { ErrorCode error = LastError; diff --git a/avahi-sharp/EntryGroup.cs b/avahi-sharp/EntryGroup.cs index ccdeec9..ab89544 100644 --- a/avahi-sharp/EntryGroup.cs +++ b/avahi-sharp/EntryGroup.cs @@ -127,16 +127,6 @@ 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); @@ -371,58 +361,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))); }