internal static CpService ConnectService(DeviceConnection connection, CpDevice parentDevice, ServiceDescriptor serviceDescriptor, DataTypeResolverDlgt dataTypeResolver) { lock (connection.CPData.SyncObj) { CpService result = new CpService(connection, parentDevice, serviceDescriptor.ServiceType, serviceDescriptor.ServiceTypeVersion, serviceDescriptor.ServiceId); XPathNavigator serviceNav = serviceDescriptor.ServiceDescription.CreateNavigator(); serviceNav.MoveToChild(XPathNodeType.Element); XmlNamespaceManager nsmgr = new XmlNamespaceManager(serviceNav.NameTable); nsmgr.AddNamespace("s", UPnPConsts.NS_SERVICE_DESCRIPTION); XPathNodeIterator svIt = serviceNav.Select("s:serviceStateTable/s:stateVariable", nsmgr); // State variables must be connected first because they are needed from the action's arguments while (svIt.MoveNext()) { result.AddStateVariable(CpStateVariable.ConnectStateVariable(connection, result, svIt.Current, nsmgr, dataTypeResolver)); } XPathNodeIterator acIt = serviceNav.Select("s:actionList/s:action", nsmgr); while (acIt.MoveNext()) { result.AddAction(CpAction.ConnectAction(connection, result, acIt.Current, nsmgr)); } return(result); } }
internal static CpDevice ConnectDevice(DeviceConnection connection, DeviceDescriptor deviceDescriptor, DataTypeResolverDlgt dataTypeResolver) { lock (connection.CPData.SyncObj) { string type; int version; if (!deviceDescriptor.GetTypeAndVersion(out type, out version)) { throw new ArgumentException(string.Format("Invalid device type/version URN '{0}'", deviceDescriptor.TypeVersion_URN)); } CpDevice result = new CpDevice(connection, type, version, deviceDescriptor.DeviceUUID); foreach (DeviceDescriptor childDevice in deviceDescriptor.ChildDevices) { result.AddEmbeddedDevice(ConnectDevice(connection, childDevice, dataTypeResolver)); } IDictionary <string, ServiceDescriptor> serviceDescriptors; if (deviceDescriptor.RootDescriptor.ServiceDescriptors.TryGetValue(deviceDescriptor.DeviceUUID, out serviceDescriptors)) { foreach (ServiceDescriptor serviceDescriptor in serviceDescriptors.Values) { if (serviceDescriptor.State == ServiceDescriptorState.Ready) { result.AddService(CpService.ConnectService(connection, result, serviceDescriptor, dataTypeResolver)); } else { UPnPConfiguration.LOGGER.Warn("CpDevice.ConnectDevice: Unable to connect to service '{0}' (type '{1}', version '{2}') - the service descriptor was not initialized properly", serviceDescriptor.ServiceId, serviceDescriptor.ServiceType, serviceDescriptor.ServiceTypeVersion); } } } return(result); } }
public MuxService(CpDevice device) : base(device, "urn:opencable-com:serviceId:urn:schemas-opencable-com:service:Mux") { _service.Actions.TryGetValue("SetProgram", out _setProgramAction); _service.Actions.TryGetValue("AddPid", out _addPidAction); _service.Actions.TryGetValue("RemovePid", out _removePidAction); }
/// <summary> /// Creates a new UPnP service instance at the client (control point) side. /// </summary> /// <param name="connection">Device connection instance which attends the connection with the server side.</param> /// <param name="parentDevice">Instance of the device which contains the new service.</param> /// <param name="serviceType">Type of the service instance, in the format "schemas-upnp-org:service:[service-type]" or /// "vendor-domain:service:[service-type]". Note that in vendor-defined types, all dots in the vendors domain are /// replaced by hyphens.</param> /// <param name="serviceTypeVersion">Version of the implemented service type.</param> /// <param name="serviceId">Service id in the format "urn:upnp-org:serviceId:[service-id]" (for standard services) or /// "urn:domain-name:serviceId:[service-id]" (for vendor-defined service types).</param> public CpService(DeviceConnection connection, CpDevice parentDevice, string serviceType, int serviceTypeVersion, string serviceId) { _connection = connection; _parentDevice = parentDevice; _serviceType = serviceType; _serviceTypeVersion = serviceTypeVersion; _serviceId = serviceId; }
public FdcService(CpDevice device) : base(device, "urn:opencable-com:serviceId:urn:schemas-opencable-com:service:FDC") { _service.Actions.TryGetValue("GetFDCStatus", out _getFdcStatusAction); _service.Actions.TryGetValue("RequestTables", out _requestTablesAction); _service.Actions.TryGetValue("AddPid", out _addPidAction); _service.Actions.TryGetValue("RemovePid", out _removePidAction); }
public ConnectionManagerService(CpDevice device) : base(device, "urn:upnp-org:serviceId:urn:schemas-upnp-org:service:ConnectionManager") { _service.Actions.TryGetValue("GetProtocolInfo", out _getProtocolInfoAction); _service.Actions.TryGetValue("PrepareForConnection", out _prepareForConnectionAction); _service.Actions.TryGetValue("ConnectionComplete", out _connectionCompleteAction); _service.Actions.TryGetValue("GetCurrentConnectionIDs", out _getCurrentConnectionIdsAction); _service.Actions.TryGetValue("GetCurrentConnectionInfo", out _getCurrentConnectionInfoAction); }
private void Initialise(CpDevice device, string serviceName, bool isOptional) { _device = device; _unqualifiedServiceName = serviceName.Substring(serviceName.LastIndexOf(":")); if (!device.Services.TryGetValue(serviceName, out _service) && !isOptional) { throw new NotImplementedException(string.Format("DRI: device does not implement a {0} service", _unqualifiedServiceName)); } }
public TunerService(CpDevice device) : base(device, "urn:opencable-com:serviceId:urn:schemas-opencable-com:service:Tuner") { _service.Actions.TryGetValue("SetTunerParameters", out _setTunerParametersAction); _service.Actions.TryGetValue("GetTunerParameters", out _getTunerParametersAction); _service.Actions.TryGetValue("SeekSignal", out _seekSignalAction); _service.Actions.TryGetValue("SeekCancel", out _seekCancelAction); }
internal static CpDevice ConnectDevice(DeviceConnection connection, DeviceDescriptor deviceDescriptor, DataTypeResolverDlgt dataTypeResolver) { lock (connection.CPData.SyncObj) { string type; int version; if (!deviceDescriptor.GetTypeAndVersion(out type, out version)) throw new ArgumentException(string.Format("Invalid device type/version URN '{0}'", deviceDescriptor.TypeVersion_URN)); CpDevice result = new CpDevice(connection, type, version, deviceDescriptor.DeviceUUID); foreach (DeviceDescriptor childDevice in deviceDescriptor.ChildDevices) result.AddEmbeddedDevice(ConnectDevice(connection, childDevice, dataTypeResolver)); IDictionary<string, ServiceDescriptor> serviceDescriptors; if (deviceDescriptor.RootDescriptor.ServiceDescriptors.TryGetValue(deviceDescriptor.DeviceUUID, out serviceDescriptors)) foreach (ServiceDescriptor serviceDescriptor in serviceDescriptors.Values) if (serviceDescriptor.State == ServiceDescriptorState.Ready) result.AddService(CpService.ConnectService(connection, result, serviceDescriptor, dataTypeResolver)); else UPnPConfiguration.LOGGER.Warn("CpDevice.ConnectDevice: Unable to connect to service '{0}' (type '{1}', version '{2}') - the service descriptor was not initialized properly", serviceDescriptor.ServiceId, serviceDescriptor.ServiceType, serviceDescriptor.ServiceTypeVersion); return result; } }
/// <summary> /// Adds the specified embedded template <paramref name="device"/>. /// </summary> /// <param name="device">Device to add to the embedded devices.</param> internal void AddEmbeddedDevice(CpDevice device) { _embeddedDevices.Add(device.UUID, device); }
/// <summary> /// Establishes the actual device connection by building the control point's proxy device tree corresponding to the /// device contained in the given <paramref name="rootDescriptor"/> specified by its <paramref name="deviceUUID"/>. /// </summary> /// <param name="rootDescriptor">Root descriptor which contains the device to build.</param> /// <param name="deviceUUID">UUID of the device to connect.</param> /// <param name="dataTypeResolver">Delegate method to resolve extended datatypes.</param> private void BuildDeviceProxy(RootDescriptor rootDescriptor, string deviceUUID, DataTypeResolverDlgt dataTypeResolver) { if (rootDescriptor.State != RootDescriptorState.Ready) throw new ArgumentException("Root descriptor is not ready - cannot connect"); DeviceDescriptor rootDeviceDescriptor = DeviceDescriptor.CreateRootDeviceDescriptor(rootDescriptor); DeviceDescriptor deviceDescriptor = rootDeviceDescriptor.FindDevice(deviceUUID); _device = CpDevice.ConnectDevice(this, deviceDescriptor, dataTypeResolver); }
public BaseService(CpDevice device, string serviceName, bool isOptional) { Initialise(device, serviceName, isOptional); }
public SecurityService(CpDevice device) : base(device, "urn:opencable-com:serviceId:urn:schemas-opencable-com:service:Security") { _service.Actions.TryGetValue("SetDRM", out _setDrmAction); }
public AvTransportService(CpDevice device) : base(device, "urn:upnp-org:serviceId:urn:schemas-upnp-org:service:AVTransport") { _service.Actions.TryGetValue("SetAVTransportURI", out _setAvTransportUriAction); _service.Actions.TryGetValue("SetNextAVTransportURI", out _setNextAvTransportUriAction); _service.Actions.TryGetValue("GetMediaInfo", out _getMediaInfoAction); _service.Actions.TryGetValue("GetTransportInfo", out _getTransportInfoAction); _service.Actions.TryGetValue("GetPositionInfo", out _getPositionInfoAction); _service.Actions.TryGetValue("GetDeviceCapabilities", out _getDeviceCapabilitiesAction); _service.Actions.TryGetValue("GetTransportSettings", out _getTransportSettingsAction); _service.Actions.TryGetValue("Stop", out _stopAction); _service.Actions.TryGetValue("Play", out _playAction); _service.Actions.TryGetValue("Pause", out _pauseAction); _service.Actions.TryGetValue("Record", out _recordAction); _service.Actions.TryGetValue("Seek", out _seekAction); _service.Actions.TryGetValue("Next", out _nextAction); _service.Actions.TryGetValue("Previous", out _previousAction); _service.Actions.TryGetValue("SetPlayMode", out _setPlayModeAction); _service.Actions.TryGetValue("SetRecordQualityMode", out _setRecordQualityModeAction); _service.Actions.TryGetValue("GetCurrentTransportActions", out _getCurrentTransportActionsAction); }
public CasService(CpDevice device) : base(device, "urn:opencable-com:serviceId:urn:schemas-opencable-com:service:CAS") { _service.Actions.TryGetValue("GetCardStatus", out _getCardStatusAction); _service.Actions.TryGetValue("GetEntitlement", out _getEntitlementAction); _service.Actions.TryGetValue("NotifyMmiClose", out _notifyMmiCloseAction); _service.Actions.TryGetValue("SetChannel", out _setChannelAction); _service.Actions.TryGetValue("SetPreferredLanguage", out _setPreferredLanguageAction); }
public AuxService(CpDevice device) : base(device, "urn:opencable-com:serviceId:urn:schemas-opencable-com:service:Aux", true) { if (_service != null) { _service.Actions.TryGetValue("GetAuxCapabilities", out _getAuxCapabilitiesAction); _service.Actions.TryGetValue("SetAuxParameters", out _setAuxParametersAction); } }
public DiagService(CpDevice device) : base(device, "urn:opencable-com:serviceId:urn:schemas-opencable-com:service:Diag") { _service.Actions.TryGetValue("GetParameter", out _getParameterAction); }
public EncoderService(CpDevice device) : base(device, "urn:opencable-com:serviceId:urn:schemas-opencable-com:service:Encoder") { _service.Actions.TryGetValue("GetEncoderCapabilities", out _getEncoderCapabilitiesAction); _service.Actions.TryGetValue("SetEncoderParameters", out _setEncoderParametersAction); _service.Actions.TryGetValue("GetEncoderParameters", out _getEncoderParametersAction); }
internal static CpService ConnectService(DeviceConnection connection, CpDevice parentDevice, ServiceDescriptor serviceDescriptor, DataTypeResolverDlgt dataTypeResolver) { lock (connection.CPData.SyncObj) { CpService result = new CpService(connection, parentDevice, serviceDescriptor.ServiceType, serviceDescriptor.ServiceTypeVersion, serviceDescriptor.ServiceId); XPathNavigator serviceNav = serviceDescriptor.ServiceDescription.CreateNavigator(); serviceNav.MoveToChild(XPathNodeType.Element); XmlNamespaceManager nsmgr = new XmlNamespaceManager(serviceNav.NameTable); nsmgr.AddNamespace("s", UPnPConsts.NS_SERVICE_DESCRIPTION); XPathNodeIterator svIt = serviceNav.Select("s:serviceStateTable/s:stateVariable", nsmgr); // State variables must be connected first because they are needed from the action's arguments while (svIt.MoveNext()) result.AddStateVariable(CpStateVariable.ConnectStateVariable(connection, result, svIt.Current, nsmgr, dataTypeResolver)); XPathNodeIterator acIt = serviceNav.Select("s:actionList/s:action", nsmgr); while (acIt.MoveNext()) result.AddAction(CpAction.ConnectAction(connection, result, acIt.Current, nsmgr)); return result; } }
public BaseService(CpDevice device, string serviceName) { Initialise(device, serviceName, false); }