- 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);
- }
-