X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-sharp%2FEntryGroup.cs;h=02be643676bebbddcfc8c75e2fa299b090795fe0;hb=17a87e365175dac3682735710522695b7e5a6bdc;hp=2ebecc2afee1b690192531a0a5afd3ce4b8e43d6;hpb=9a589e1f5221d1bd995b6c4fa73e3a074d4c2da4;p=catta diff --git a/avahi-sharp/EntryGroup.cs b/avahi-sharp/EntryGroup.cs index 2ebecc2..02be643 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); @@ -246,11 +236,15 @@ 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); @@ -275,6 +269,26 @@ namespace Avahi } } + UpdateService (iface, proto, flags, name, type, domain, list); + } + + public void UpdateService (int iface, Protocol proto, PublishFlags flags, string name, string type, + string domain, params byte[][] txt) + { + IntPtr list = avahi_string_list_new (IntPtr.Zero); + + if (txt != null) { + foreach (byte[] item in txt) { + list = avahi_string_list_add (list, item); + } + } + + 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) + { lock (client) { int ret = avahi_entry_group_update_service_strlst (handle, iface, proto, flags, Utility.StringToBytes (name), @@ -351,58 +365,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))); }