void service_Resolved(object o, ServiceResolvedEventArgs args) { IResolvableService service = args.Service; service.Resolved -= new ServiceResolvedEventHandler(service_Resolved); DestinationPlatformType fcPlatform = KnownDestinationPlatformType.Other; if (service.TxtRecord != null) { foreach (TxtRecordItem record in service.TxtRecord) { if (record.Key == "platform") { string platform = record.ValueString; fcPlatform = KnownDestinationPlatformType.FromString(platform); break; } } } BonjourEventArgs e = new BonjourEventArgs(fcPlatform); this.OnServiceFound(service, e); }
private static void OnServiceResolved(object o, ServiceResolvedEventArgs args) { IResolvableService service = o as IResolvableService; Console.Write("*** Resolved name = '{0}', port = '{1}', interface = '{2}'", service.FullName, service.Port, service.NetworkInterface); foreach (System.Net.IPAddress j in service.HostEntry.AddressList) { Console.Write("host = '{0}'", j); } ITxtRecord record = service.TxtRecord; int record_count = record != null ? record.Count : 0; if (record_count > 0) { Console.Write(", TXT Record = ["); for (int i = 0, n = record.Count; i < n; i++) { TxtRecordItem item = record.GetItemAt(i); Console.Write("{0} = '{1}'", item.Key, item.ValueString); if (i < n - 1) { Console.Write(", "); } } Console.WriteLine("]"); } else { Console.WriteLine(""); } }
void broadcastService_ServiceRemoved(object sender, ServiceResolvedEventArgs e) { var repos = from r in this.Repos where r.Name == e.Service.Name && r.Host == e.Service.HostEntry.HostName select r; if (repos.Any()) { this.Repos.Remove(repos.First()); } }
private void OnServiceResolved(object o, ServiceResolvedEventArgs args) { IResolvableService service = o as IResolvableService; if (service == null) { return; } Log.DebugFormat("Resolved RAOP service at {0}", service.HostEntry.AddressList[0]); ITxtRecord record = service.TxtRecord; string version = String.Empty; int sample_size = 16, sample_rate = 44100, channels = 2; for (int i = 0, n = record.Count; i < n; i++) { TxtRecordItem item = record.GetItemAt(i); switch (item.Key) { case "vs": version = item.ValueString; break; case "ss": sample_size = Convert.ToInt32(item.ValueString); break; case "sr": sample_rate = Convert.ToInt32(item.ValueString); break; case "ch": channels = Convert.ToInt32(item.ValueString); break; } } lock (speakers) { // TODO: better Name speakers.Add(new RemoteSpeaker(service.HostEntry.HostName, service.HostEntry.AddressList[0], service.Port, version, sample_rate, sample_size, channels)); } EventHandler handler = SpeakersChanged; if (handler != null) { handler(this, EventArgs.Empty); } }
static void ServiceRemoved_Resolved(object o, ServiceResolvedEventArgs args) { if (browser != null) { System.Net.IPAddress[] addresses = args.Service.HostEntry.AddressList; string strUid = args.Service.TxtRecord["uid"].ValueString; int uid = int.Parse(strUid); lock (DiscoveredPeers) { DiscoveredPeers.Remove(uid); } } }
private void OnServiceResolved(object o, ServiceResolvedEventArgs args) { IResolvableService service = o as IResolvableService; lock (locker) { if (services.ContainsKey(service.Name)) { // TODO: When making changes (like name or photo) at runtime becomes possible // this should allow updates to this info return; // we already have it somehow } } ServiceInfo serviceInfo = new ServiceInfo(service.Name, service.HostEntry.AddressList[0], (ushort)service.Port); ITxtRecord record = service.TxtRecord; serviceInfo.UserName = record["User Name"].ValueString; serviceInfo.MachineName = record["Machine Name"].ValueString; serviceInfo.Version = record["Version"].ValueString; serviceInfo.PhotoType = record["PhotoType"].ValueString; serviceInfo.PhotoLocation = record["Photo"].ValueString; Logger.Debug("Setting default photo"); serviceInfo.Photo = Utilities.GetIcon("blankphoto", 48); lock (locker) { services[serviceInfo.Name] = serviceInfo; if (serviceInfo.PhotoType.CompareTo(Preferences.Local) == 0 || serviceInfo.PhotoType.CompareTo(Preferences.Gravatar) == 0 || serviceInfo.PhotoType.CompareTo(Preferences.Uri) == 0) { // Queue the resolution of the photo PhotoService.QueueResolve(serviceInfo); } } if (ServiceAdded != null) { Logger.Debug("About to call ServiceAdded"); ServiceAdded(this, new ServiceArgs(serviceInfo)); Logger.Debug("ServiceAdded was just called"); } else { Logger.Debug("ServiceAdded was null and not called"); } }
private void ServiceResolved(object o, ServiceResolvedEventArgs args) { var ip = args.Service.HostEntry.AddressList[0].ToString(); lock (_lock) { //Dont add ITCan if its already present if (_cans.FirstOrDefault(d => d.Name == args.Service.Name) != null) { return; } _cans.Add(new Can(ip, args.Service.Name)); _subject.OnNext(_cans.ToArray()); } }
private void OnResolved(object o, ServiceResolvedEventArgs args) { if (_instances.All(x => x.Name != args.Service.Name)) { _instances.Add(new ProPresenterInstance { Name = args.Service.Name, Port = ((ushort)args.Service.Port).ToString(), Ip = args.Service.HostEntry.AddressList[0].ToString(), }); OnProPresenterInstancesChanged?.Invoke(this, new ProPresenterInstancesChangedEventArgs { Instances = _instances.ToList() }); } }
void broadcastService_ServiceAdded(object sender, ServiceResolvedEventArgs e) { if (this.isPublished) { return; } var repo = IoC.Get <RepoViewModel>(); repo.Name = e.Service.Name; repo.Port = (ushort)IPAddress.NetworkToHostOrder((short)e.Service.UPort); repo.Host = e.Service.HostEntry.HostName; if (!this.Repos.Where(r => r.Name == repo.Name).Any()) { this.Repos.Add(repo); } }
private void OnServiceResolved(object o, ServiceResolvedEventArgs args) { IResolvableService s = (IResolvableService)args.Service; string name = s.Name; string machine_id = null; bool pwRequired = false; Console.WriteLine("Resolved Service: {0} - {1}:{2} ({3} TXT record entries)", s.FullName, s.HostEntry.AddressList [0], s.Port, s.TxtRecord.Count); if (name.EndsWith("_PW")) { name = name.Substring(0, name.Length - 3); pwRequired = true; } foreach (TxtRecordItem item in s.TxtRecord) { if (item.Key.ToLower() == "password") { pwRequired = item.ValueString.ToLower() == "true"; } else if (item.Key.ToLower() == "machine name") { name = item.ValueString; } else if (item.Key.ToLower() == "machine id") { machine_id = item.ValueString; } } DPAP.Service svc = new DPAP.Service(s.HostEntry.AddressList [0], (ushort)s.Port, name, pwRequired, machine_id); services [svc.Name] = svc; if (Found != null) { Found(this, new ServiceArgs(svc)); } }
private void OnServiceResolved(object o, ServiceResolvedEventArgs args) { string path = ""; IResolvableService service = o as IResolvableService; ITxtRecord record = service.TxtRecord; int record_count = record != null ? record.Count : 0; if (record_count > 0) { for (int i = 0, n = record.Count; i < n; i++) { TxtRecordItem item = record.GetItemAt(i); if (item.Key.CompareTo("path") == 0) { path = item.ValueString; } } } url = "http://" + service.HostEntry.AddressList[0] + ":" + service.Port + "/" + path; register(); }
private static void OnServiceResolved(object o, ServiceResolvedEventArgs args) { var service = o as IResolvableService; Console.Write("*** Resolved name = '{0}', host ip = '{1}', hostname = {2}, port = '{3}', " + "interface = '{4}', address type = '{5}'", service.FullName, // service.HostEntry.AddressList[0], string.Join(", ", service.HostEntry.AddressList.Select(s => s.ToString()).ToArray()), service.HostEntry.HostName, service.Port, service.NetworkInterface, service.AddressProtocol); ITxtRecord record = service.TxtRecord; int record_count = record != null ? record.Count : 0; if (record_count > 0) { Console.Write(", TXT Record = ["); for (int i = 0, n = record.Count; i < n; i++) { TxtRecordItem item = record.GetItemAt(i); Console.Write("{0} = '{1}'", item.Key, item.ValueString); if (i < n - 1) { Console.Write(", "); } } Console.WriteLine("]"); } else { Console.WriteLine(""); } }
private void OnServiceResolved(object o, ServiceResolvedEventArgs args) { string name = args.Service.Name; Log.DebugFormat("Managed to resolve DAAP share {0}.", args.Service.Name); bool password_required = false; // iTunes tacks this on to indicate a passsword protected share. Ugh. if (name.EndsWith("_PW")) { name = name.Substring(0, name.Length - 3); password_required = true; } IResolvableService service = (IResolvableService)args.Service; foreach (TxtRecordItem item in service.TxtRecord) { if (item.Key.ToLower() == "password") { password_required = item.ValueString.ToLower() == "true"; } else if (item.Key.ToLower() == "machine name") { name = item.ValueString; } } IPAddress address = args.Service.HostEntry.AddressList[0]; Log.DebugFormat("OnServiceResolved provided {0}", address); // XXX: Workaround a Mono bug where we can't resolve IPv6 addresses properly if (services.ContainsKey(name) && address.AddressFamily == AddressFamily.InterNetworkV6) { // Only skip this service if it resolves to a IPv6 address, and we already have info // for this service already. Log.Debug("Skipping service", "already have IPv4 address."); return; } else if (!services.ContainsKey(name) && address.AddressFamily == AddressFamily.InterNetworkV6) { // This is the first address we've resolved, however, it's an IPv6 address. // Try and resolve the hostname in hope that it'll end up as an IPv4 address - it doesn't // really matter if it still ends up with an IPv6 address, we're not risking anything. foreach (IPAddress addr in Dns.GetHostEntry(args.Service.HostEntry.HostName).AddressList) { if (addr.AddressFamily == AddressFamily.InterNetwork) { address = addr; } } } Log.DebugFormat("Using address {0}", address); Daap.Service svc = new Daap.Service(address, (ushort)service.Port, name, password_required); if (services.ContainsKey(name)) { services[name] = svc; } else { services.Add(name, svc); } if (Found != null) { Found(this, new ServiceArgs(svc)); } }
void ZcBrowserServiceResolved(object o, ServiceResolvedEventArgs args) { AddFoundServiceFromScResolvedData(args.Service); }