public SampleDevice() { device = UPnPDevice.CreateRootDevice(1800,1.0,"\\"); device.FriendlyName = "Media Server (CASPER-LAPTOP)"; device.Manufacturer = "OpenSource"; device.ManufacturerURL = ""; device.ModelName = "Media Server"; device.ModelDescription = "Provides content through UPnP ContentDirectory service"; device.ModelNumber = "0.765"; device.HasPresentation = false; device.DeviceURN = "urn:schemas-upnp-org:device:MediaServer:1"; DvConnectionManager ConnectionManager = new DvConnectionManager(); ConnectionManager.External_GetCurrentConnectionIDs = ConnectionManager_GetCurrentConnectionIDs; ConnectionManager.External_GetCurrentConnectionInfo = ConnectionManager_GetCurrentConnectionInfo; //ConnectionManager.External_GetProtocolInfo = ConnectionManager_GetProtocolInfo; device.AddService(ConnectionManager); DvContentDirectory ContentDirectory = new DvContentDirectory(); ContentDirectory.External_Browse = new OpenSource.DeviceBuilder.DvContentDirectory.Delegate_Browse(ContentDirectory_Browse); ContentDirectory.External_CreateObject = new OpenSource.DeviceBuilder.DvContentDirectory.Delegate_CreateObject(ContentDirectory_CreateObject); ContentDirectory.External_CreateReference = new OpenSource.DeviceBuilder.DvContentDirectory.Delegate_CreateReference(ContentDirectory_CreateReference); ContentDirectory.External_DeleteResource = new OpenSource.DeviceBuilder.DvContentDirectory.Delegate_DeleteResource(ContentDirectory_DeleteResource); ContentDirectory.External_DestroyObject = new OpenSource.DeviceBuilder.DvContentDirectory.Delegate_DestroyObject(ContentDirectory_DestroyObject); ContentDirectory.External_ExportResource = new OpenSource.DeviceBuilder.DvContentDirectory.Delegate_ExportResource(ContentDirectory_ExportResource); ContentDirectory.External_GetSearchCapabilities = new OpenSource.DeviceBuilder.DvContentDirectory.Delegate_GetSearchCapabilities(ContentDirectory_GetSearchCapabilities); ContentDirectory.External_GetSortCapabilities = new OpenSource.DeviceBuilder.DvContentDirectory.Delegate_GetSortCapabilities(ContentDirectory_GetSortCapabilities); ContentDirectory.External_GetSystemUpdateID = new OpenSource.DeviceBuilder.DvContentDirectory.Delegate_GetSystemUpdateID(ContentDirectory_GetSystemUpdateID); ContentDirectory.External_GetTransferProgress = new OpenSource.DeviceBuilder.DvContentDirectory.Delegate_GetTransferProgress(ContentDirectory_GetTransferProgress); ContentDirectory.External_ImportResource = new OpenSource.DeviceBuilder.DvContentDirectory.Delegate_ImportResource(ContentDirectory_ImportResource); ContentDirectory.External_Search = new OpenSource.DeviceBuilder.DvContentDirectory.Delegate_Search(ContentDirectory_Search); ContentDirectory.External_StopTransferResource = new OpenSource.DeviceBuilder.DvContentDirectory.Delegate_StopTransferResource(ContentDirectory_StopTransferResource); ContentDirectory.External_UpdateObject = new OpenSource.DeviceBuilder.DvContentDirectory.Delegate_UpdateObject(ContentDirectory_UpdateObject); device.AddService(ContentDirectory); // Setting the initial value of evented variables ConnectionManager.Evented_SourceProtocolInfo = "Sample String"; ConnectionManager.Evented_SinkProtocolInfo = "Sample String"; ConnectionManager.Evented_CurrentConnectionIDs = "Sample String"; ContentDirectory.Evented_ContainerUpdateIDs = "Sample String"; ContentDirectory.Evented_SystemUpdateID = 0; ContentDirectory.Evented_TransferIDs = "Sample String"; }
public Gatekeeper(int PortNumber) { A_ICB = new UPnPService.UPnPServiceInvokeHandler(A_InvokeSink); A_IECB = new UPnPService.UPnPServiceInvokeErrorHandler(A_InvokeErrorSink); Port = PortNumber; Root = UPnPDevice.CreateRootDevice(1000,1,""); Root.FriendlyName = "UPnPShare"; Root.StandardDeviceType = "UPnPGateKeeper"; DV = new DvGateKeeper(); Root.AddService(DV); DV.External_Register = new DvGateKeeper.Delegate_Register(RegisterSink); DV.External_UnRegister = new DvGateKeeper.Delegate_UnRegister(UnRegisterSink); DV.External_GetDocument = new DvGateKeeper.Delegate_GetDocument(GetDocumentSink); DV.External_AddDevice = new DvGateKeeper.Delegate_AddDevice(AddDeviceSink); DV.External_RemoveDevice = new DvGateKeeper.Delegate_RemoveDevice(RemovedDeviceSink); DV.External_FireEvent = new DvGateKeeper.Delegate_FireEvent(FireEventSink); DV.External_GetStateTable = new DvGateKeeper.Delegate_GetStateTable(GetStateTableSink); DV.External_Invoke = new DvGateKeeper.Delegate_Invoke(InvokeSink); DV.External_InvokeAsync = new DvGateKeeper.Delegate_InvokeAsync(InvokeAsyncSink); DV.External_InvokeAsyncResponse = new DvGateKeeper.Delegate_InvokeAsyncResponse(InvokeAsyncResponseSink); (new UPnPDebugObject(Root)).SetField("NoSSDP",true); Root.StartDevice(PortNumber); }
public UPnPDeviceHostServiceProxy(Assembly assembly) { this.Name = Environment.MachineName + ":" + assembly.FullName.Split(',').First(); this.Namespace = assembly.FullName; var regex = new Regex("Version=(.\\..)"); var version = regex.Match(this.Namespace).Groups[1].Value; this.Version = double.Parse(version); _device = UPnPDevice.CreateRootDevice(int.MaxValue, this.Version, "\\"); _device.FriendlyName = this.Name; _device.DeviceURN = this.Namespace; _device.HasPresentation = false; var types = (from type in assembly.GetTypes() let ifs = type.GetInterfaces().Where(t => t.GetCustomAttributes<ServiceContractAttribute>().Count() > 0).First() select new { Type = type, Interface = ifs }).ToList(); List<IUPnPService> services = new List<IUPnPService>(); foreach (var tc in types) { var service = new UPnPServiceProxy(tc.Type, tc.Interface); services.Add(service); _device.AddService(service); } this.Services = services.ToList(); _device = this.GetUPnPDevice(); }
public SinkDevice() { //Creates root device device = UPnPDevice.CreateRootDevice(1800, 1.0 , "\\"); //Device information: device.FriendlyName = "Caspers homemade Renderer"; device.Manufacturer = "Awesome Casper"; device.DeviceURN = "urn:schemas-upnp-org:device:MediaRenderer:1"; //Create stacks DvAVTransport AVTransport = new DvAVTransport(); DvConnectionManager connectionManager = new DvConnectionManager(); DvRenderingControl renderingControl = new DvRenderingControl(); //Add stacks to device (and network visibility) device.AddService(AVTransport); device.AddService(connectionManager); device.AddService(renderingControl); AVTransport.Evented_LastChange = "Sample string"; }
public UPnPRelayDevice(UPnPDevice device, CpGateKeeper _CP) { OpenSource.Utilities.InstanceTracker.Add(this); ILCB = new InvokeResponseHandler(InvokeResponseSink); CP = _CP; ProxyDevice = UPnPDevice.CreateRootDevice(750, double.Parse(device.Version), ""); ProxyDevice.UniqueDeviceName = Guid.NewGuid().ToString(); ProxyDevice.HasPresentation = false; ProxyDevice.FriendlyName = "*" + device.FriendlyName; ProxyDevice.Manufacturer = device.Manufacturer; ProxyDevice.ManufacturerURL = device.ManufacturerURL; ProxyDevice.ModelName = device.ModelName; ProxyDevice.DeviceURN = device.DeviceURN; foreach (UPnPService S in device.Services) { UPnPService S2 = (UPnPService)S.Clone(); foreach (UPnPAction A in S2.Actions) { A.ParentService = S2; A.SpecialCase += new UPnPAction.SpecialInvokeCase(InvokeSink); } UPnPDebugObject dbg = new UPnPDebugObject(S2); dbg.SetField("SCPDURL", "_" + S2.ServiceID + "_scpd.xml"); dbg.SetProperty("ControlURL", "_" + S2.ServiceID + "_control"); dbg.SetProperty("EventURL", "_" + S2.ServiceID + "_event"); ProxyDevice.AddService(S2); } UDNTable[device.UniqueDeviceName] = ProxyDevice; ReverseUDNTable[ProxyDevice.UniqueDeviceName] = device.UniqueDeviceName; foreach (UPnPDevice _ed in device.EmbeddedDevices) { ProcessDevice(_ed); } }
public SampleDevice() { device = UPnPDevice.CreateRootDevice(1800, 1.0, "\\"); device.FriendlyName = "Aquarium"; device.Manufacturer = "Aquarium"; device.ManufacturerURL = "http://polytech.unice.fr"; device.ModelName = "Aquarium"; device.ModelDescription = "Aquarium"; device.ModelNumber = "AQUA1"; device.HasPresentation = false; device.DeviceURN = "urn:schemas-upnp-org:device:Aquarium:1"; Aquarium.DvaquariumService aquariumService = new Aquarium.DvaquariumService(); aquariumService.External_getBrightness = new Aquarium.DvaquariumService.Delegate_getBrightness(aquariumService_getBrightness); aquariumService.External_getTemperature = new Aquarium.DvaquariumService.Delegate_getTemperature(aquariumService_getTemperature); aquariumService.External_setBrightness = new Aquarium.DvaquariumService.Delegate_setBrightness(aquariumService_setBrightness); aquariumService.External_setTemperature = new Aquarium.DvaquariumService.Delegate_setTemperature(aquariumService_setTemperature); device.AddService(aquariumService); // Setting the initial value of evented variables aquariumService.Evented_brightness = 0; aquariumService.Evented_temperature = 0; }
private void startMenuItem_Click(object sender, System.EventArgs e) { startMenuItem.Enabled = false; foreach (MenuItem i in pfcMenuItem.MenuItems) {i.Enabled = false;} foreach (MenuItem i in menuItem3.MenuItems) {i.Enabled = false;} InfoStringBox.Enabled = false; device = UPnPDevice.CreateRootDevice(900,1,""); device.UniqueDeviceName = Guid.NewGuid().ToString(); device.StandardDeviceType = "MediaRenderer"; device.FriendlyName = "Media Renderer (" + System.Net.Dns.GetHostName() + ")"; device.HasPresentation = false; device.Manufacturer = "OpenSource"; device.ManufacturerURL = "http://opentools.homeip.net/"; device.PresentationURL = "/"; device.HasPresentation = true; device.ModelName = "AV Renderer"; device.ModelDescription = "Media Renderer Device"; device.ModelURL = new Uri("http://opentools.homeip.net/"); UPnPService ts = new UPnPService(1, "EmptyService", "EmptyService", true, this); ts.AddMethod("NullMethod"); //device.AddService(ts); DText p = new DText(); p.ATTRMARK = "\r\n"; p[0] = this.InfoStringBox.Text; int len = p.DCOUNT(); ProtocolInfoString[] istring = new ProtocolInfoString[len]; for(int i=1;i<=len;++i) { istring[i-1] = new ProtocolInfoString(p[i]); } r = new AVRenderer(MaxConnections, istring, new AVRenderer.ConnectionHandler(NewConnectionSink)); r.OnClosedConnection += new AVRenderer.ConnectionHandler(ClosedConnectionSink); if (supportRecordMenuItem.Checked == false) { r.AVT.RemoveAction_Record(); } if (supportRecordQualityMenuItem.Checked == false) { r.AVT.RemoveAction_SetRecordQualityMode(); } if (supportNextContentUriMenuItem.Checked == false) { r.AVT.RemoveAction_SetNextAVTransportURI(); } if (MaxConnections == 0) { r.Manager.RemoveAction_PrepareForConnection(); r.Manager.RemoveAction_ConnectionComplete(); } r.AVT.GetUPnPService().GetStateVariableObject("CurrentPlayMode").AllowedStringValues = new String[3]{"NORMAL","REPEAT_ALL","INTRO"}; r.Control.GetUPnPService().GetStateVariableObject("A_ARG_TYPE_Channel").AllowedStringValues = new String[3]{"Master","LF","RF"}; r.Control.GetUPnPService().GetStateVariableObject("RedVideoBlackLevel").SetRange((ushort)0,(ushort)100,(ushort)1); r.Control.GetUPnPService().GetStateVariableObject("GreenVideoBlackLevel").SetRange((ushort)0,(ushort)100,(ushort)1); r.Control.GetUPnPService().GetStateVariableObject("BlueVideoBlackLevel").SetRange((ushort)0,(ushort)100,(ushort)1); r.Control.GetUPnPService().GetStateVariableObject("RedVideoGain").SetRange((ushort)0,(ushort)100,(ushort)1); r.Control.GetUPnPService().GetStateVariableObject("GreenVideoGain").SetRange((ushort)0,(ushort)100,(ushort)1); r.Control.GetUPnPService().GetStateVariableObject("BlueVideoGain").SetRange((ushort)0,(ushort)100,(ushort)1); r.Control.GetUPnPService().GetStateVariableObject("Brightness").SetRange((ushort)0,(ushort)100,(ushort)1); r.Control.GetUPnPService().GetStateVariableObject("Contrast").SetRange((ushort)0,(ushort)100,(ushort)1); r.Control.GetUPnPService().GetStateVariableObject("Sharpness").SetRange((ushort)0,(ushort)100,(ushort)1); r.Control.GetUPnPService().GetStateVariableObject("Volume").SetRange((UInt16)0,(UInt16)100,(ushort)1); device.AddService(r.Control); device.AddService(r.AVT); device.AddService(r.Manager); //device.AddDevice(r); device.StartDevice(); //r.Start(); }
public AVRenderer(int MaxConnections, ProtocolInfoString[] Info, ConnectionHandler h) { ConnectionMax = MaxConnections; OnNewConnection += h; InfoStrings = Info; device = UPnPDevice.CreateEmbeddedDevice(1,Guid.NewGuid().ToString()); device.FriendlyName = "AVRenderer Device (" + Dns.GetHostName() +")"; AVT = new DvAVTransport(); AVT.GetUPnPService().Major = 1; AVT.GetUPnPService().Minor = 0; Manager = new DvConnectionManager(); Manager.GetUPnPService().Major = 1; Manager.GetUPnPService().Minor = 0; Control = new DvRenderingControl(); Control.GetUPnPService().Major = 1; Control.GetUPnPService().Minor = 0; Manager.External_PrepareForConnection = new DvConnectionManager.Delegate_PrepareForConnection(PrepareForConnectionSink); Manager.External_ConnectionComplete = new DvConnectionManager.Delegate_ConnectionComplete(ConnectionCompleteSink); Manager.External_GetCurrentConnectionIDs = new DvConnectionManager.Delegate_GetCurrentConnectionIDs(GetCurrentConnectionIDsSink); Manager.External_GetProtocolInfo = new DvConnectionManager.Delegate_GetProtocolInfo(GetProtocolInfoSink); Manager.External_GetCurrentConnectionInfo = new DvConnectionManager.Delegate_GetCurrentConnectionInfo(GetCurrentConnectionInfoSink); Manager.Evented_CurrentConnectionIDs = ""; //Manager.Evented_PhysicalConnections = ""; string Sink = ""; foreach(ProtocolInfoString s in InfoStrings) { if(Sink=="") { Sink = s.ToString(); } else { Sink = Sink + "," + s.ToString(); } } Manager.Evented_SinkProtocolInfo = Sink; Manager.Evented_SourceProtocolInfo = ""; AVT.Accumulator_LastChange = new InstanceID_LastChangeAccumulator("AVT"); AVT.ModerationDuration_LastChange = 0.5; AVT.Evented_LastChange = "<Event xmlns = "urn:schemas-upnp-org:metadata-1-0/AVT/"/>"; AVT.External_GetMediaInfo = new DvAVTransport.Delegate_GetMediaInfo(GetMediaInfoSink); AVT.External_GetPositionInfo = new DvAVTransport.Delegate_GetPositionInfo(GetPositionInfoSink); AVT.External_GetTransportInfo = new DvAVTransport.Delegate_GetTransportInfo(GetTransportInfoSink); AVT.External_GetTransportSettings = new DvAVTransport.Delegate_GetTransportSettings(GetTransportSettingsSink); AVT.External_GetDeviceCapabilities = new DvAVTransport.Delegate_GetDeviceCapabilities(GetDeviceCapabilitiesSink); AVT.External_GetCurrentTransportActions = new DvAVTransport.Delegate_GetCurrentTransportActions(GetCurrentTransportActionsSink); AVT.External_Play = new DvAVTransport.Delegate_Play(PlaySink); AVT.External_Stop = new DvAVTransport.Delegate_Stop(StopSink); AVT.External_Pause = new DvAVTransport.Delegate_Pause(PauseSink); AVT.External_Record = new DvAVTransport.Delegate_Record(RecordSink); AVT.External_Previous = new DvAVTransport.Delegate_Previous(PreviousSink); AVT.External_Next = new DvAVTransport.Delegate_Next(NextSink); AVT.External_Seek = new DvAVTransport.Delegate_Seek(SeekSink); AVT.External_SetAVTransportURI = new DvAVTransport.Delegate_SetAVTransportURI(SetAVTransportURISink); AVT.External_SetNextAVTransportURI = new DvAVTransport.Delegate_SetNextAVTransportURI(SetNextAVTransportURISink); AVT.External_SetPlayMode = new DvAVTransport.Delegate_SetPlayMode(SetPlayModeSink); AVT.External_SetRecordQualityMode = new DvAVTransport.Delegate_SetRecordQualityMode(SetRecordQualityModeSink); AVT.External_Record = new DvAVTransport.Delegate_Record(RecordSink); Control.Evented_LastChange = "<Event xmlns = "urn:schemas-upnp-org:metadata-1-0/RCS/"/>"; Control.Accumulator_LastChange = new InstanceID_LastChangeAccumulator("RCS"); Control.ModerationDuration_LastChange = 1; Control.External_GetMute = new DvRenderingControl.Delegate_GetMute(GetMuteSink); Control.External_SetMute = new DvRenderingControl.Delegate_SetMute(SetMuteSink); Control.External_GetVolume = new DvRenderingControl.Delegate_GetVolume(GetVolumeSink); Control.External_SetVolume = new DvRenderingControl.Delegate_SetVolume(SetVolumeSink); Control.External_GetBlueVideoBlackLevel = new DvRenderingControl.Delegate_GetBlueVideoBlackLevel(GetBlueVideoBlackSink); Control.External_GetBlueVideoGain = new DvRenderingControl.Delegate_GetBlueVideoGain(GetBlueVideoGainSink); Control.External_SetBlueVideoBlackLevel = new DvRenderingControl.Delegate_SetBlueVideoBlackLevel(SetBlueVideoBlackSink); Control.External_SetBlueVideoGain = new DvRenderingControl.Delegate_SetBlueVideoGain(SetBlueVideoGainSink); Control.External_GetGreenVideoBlackLevel = new DvRenderingControl.Delegate_GetGreenVideoBlackLevel(GetGreenVideoBlackSink); Control.External_GetGreenVideoGain = new DvRenderingControl.Delegate_GetGreenVideoGain(GetGreenVideoGainSink); Control.External_SetGreenVideoBlackLevel = new DvRenderingControl.Delegate_SetGreenVideoBlackLevel(SetGreenVideoBlackSink); Control.External_SetGreenVideoGain = new DvRenderingControl.Delegate_SetGreenVideoGain(SetGreenVideoGainSink); Control.External_GetRedVideoBlackLevel = new DvRenderingControl.Delegate_GetRedVideoBlackLevel(GetRedVideoBlackSink); Control.External_GetRedVideoGain = new DvRenderingControl.Delegate_GetRedVideoGain(GetRedVideoGainSink); Control.External_SetRedVideoBlackLevel = new DvRenderingControl.Delegate_SetRedVideoBlackLevel(SetRedVideoBlackSink); Control.External_SetRedVideoGain = new DvRenderingControl.Delegate_SetRedVideoGain(SetRedVideoGainSink); Control.External_GetBrightness = new DvRenderingControl.Delegate_GetBrightness(GetBrightnessSink); Control.External_SetBrightness = new DvRenderingControl.Delegate_SetBrightness(SetBrightnessSink); Control.External_GetContrast = new DvRenderingControl.Delegate_GetContrast(GetContrastSink); Control.External_SetContrast = new DvRenderingControl.Delegate_SetContrast(SetContrastSink); Control.External_GetSharpness = new DvRenderingControl.Delegate_GetSharpness(GetSharpnessSink); Control.External_SetSharpness = new DvRenderingControl.Delegate_SetSharpness(SetSharpnessSink); Control.External_ListPresets = new DvRenderingControl.Delegate_ListPresets(ListPresetsSink); Control.External_SelectPreset = new DvRenderingControl.Delegate_SelectPreset(SelectPresetSink); device.Manufacturer = "OpenSource"; device.ManufacturerURL = ""; device.PresentationURL = "/"; device.HasPresentation = false; device.ModelName = "Renderer"; device.ModelDescription = "AV Media Renderer Device"; device.ModelURL = new Uri("http://www.sourceforge.org"); device.StandardDeviceType = "MediaRenderer"; device.AddService(Manager); device.AddService(Control); device.AddService(AVT); if(ConnectionMax == 0) { Manager.Evented_CurrentConnectionIDs = "0"; CurrentConnections = 1; AVConnection c = new AVConnection(this, "", "/", -1, DvConnectionManager.Enum_A_ARG_TYPE_Direction.INPUT, 0, 0, 0); c.Parent = this; c._WhoCreatedMe = new IPEndPoint(IPAddress.Parse("127.0.0.1"),0); ID_Table[(UInt32)0] = c; if(h!=null) h(this,c); } }
private static void ParseDevice(String XML, int startLine, ref UPnPDevice RetVal) { string TempString; UPnPService service; int embeddedLine; DText p = new DText(); TextReader MyString = new StringReader(XML); XmlTextReader XMLDoc = new XmlTextReader(MyString); try { XMLDoc.Read(); XMLDoc.MoveToContent(); if (XMLDoc.LocalName == "device") { if (XMLDoc.AttributeCount > 0) { for (int ax = 0; ax < XMLDoc.AttributeCount; ++ax) { XMLDoc.MoveToAttribute(ax); if (XMLDoc.LocalName == "MaxVersion") { RetVal.SetVersion(XMLDoc.Value); } } XMLDoc.MoveToContent(); XMLDoc.Read(); } else { XMLDoc.Read(); XMLDoc.MoveToContent(); } while (XMLDoc.LocalName != "device" && !XMLDoc.EOF) { switch (XMLDoc.LocalName) { case "deviceList": embeddedLine = XMLDoc.LineNumber; ParseDeviceList(XMLDoc.ReadOuterXml(), startLine + embeddedLine - 1, ref RetVal); break; case "URLBase": // Here, tport is a hack to make Windows Home Server visible. WHS does no set the port in the BaseURL and so, you need to keep it from the SSDP message. int tport = 80; if (RetVal.BaseURL != null) tport = RetVal.BaseURL.Port; RetVal.BaseURL = new Uri(XMLDoc.ReadString()); if (RetVal.BaseURL.Port == 80 && RetVal.BaseURL.Port != tport) RetVal.BaseURL = new Uri(RetVal.BaseURL.Scheme + "://" + RetVal.BaseURL.Host + ":" + tport + RetVal.BaseURL.AbsolutePath); break; case "deviceType": RetVal.DeviceURN = XMLDoc.ReadString(); break; case "friendlyName": RetVal.FriendlyName = XMLDoc.ReadString(); break; case "manufacturer": RetVal.Manufacturer = XMLDoc.ReadString(); break; case "manufacturerURL": RetVal.ManufacturerURL = XMLDoc.ReadString(); break; case "modelDescription": RetVal.ModelDescription = XMLDoc.ReadString(); break; case "modelName": RetVal.ModelName = XMLDoc.ReadString(); break; case "modelNumber": RetVal.ModelNumber = XMLDoc.ReadString(); break; case "modelURL": try { string u = XMLDoc.ReadString(); if (Uri.TryCreate(u, UriKind.Absolute, out RetVal.ModelURL) == false) { Uri.TryCreate("http://" + u, UriKind.Absolute, out RetVal.ModelURL); } } catch (Exception ex) { OpenSource.Utilities.EventLogger.Log(ex); } break; case "serialNumber": RetVal.SerialNumber = XMLDoc.ReadString(); break; case "UDN": TempString = XMLDoc.ReadString(); RetVal.UniqueDeviceName = TempString.Substring(5); break; case "UPC": RetVal.ProductCode = XMLDoc.ReadString(); break; case "presentationURL": RetVal.HasPresentation = true; RetVal.PresentationURL = XMLDoc.ReadString(); break; case "serviceList": if (XMLDoc.IsEmptyElement) break; XMLDoc.Read(); XMLDoc.MoveToContent(); while (XMLDoc.LocalName != "serviceList") { if (XMLDoc.LocalName == "service") { embeddedLine = XMLDoc.LineNumber; service = UPnPService.Parse(XMLDoc.ReadOuterXml(), embeddedLine - 1 + startLine); RetVal.AddService(service); } if (!XMLDoc.IsStartElement()) { if (XMLDoc.LocalName != "serviceList") { XMLDoc.Read(); XMLDoc.MoveToContent(); } } } break; /* case "iconList": bool finishedIconList = false; while (!finishedIconList && XMLDoc.Read()) { switch (XMLDoc.NodeType) { case XmlNodeType.Element: if (XMLDoc.LocalName == "icon") { embeddedLine = XMLDoc.LineNumber; ParseIconXML(RetVal, startLine + embeddedLine-1, XMLDoc.ReadOuterXml()); if (XMLDoc.NodeType == XmlNodeType.EndElement && XMLDoc.LocalName == "iconList") { finishedIconList = true; } } break; case XmlNodeType.EndElement: if (XMLDoc.LocalName == "iconList") { finishedIconList = true; } break; } } break; */ default: if (XMLDoc.LocalName != "") { string customPrefix = XMLDoc.Prefix; string customFieldName = XMLDoc.LocalName; string customFieldNamespace = XMLDoc.LookupNamespace(customPrefix); string customFieldVal = XMLDoc.ReadInnerXml(); RetVal.AddCustomFieldInDescription(customFieldName, customFieldVal, customFieldNamespace); } else { XMLDoc.Skip(); } continue; } XMLDoc.Read(); //XMLDoc.MoveToContent(); } } } catch (XMLParsingException ex) { throw ex; } catch (Exception ex) { throw new XMLParsingException("Invalid Device XML", startLine + XMLDoc.LineNumber, XMLDoc.LinePosition, ex); } }
public SampleDevice() { device = UPnPDevice.CreateRootDevice(1800,1.0,"\\"); device.FriendlyName = "Media Renderer (Casper-laptop)"; device.Manufacturer = "OpenSource"; device.ManufacturerURL = "http://opentools.homeip.net/"; device.ModelName = "AV Renderer"; device.ModelDescription = "Media Renderer Device"; device.HasPresentation = false; device.DeviceURN = "urn:schemas-upnp-org:device:MediaRenderer:1"; OpenSource.DeviceBuilder.DvAVTransport AVTransport = new OpenSource.DeviceBuilder.DvAVTransport(); AVTransport.External_GetCurrentTransportActions = new OpenSource.DeviceBuilder.DvAVTransport.Delegate_GetCurrentTransportActions(AVTransport_GetCurrentTransportActions); AVTransport.External_GetDeviceCapabilities = new OpenSource.DeviceBuilder.DvAVTransport.Delegate_GetDeviceCapabilities(AVTransport_GetDeviceCapabilities); AVTransport.External_GetMediaInfo = new OpenSource.DeviceBuilder.DvAVTransport.Delegate_GetMediaInfo(AVTransport_GetMediaInfo); AVTransport.External_GetPositionInfo = new OpenSource.DeviceBuilder.DvAVTransport.Delegate_GetPositionInfo(AVTransport_GetPositionInfo); AVTransport.External_GetTransportInfo = new OpenSource.DeviceBuilder.DvAVTransport.Delegate_GetTransportInfo(AVTransport_GetTransportInfo); AVTransport.External_GetTransportSettings = new OpenSource.DeviceBuilder.DvAVTransport.Delegate_GetTransportSettings(AVTransport_GetTransportSettings); AVTransport.External_Next = new OpenSource.DeviceBuilder.DvAVTransport.Delegate_Next(AVTransport_Next); AVTransport.External_Pause = new OpenSource.DeviceBuilder.DvAVTransport.Delegate_Pause(AVTransport_Pause); AVTransport.External_Play = new OpenSource.DeviceBuilder.DvAVTransport.Delegate_Play(AVTransport_Play); AVTransport.External_Previous = new OpenSource.DeviceBuilder.DvAVTransport.Delegate_Previous(AVTransport_Previous); AVTransport.External_Seek = new OpenSource.DeviceBuilder.DvAVTransport.Delegate_Seek(AVTransport_Seek); AVTransport.External_SetAVTransportURI = new OpenSource.DeviceBuilder.DvAVTransport.Delegate_SetAVTransportURI(AVTransport_SetAVTransportURI); AVTransport.External_SetPlayMode = new OpenSource.DeviceBuilder.DvAVTransport.Delegate_SetPlayMode(AVTransport_SetPlayMode); AVTransport.External_Stop = new OpenSource.DeviceBuilder.DvAVTransport.Delegate_Stop(AVTransport_Stop); device.AddService(AVTransport); OpenSource.DeviceBuilder.DvConnectionManager ConnectionManager = new OpenSource.DeviceBuilder.DvConnectionManager(); ConnectionManager.External_GetCurrentConnectionIDs = new OpenSource.DeviceBuilder.DvConnectionManager.Delegate_GetCurrentConnectionIDs(ConnectionManager_GetCurrentConnectionIDs); ConnectionManager.External_GetCurrentConnectionInfo = new OpenSource.DeviceBuilder.DvConnectionManager.Delegate_GetCurrentConnectionInfo(ConnectionManager_GetCurrentConnectionInfo); ConnectionManager.External_GetProtocolInfo = new OpenSource.DeviceBuilder.DvConnectionManager.Delegate_GetProtocolInfo(ConnectionManager_GetProtocolInfo); device.AddService(ConnectionManager); OpenSource.DeviceBuilder.DvRenderingControl RenderingControl = new OpenSource.DeviceBuilder.DvRenderingControl(); RenderingControl.External_GetBlueVideoBlackLevel = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_GetBlueVideoBlackLevel(RenderingControl_GetBlueVideoBlackLevel); RenderingControl.External_GetBlueVideoGain = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_GetBlueVideoGain(RenderingControl_GetBlueVideoGain); RenderingControl.External_GetBrightness = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_GetBrightness(RenderingControl_GetBrightness); RenderingControl.External_GetColorTemperature = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_GetColorTemperature(RenderingControl_GetColorTemperature); RenderingControl.External_GetContrast = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_GetContrast(RenderingControl_GetContrast); RenderingControl.External_GetGreenVideoBlackLevel = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_GetGreenVideoBlackLevel(RenderingControl_GetGreenVideoBlackLevel); RenderingControl.External_GetGreenVideoGain = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_GetGreenVideoGain(RenderingControl_GetGreenVideoGain); RenderingControl.External_GetHorizontalKeystone = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_GetHorizontalKeystone(RenderingControl_GetHorizontalKeystone); RenderingControl.External_GetLoudness = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_GetLoudness(RenderingControl_GetLoudness); RenderingControl.External_GetMute = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_GetMute(RenderingControl_GetMute); RenderingControl.External_GetRedVideoBlackLevel = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_GetRedVideoBlackLevel(RenderingControl_GetRedVideoBlackLevel); RenderingControl.External_GetRedVideoGain = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_GetRedVideoGain(RenderingControl_GetRedVideoGain); RenderingControl.External_GetSharpness = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_GetSharpness(RenderingControl_GetSharpness); RenderingControl.External_GetVerticalKeystone = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_GetVerticalKeystone(RenderingControl_GetVerticalKeystone); RenderingControl.External_GetVolume = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_GetVolume(RenderingControl_GetVolume); RenderingControl.External_GetVolumeDB = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_GetVolumeDB(RenderingControl_GetVolumeDB); RenderingControl.External_GetVolumeDBRange = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_GetVolumeDBRange(RenderingControl_GetVolumeDBRange); RenderingControl.External_ListPresets = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_ListPresets(RenderingControl_ListPresets); RenderingControl.External_SelectPreset = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_SelectPreset(RenderingControl_SelectPreset); RenderingControl.External_SetBlueVideoBlackLevel = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_SetBlueVideoBlackLevel(RenderingControl_SetBlueVideoBlackLevel); RenderingControl.External_SetBlueVideoGain = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_SetBlueVideoGain(RenderingControl_SetBlueVideoGain); RenderingControl.External_SetBrightness = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_SetBrightness(RenderingControl_SetBrightness); RenderingControl.External_SetColorTemperature = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_SetColorTemperature(RenderingControl_SetColorTemperature); RenderingControl.External_SetContrast = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_SetContrast(RenderingControl_SetContrast); RenderingControl.External_SetGreenVideoBlackLevel = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_SetGreenVideoBlackLevel(RenderingControl_SetGreenVideoBlackLevel); RenderingControl.External_SetGreenVideoGain = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_SetGreenVideoGain(RenderingControl_SetGreenVideoGain); RenderingControl.External_SetHorizontalKeystone = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_SetHorizontalKeystone(RenderingControl_SetHorizontalKeystone); RenderingControl.External_SetLoudness = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_SetLoudness(RenderingControl_SetLoudness); RenderingControl.External_SetMute = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_SetMute(RenderingControl_SetMute); RenderingControl.External_SetRedVideoBlackLevel = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_SetRedVideoBlackLevel(RenderingControl_SetRedVideoBlackLevel); RenderingControl.External_SetRedVideoGain = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_SetRedVideoGain(RenderingControl_SetRedVideoGain); RenderingControl.External_SetSharpness = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_SetSharpness(RenderingControl_SetSharpness); RenderingControl.External_SetVerticalKeystone = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_SetVerticalKeystone(RenderingControl_SetVerticalKeystone); RenderingControl.External_SetVolume = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_SetVolume(RenderingControl_SetVolume); RenderingControl.External_SetVolumeDB = new OpenSource.DeviceBuilder.DvRenderingControl.Delegate_SetVolumeDB(RenderingControl_SetVolumeDB); device.AddService(RenderingControl); // Setting the initial value of evented variables AVTransport.Evented_LastChange = "Sample String"; ConnectionManager.Evented_SourceProtocolInfo = "Sample String"; ConnectionManager.Evented_SinkProtocolInfo = "Sample String"; ConnectionManager.Evented_CurrentConnectionIDs = "Sample String"; RenderingControl.Evented_LastChange = "Sample String"; }
public MainForm(string[] args) { // // Required for Windows Form Designer support // InitializeComponent(); foreach (string parm in args) { if (parm.ToUpper().StartsWith("/CACHE:")) { DText p = new DText(); p.ATTRMARK = ":"; p[0] = parm; try { CacheTime = int.Parse(p[2]); } catch (Exception) { } } else if (parm.ToUpper() == "/DEBUG") { OpenSource.Utilities.EventLogger.Enabled = true; OpenSource.Utilities.EventLogger.ShowAll = true; OpenSource.Utilities.InstanceTracker.Display(); } else if (parm.ToUpper().StartsWith("/PORT:")) { DText p = new DText(); p.ATTRMARK = ":"; p[0] = parm; try { PortNum = int.Parse(p[2]); } catch (Exception) { } } } upnpLightDevice = UPnPDevice.CreateRootDevice(CacheTime, 1, "web\\"); upnpLightDevice.Icon = iconImageList.Images[0]; upnpLightDevice.HasPresentation = true; upnpLightDevice.PresentationURL = "/"; upnpLightDevice.FriendlyName = this.Text + " (" + System.Windows.Forms.SystemInformation.ComputerName + ")"; upnpLightDevice.Manufacturer = "OpenSource"; upnpLightDevice.ManufacturerURL = "http://opentools.homeip.net"; upnpLightDevice.ModelName = "Network Light Bulb"; upnpLightDevice.ModelDescription = "Software Emulated Light Bulb"; upnpLightDevice.ModelURL = new Uri("http://opentools.homeip.net"); upnpLightDevice.ModelNumber = "XPC-L1"; upnpLightDevice.StandardDeviceType = "DimmableLight"; upnpLightDevice.UniqueDeviceName = System.Guid.NewGuid().ToString(); // Switch Power upnpLightService = new UPnPService(1, "SwitchPower.0001", "SwitchPower", true, this); upnpLightService.AddMethod("SetTarget"); upnpLightService.AddMethod("GetTarget"); upnpLightService.AddMethod("GetStatus"); UPnPStateVariable upnpStatusVar = new UPnPStateVariable("Status", typeof(bool), true); upnpStatusVar.AddAssociation("GetStatus", "ResultStatus"); upnpStatusVar.Value = false; upnpLightService.AddStateVariable(upnpStatusVar); UPnPStateVariable upnpTargetVar = new UPnPStateVariable("Target", typeof(bool), false); upnpTargetVar.AddAssociation("SetTarget", "newTargetValue"); upnpTargetVar.AddAssociation("GetTarget", "newTargetValue"); upnpTargetVar.Value = false; upnpLightService.AddStateVariable(upnpTargetVar); // Dimmable device upnpDimmerService = new UPnPService(1, "Dimming.0001", "Dimming", true, this); upnpDimmerService.AddMethod("SetLoadLevelTarget"); upnpDimmerService.AddMethod("GetLoadLevelTarget"); upnpDimmerService.AddMethod("GetLoadLevelStatus"); upnpDimmerService.AddMethod("GetMinLevel"); UPnPStateVariable upnpLevelTargetVar = new UPnPStateVariable("LoadLevelTarget", typeof(byte), false); upnpLevelTargetVar.AddAssociation("SetLoadLevelTarget", "NewLoadLevelTarget"); upnpLevelTargetVar.AddAssociation("GetLoadLevelTarget", "NewLoadLevelTarget"); upnpLevelTargetVar.Value = (byte)100; upnpLevelTargetVar.SetRange((byte)0, (byte)100, null); upnpDimmerService.AddStateVariable(upnpLevelTargetVar); UPnPStateVariable upnpLevelStatusVar = new UPnPStateVariable("LoadLevelStatus", typeof(byte), true); upnpLevelStatusVar.AddAssociation("GetLoadLevelStatus", "RetLoadLevelStatus"); upnpLevelStatusVar.Value = (byte)100; upnpLevelStatusVar.SetRange((byte)0, (byte)100, null); upnpDimmerService.AddStateVariable(upnpLevelStatusVar); UPnPStateVariable upnpMinLevelVar = new UPnPStateVariable("MinLevel", typeof(byte), false); upnpMinLevelVar.AddAssociation("GetMinLevel", "MinLevel"); upnpMinLevelVar.Value = (byte)0; upnpDimmerService.AddStateVariable(upnpMinLevelVar); // Add Services upnpLightDevice.AddService(upnpLightService); upnpLightDevice.AddService(upnpDimmerService); }
/// <summary> /// Parses an xml to a UPnP device (either a root or an embedded device) /// </summary> /// <param name="XML">xml containing the device description</param> /// <param name="RetVal">the UPnP device into which the xml data will be parsed</param> private static void ParseDevice(String XML, ref UPnPDevice RetVal) { string TempString; UPnPService service; DText p = new DText(); TextReader MyString = new StringReader(XML); XmlTextReader XMLDoc = new XmlTextReader(MyString); XMLDoc.Read(); XMLDoc.MoveToContent(); if (XMLDoc.LocalName == "device") { if (XMLDoc.AttributeCount > 0) { for (int ax = 0; ax < XMLDoc.AttributeCount; ++ax) { XMLDoc.MoveToAttribute(ax); if (XMLDoc.LocalName == "MaxVersion") { RetVal.SetVersion(XMLDoc.Value); } } XMLDoc.MoveToContent(); XMLDoc.Read(); } else { XMLDoc.Read(); XMLDoc.MoveToContent(); } while (XMLDoc.LocalName != "device" && !XMLDoc.EOF) { switch (XMLDoc.LocalName) { case "deviceList": ParseDeviceList(XMLDoc.ReadOuterXml(), ref RetVal); break; case "URLBase": // Here, tport is a hack to make Windows Home Server visible. WHS does no set the port in the BaseURL and so, you need to keep it from the SSDP message. int tport = 80; if (RetVal.BaseURL != null) tport = RetVal.BaseURL.Port; RetVal.BaseURL = new Uri(XMLDoc.ReadString()); if (RetVal.BaseURL.Port == 80 && RetVal.BaseURL.Port != tport) RetVal.BaseURL = new Uri(RetVal.BaseURL.Scheme + "://" + RetVal.BaseURL.Host + ":" + tport + RetVal.BaseURL.AbsolutePath); break; case "deviceType": RetVal.DeviceURN = XMLDoc.ReadString(); break; case "friendlyName": RetVal.FriendlyName = XMLDoc.ReadString(); break; case "manufacturer": RetVal.Manufacturer = XMLDoc.ReadString(); break; case "manufacturerURL": RetVal.ManufacturerURL = XMLDoc.ReadString(); break; case "modelDescription": RetVal.ModelDescription = XMLDoc.ReadString(); break; case "modelName": RetVal.ModelName = XMLDoc.ReadString(); break; case "modelNumber": RetVal.ModelNumber = XMLDoc.ReadString(); break; case "modelURL": try { string u = XMLDoc.ReadString(); if (Uri.TryCreate(u, UriKind.Absolute, out RetVal.ModelURL) == false) { Uri.TryCreate("http://" + u, UriKind.Absolute, out RetVal.ModelURL); } } catch { } break; case "serialNumber": RetVal.SerialNumber = XMLDoc.ReadString(); break; case "UDN": TempString = XMLDoc.ReadString(); RetVal.UniqueDeviceName = TempString.Substring(5); break; case "UPC": RetVal.ProductCode = XMLDoc.ReadString(); break; case "presentationURL": RetVal.HasPresentation = true; RetVal.PresentationURL = XMLDoc.ReadString(); break; case "serviceList": if (XMLDoc.IsEmptyElement) break; XMLDoc.Read(); XMLDoc.MoveToContent(); while (XMLDoc.LocalName != "serviceList") { if (XMLDoc.LocalName == "service") { // TODO: DONE Resilience case 5a - wrap in try/catch block string servicexml = "Failed to read service xml element from device xml"; try { servicexml = XMLDoc.ReadOuterXml(); service = UPnPService.Parse(servicexml); RetVal.AddService(service); } catch (Exception e) { OpenSource.Utilities.EventLogger.Log(null, System.Diagnostics.EventLogEntryType.Error, "Invalid Service element within Device XML"); OpenSource.Utilities.EventLogger.Log(e, "XML content: \r\n" + servicexml); OpenSource.Utilities.EventLogger.Log(null, System.Diagnostics.EventLogEntryType.Warning, "Dropping failed Service and commencing parsing remainder of device"); } } if (!XMLDoc.IsStartElement()) { if (XMLDoc.LocalName != "serviceList") { XMLDoc.Read(); XMLDoc.MoveToContent(); } } } break; case "iconList": bool finishedIconList = false; while (!finishedIconList && XMLDoc.Read()) { switch (XMLDoc.NodeType) { case XmlNodeType.Element: if (XMLDoc.LocalName == "icon") { ParseIconXML(RetVal, XMLDoc.ReadOuterXml()); if (XMLDoc.NodeType == XmlNodeType.EndElement && XMLDoc.LocalName == "iconList") { finishedIconList = true; } } break; case XmlNodeType.EndElement: if (XMLDoc.LocalName == "iconList") { finishedIconList = true; } break; } } break; default: if (XMLDoc.LocalName != "") { string customPrefix = XMLDoc.Prefix; string customFieldName = XMLDoc.LocalName; string customFieldNamespace = XMLDoc.LookupNamespace(customPrefix); string customFieldVal = XMLDoc.ReadInnerXml(); RetVal.AddCustomFieldInDescription(customFieldName, customFieldVal, customFieldNamespace); } else { XMLDoc.Skip(); } continue; } XMLDoc.Read(); //XMLDoc.MoveToContent(); } } }