Avahi.ServiceResolver.OnServiceResolverCallback C# (CSharp) Method

OnServiceResolverCallback() private method

private OnServiceResolverCallback ( IntPtr resolver, int iface, Protocol proto, ResolverEvent revent, IntPtr name, IntPtr type, IntPtr domain, IntPtr host, IntPtr address, UInt16 port, IntPtr txt, LookupResultFlags flags, IntPtr userdata ) : void
resolver System.IntPtr
iface int
proto Protocol
revent ResolverEvent
name System.IntPtr
type System.IntPtr
domain System.IntPtr
host System.IntPtr
address System.IntPtr
port System.UInt16
txt System.IntPtr
flags LookupResultFlags
userdata System.IntPtr
return void
        private void OnServiceResolverCallback(IntPtr resolver, int iface, Protocol proto,
                                                ResolverEvent revent, IntPtr name, IntPtr type,
                                                IntPtr domain, IntPtr host, IntPtr address,
                                                UInt16 port, IntPtr txt, LookupResultFlags flags,
                                                IntPtr userdata)
        {
            ServiceInfo info;
            info.NetworkInterface = iface;
            info.Protocol = proto;
            info.Domain = Utility.PtrToString (domain);
            info.ServiceType = Utility.PtrToString (type);
            info.Name = Utility.PtrToString (name);
            info.HostName = Utility.PtrToString (host);
            info.Address = Utility.PtrToAddress (address);
            info.Port = port;

            ArrayList txtlist = new ArrayList ();
            for (IntPtr l = txt; l != IntPtr.Zero; l = avahi_string_list_get_next (l)) {
                IntPtr buf = avahi_string_list_get_text (l);
                int len = avahi_string_list_get_size (l);

                byte[] txtbuf = new byte[len];
                Marshal.Copy (buf, txtbuf, 0, len);
                txtlist.Add (txtbuf);
            }

            info.Text = (byte[][]) txtlist.ToArray (typeof (byte[]));
            info.Flags = flags;

            switch (revent) {
            case ResolverEvent.Found:
                currentInfo = info;

                foreach (ServiceInfoHandler handler in foundListeners)
                    handler (this, new ServiceInfoArgs (info));
                break;
            case ResolverEvent.Failure:
                EmitFailure (client.LastError);
                break;
            }
        }