public UPnPDeviceDescriptor(DeviceDescriptor deviceDescriptor) { _deviceDescriptor = deviceDescriptor; }
internal ServerDescriptor(DeviceDescriptor serverDeviceDescriptor) { _serverDeviceDescriptor = serverDeviceDescriptor; }
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; } }
protected string BuildDeviceName(DeviceDescriptor descriptor) { return descriptor.FriendlyName + " (" + descriptor.RootDescriptor.SSDPRootEntry.PreferredLink.DescriptionLocation + ")"; }
public ClientDescriptor(DeviceDescriptor clientDeviceDescriptor) { _clientDeviceDescriptor = clientDeviceDescriptor; }
/// <summary> /// Given a <paramref name="deviceDescriptor"/>, this method extracts two kinds of data: /// <list type="bullet"> /// <item><see cref="ServiceDescriptor"/>s for services of the given device and all embedded devices (organized in a dictionary mapping /// device UUIDs to dictionaries mapping service type and version to service descriptors for all services in the device) in /// <paramref name="serviceDescriptors"/></item> /// <item>A collection of all service descriptors which are returned in <paramref name="serviceDescriptors"/> /// in <paramref name="pendingServiceDescriptions"/></item> /// </list> /// </summary> /// <param name="deviceDescriptor">Descriptor of the device to start extracting service descriptors.</param> /// <param name="serviceDescriptors">Dictionary of device UUIDs to dictionaries mapping service type and version to service descriptors of services /// which are contained in the device with the key UUID.</param> /// <param name="pendingServiceDescriptions">Dictionary of device service descriptors mapped to the SCPD url of the /// service.</param> private static void ExtractServiceDescriptorsRecursive(DeviceDescriptor deviceDescriptor, IDictionary<string, IDictionary<string, ServiceDescriptor>> serviceDescriptors, ICollection<ServiceDescriptor> pendingServiceDescriptions) { string deviceUuid = deviceDescriptor.DeviceUUID; ICollection<ServiceDescriptor> services = deviceDescriptor.CreateServiceDescriptors(); if (services.Count > 0) { IDictionary<string, ServiceDescriptor> sds = serviceDescriptors[deviceUuid] = new Dictionary<string, ServiceDescriptor>(); foreach (ServiceDescriptor service in services) { sds.Add(service.ServiceTypeVersion_URN, service); pendingServiceDescriptions.Add(service); } } foreach (DeviceDescriptor childDevice in deviceDescriptor.ChildDevices) ExtractServiceDescriptorsRecursive(childDevice, serviceDescriptors, pendingServiceDescriptions); }
/// <summary> /// Initialise a new instance of the <see cref="TunerDri"/> class. /// </summary> /// <param name="descriptor">The device description. Essentially an XML document describing the device interface.</param> /// <param name="controlPoint">The control point to use to connect to the device.</param> public TunerDri(DeviceDescriptor descriptor, UPnPControlPoint controlPoint) : base(null) { _descriptor = descriptor; _controlPoint = controlPoint; _name = descriptor.FriendlyName; _devicePath = descriptor.DeviceUDN; // unique device name is as good as a device path for a unique identifier _eventSignalLock = new ManualResetEvent(false); _isCetonDevice = _name.Contains("Ceton"); GetPreloadBitAndCardId(); GetSupportsPauseGraph(); }