public ServiceConfig(ServiceDescription desc) { ServiceUuid = desc.Uuid; connected = false; wasConnected = false; LastDetected = Util.GetTime(); }
public void OnServiceRemoved(IDiscoveryProvider provider, ServiceDescription serviceDescription) { Logger.Current.AddMessage(serviceDescription == null ? string.Format("Service removed: {0}", "unknown service") : string.Format("Service removed: {0}", serviceDescription.FriendlyName)); if (serviceDescription != null) { var device = allDevices[serviceDescription.IpAddress]; if (device != null) { device.RemoveServiceWithId(serviceDescription.ServiceId); if (device.Services.Count == 0) { ConnectableDevice dev; allDevices.TryRemove(serviceDescription.IpAddress,out dev); HandleDeviceLoss(device); } else { HandleDeviceUpdate(device); } } } }
public void OnServiceAdded(IDiscoveryProvider provider, ServiceDescription serviceDescription) { Logger.Current.AddMessage(string.Format("Service added: {0}({1})", serviceDescription.FriendlyName, serviceDescription.ServiceId)); var deviceIsNew = !allDevices.ContainsKey(serviceDescription.IpAddress); var device = (from d in allDevices where d.Key == serviceDescription.IpAddress select d.Value).FirstOrDefault(); if (device == null) { device = new ConnectableDevice(serviceDescription) {IpAddress = serviceDescription.IpAddress}; allDevices.TryAdd(serviceDescription.IpAddress, device); deviceIsNew = true; } device.LastDetection = Util.GetTime(); device.LastKnownIpAddress = serviceDescription.IpAddress; // TODO: Implement the currentSSID Property in DiscoveryManager // device.setLastSeenOnWifi(currentSSID); AddServiceDescriptionToDevice(serviceDescription, device); if (device.Services.Count == 0) return; // we get here when a non-LG DLNA TV is found if (deviceIsNew) HandleDeviceAdd(device); else HandleDeviceUpdate(device); }
public bool IsNetcast(ServiceDescription description) { bool isNetcastTv = false; var modelName = description.ModelName; var modelDescription = description.ModelDescription; if (modelName != null && modelName.ToUpper().Equals("LG TV")) { if (modelDescription != null && !(modelDescription.ToUpper().Contains("WEBOS"))) { if (description.ServiceId.Equals(NetcastTvService.Id)) { isNetcastTv = true; } } } return isNetcastTv; }
public void AddServiceDescriptionToDevice(ServiceDescription desc, ConnectableDevice device) { Logger.Current.AddMessage(string.Format("Adding service: {0} to device with address {1} and id {2}", desc.ServiceId, device.IpAddress, device.Id)); var deviceServiceClass = deviceClasses[desc.ServiceId]; if (deviceServiceClass == null) return; if (deviceServiceClass == typeof (DlnaService)) { if (desc.LocationXml == null) return; } else if (deviceServiceClass == typeof (NetcastTvService)) { if (!IsNetcast(desc)) return; } ServiceConfig serviceConfig = null; if (connectableDeviceStore != null) serviceConfig = connectableDeviceStore.GetServiceConfig(desc); if (serviceConfig == null) serviceConfig = new ServiceConfig(desc); serviceConfig.Listener = this; var hasType = false; var hasService = false; foreach (DeviceService service in device.Services) { if (!service.ServiceDescription.ServiceId.Equals(desc.ServiceId)) continue; hasType = true; if (service.ServiceDescription.Uuid.Equals(desc.Uuid)) { hasService = true; } break; } if (hasType) { if (hasService) { device.ServiceDescription = desc; var alreadyAddedService = device.GetServiceByName(desc.ServiceId); if (alreadyAddedService != null) alreadyAddedService.SetServiceDescription(desc); return; } device.RemoveServiceByName(desc.ServiceId); } var deviceService = DeviceService.GetService(deviceServiceClass, desc, serviceConfig); if (deviceService == null) return; deviceService.SetServiceDescription(desc); device.AddService(deviceService); // Type deviceServiceClass; // if (IsNetcast(desc)) // { // deviceServiceClass = typeof(NetcastTvService); // var m = deviceServiceClass.GetRuntimeMethod("discoveryParameters", new Type[] { }); // var result = m.Invoke(null, new object[0]); // if (result == null) // return; // var discoveryParameters = (JsonObject)result; // var serviceId = discoveryParameters.GetNamedString("serviceId"); // if (serviceId.Length == 0) // return; // desc.ServiceId = serviceId; // } // else // { // deviceServiceClass = deviceClasses[desc.ServiceId]; // } // if (deviceServiceClass == null) // return; // if (typeof(DlnaService) == deviceServiceClass) // { // const string netcast = "netcast"; // const string webos = "webos"; // var locNet = desc.LocationXml.IndexOf(netcast, StringComparison.Ordinal); // var locWeb = desc.LocationXml.IndexOf(webos, StringComparison.Ordinal); // if (locNet == -1 && locWeb == -1) // return; // } // var serviceConfig = new ServiceConfig(desc) {Listener = this}; // var hasType = false; // var hasService = false; // foreach (var service in device.GetServices().Where(service => service.ServiceDescription.ServiceId.Equals(desc.ServiceId))) // { // hasType = true; // if (service.ServiceDescription.Uuid.Equals(desc.Uuid)) // { // hasService = true; // } // break; // } // if (hasType) // { // if (hasService) // { // device.SetServiceDescription(desc); // var alreadyAddedService = device.GetServiceByName(desc.ServiceId); // if (alreadyAddedService != null) // alreadyAddedService.ServiceDescription = desc; // return; // } // device.RemoveServiceByName(desc.ServiceId); // } // var deviceService = DeviceService.GetService(deviceServiceClass, desc, serviceConfig); // deviceService.ServiceDescription = desc; // device.AddService(deviceService); //} }
public WebOstvService(ServiceDescription serviceDescription, ServiceConfig serviceConfig) : base(serviceDescription, serviceConfig) { AppToAppIdMappings = new Dictionary<String, String>(); WebAppSessions = new Dictionary<String, WebOsWebAppSession>(); }
public override void SetServiceDescription(ServiceDescription serviceDescription) { base.SetServiceDescription(serviceDescription); if (ServiceDescription.Version == null && ServiceDescription.ResponseHeaders != null) { var serverInfo = serviceDescription.ResponseHeaders["Server"][0]; var systemOs = serverInfo.Split(' ')[0]; var versionComponents = systemOs.Split('/'); var systemVersion = versionComponents[versionComponents.Length - 1]; ServiceDescription.Version = systemVersion; UpdateCapabilities(); } }
private void NotifyListenersOfLostService(ServiceDescription service) { var serviceIds = ServiceIdsForFilter(service.ServiceFilter); foreach (var serviceId in serviceIds) { var newService = service.Clone(); newService.ServiceId = serviceId; foreach (var listener in serviceListeners) { listener.OnServiceRemoved(this, newService); } } }
public ServiceDescription Clone() { var service = new ServiceDescription {Port = Port}; if (ServiceId != null) service.ServiceId = ServiceId; if (IpAddress != null) service.IpAddress = IpAddress; if (Uuid != null) service.Uuid = Uuid; if (Version != null) service.Version = Version; if (FriendlyName != null) service.FriendlyName = FriendlyName; if (Manufacturer != null) service.Manufacturer = Manufacturer; if (ModelName != null) service.ModelName = ModelName; if (ModelNumber != null) service.ModelNumber = ModelNumber; if (ModelDescription != null) service.ModelDescription = ModelDescription; if (ApplicationUrl != null) service.ApplicationUrl = ApplicationUrl; if (LocationXml != null) service.LocationXml = LocationXml; if (ResponseHeaders != null) service.ResponseHeaders = ResponseHeaders; if (ServiceList != null) service.ServiceList = ServiceList; if (ServiceFilter != null) service.ServiceFilter = ServiceFilter; return service; }
public ServiceConfig GetServiceConfig(ServiceDescription serviceDescription) { if (serviceDescription == null) return null; var uuidValue = serviceDescription.Uuid; if (string.IsNullOrEmpty(uuidValue)) return null; var device = GetStoredDevice(uuidValue); if (device != null) { var servicesParam = device.GetNamedObject(ConnectableDevice.KeyServices, null); if (servicesParam != null) { var service = servicesParam.GetNamedObject(uuidValue, null); if (service != null) { var serviceConfigInfo = service.GetNamedObject(DeviceService.KEY_CONFIG); if (serviceConfigInfo != null) return ServiceConfig.GetConfig(serviceConfigInfo); } } } return null; }
public DlnaService(ServiceDescription serviceDescription, ServiceConfig serviceConfig, string controlUrl) : base(serviceDescription, serviceConfig) { this.controlUrl = controlUrl; }
public DlnaService(ServiceDescription serviceDescription, ServiceConfig serviceConfig) : base(serviceDescription, serviceConfig) { UpdateControlUrl(serviceDescription); httpServer = new DlnaHttpServer(); }
private void UpdateControlUrl(ServiceDescription serviceDescriptionParam) { var serviceList = serviceDescriptionParam.ServiceList; if (serviceList == null) return; foreach (Discovery.Provider.ssdp.Service service in serviceList) { if (!service.BaseUrl.EndsWith("/")) { service.BaseUrl += "/"; } if (service.ServiceType.Contains(AV_TRANSPORT)) { avTransportUrl = MakeControlUrl(service.BaseUrl, service.ControlUrl); } else if ((service.ServiceType.Contains(RENDERING_CONTROL)) && !(service.ServiceType.Contains(GROUP_RENDERING_CONTROL))) { renderingControlUrl = MakeControlUrl(service.BaseUrl, service.ControlUrl); } else if ((service.ServiceType.Contains(CONNECTION_MANAGER))) { connectionControlUrl = MakeControlUrl(service.BaseUrl, service.ControlUrl); } } }
public override void SetServiceDescription(ServiceDescription serviceDescriptionParam) { base.SetServiceDescription(serviceDescriptionParam); UpdateControlUrl(serviceDescriptionParam); }
private void NotifyListenersOfNewService(ServiceDescription service) { var serviceIds = ServiceIdsForFilter(service.ServiceFilter); ServiceDescription newService = null; foreach (var serviceId in serviceIds) { var _newService = service.Clone(); _newService.ServiceId = serviceId; //if (newService == null) // newService = _newService; foreach (var listener in serviceListeners) { listener.OnServiceAdded(this, _newService); } } }
public override void SetServiceDescription(ServiceDescription serviceDescription) { base.SetServiceDescription(serviceDescription); if (serviceDescription.Port != 8080) serviceDescription.Port = 8080; }
public NetcastTvService(ServiceDescription serviceDescription, ServiceConfig serviceConfig) : base(serviceDescription, serviceConfig) { dlnaService = new DlnaService(serviceDescription, serviceConfig); if (serviceDescription != null && serviceDescription.Port != 8080) serviceDescription.Port = 8080; applications = new List<AppInfo>(); subscriptions = new List<IServiceSubscription>(); keyboardstring = new StringBuilder(); httpClient = new HttpClient(); inputPickerSession = null; }
private void HandleDatagramPacket(ParsedDatagram pd) { if (pd == null || pd.DataPacket.Length == 0) return; var serviceFilter = pd.Data[pd.PacketType.Equals(SSDP.SlNotify) ? SSDP.Nt : SSDP.St]; if (serviceFilter == null || SSDP.SlMsearch.Equals(pd.PacketType) || !IsSearchingForFilter(serviceFilter)) return; var usnKey = pd.Data[SSDP.Usn]; if (string.IsNullOrEmpty(usnKey)) return; var m = uuidReg.Match(usnKey); if (!m.Success) return; var uuid = m.Value; if (pd.Data.ContainsKey(SSDP.Nts) && SSDP.NtsByebye.Equals(pd.Data[SSDP.Nts])) { var service = foundServices[uuid]; if (service != null) { ServiceDescription fsrv; foundServices.TryRemove(uuid, out fsrv); NotifyListenersOfLostService(service); } } else { var location = pd.Data[SSDP.Location]; if (string.IsNullOrEmpty(location)) return; var foundService = foundServices.ContainsKey(uuid) ? foundServices[uuid] : null; var discoverdService = discoveredServices.ContainsKey(uuid) ? discoveredServices[uuid] : null; var isNew = foundService == null && discoverdService == null; if (isNew) { foundService = new ServiceDescription { Uuid = uuid, ServiceFilter = serviceFilter }; Logger.Current.AddMessage("SSDPDiscoveryProvider reported new service found: id: " + foundService.Uuid); var u = new Uri(location); foundService.IpAddress = u.DnsSafeHost;//pd.dp.IpAddress.getHostAddress(); foundService.Port = 3000; if (!discoveredServices.ContainsKey(uuid)) discoveredServices.TryAdd(uuid, foundService); GetLocationData(location, uuid, serviceFilter); //Logger.Current.AddMessage("SSDPDiscoveryProvider reported new service found: id: " + foundService.ServiceId + " id :" + foundService.Uuid); } if (foundService != null) foundService.LastDetection = DateTime.Now.Ticks; } }