Esempio n. 1
0
        /// <summary>
        /// Creates features tree. Initializes checked state; sets up mandatory features.
        /// </summary>
        /// <returns>"Canonical" features tree</returns>
        public static FeaturesSet CreateFeaturesSet()
        {
            FeaturesSet featuresSet = new FeaturesSet();

            FeatureNode security = CreateSecurityNode();

            featuresSet.Nodes.Add(security);

            FeatureNode discovery = CreateDiscoveryNode();

            featuresSet.Nodes.Add(discovery);

            FeatureNode deviceService = CreateDeviceServiceNode();

            featuresSet.Nodes.Add(deviceService);

            FeatureNode events = new FeatureNode()
            {
                Name = "Events", Feature = Feature.EventsService
            };

            featuresSet.Nodes.Add(events);
            {
                FeatureNode eventSeek = new FeatureNode()
                {
                    Name = "EventSeek", Feature = Feature.EventSeek
                };
                events.Nodes.Add(eventSeek);
            }

            FeatureNode media = CreateMediaServiceNode();

            featuresSet.Nodes.Add(media);

            FeatureNode ptz = CreatePTZNode();

            featuresSet.Nodes.Add(ptz);


            FeatureNode io = new FeatureNode()
            {
                Name = "IO", Feature = Feature.DeviceIoService
            };

            featuresSet.Nodes.Add(io);
            io.Nodes.Add(new FeatureNode()
            {
                Name = "RelayOutput", Feature = Feature.RelayOutputs
            });
            io.Nodes.Add(new FeatureNode()
            {
                Name = "DigitalInputs", Feature = Feature.DigitalInputs
            });

            FeatureNode imaging = new FeatureNode()
            {
                Name = "Imaging", Feature = Feature.ImagingService
            };

            featuresSet.Nodes.Add(imaging);

            FeatureNode analytics = new FeatureNode()
            {
                Name = "Analytics", Feature = Feature.AnalyticsService
            };

            featuresSet.Nodes.Add(analytics);

            FeatureNode doorControl = CreateDoorControlServiceNode();

            featuresSet.Nodes.Add(doorControl);

            FeatureNode pacs = CreatePacsServiceNode();

            featuresSet.Nodes.Add(pacs);

            return(featuresSet);
        }
Esempio n. 2
0
        /// <summary>
        /// Creates features tree. Initializes checked state; sets up mandatory features.
        /// </summary>
        /// <returns>"Canonical" features tree</returns>
        public static FeaturesSet CreateFeaturesSet()
        {
            FeaturesSet featuresSet = new FeaturesSet();

            FeatureNode security = new FeatureNode()
            {
                Name    = "Security",
                Feature = Feature.Security,
                State   = FeatureState.Undefined,
                Status  = FeatureStatus.Group
            };

            featuresSet.Nodes.Add(security);

            security.Nodes.Add(new FeatureNode()
            {
                Name = "WSU", Feature = Feature.WSU
            });
            security.Nodes.Add(new FeatureNode()
            {
                Name = "Digest", Feature = Feature.Digest
            });

            FeatureNode discovery = new FeatureNode()
            {
                Name    = "Discovery",
                Feature = Feature.Discovery,
                State   = FeatureState.Undefined,
                Status  = FeatureStatus.Group
            };

            featuresSet.Nodes.Add(discovery);

            discovery.Nodes.Add(new FeatureNode()
            {
                Name = "BYE", Feature = Feature.BYE
            });

            /******************************************/

            FeatureNode deviceService = new FeatureNode()
            {
                Name    = "DeviceService",
                Feature = Feature.DeviceService,
                State   = FeatureState.Undefined,
                Status  = FeatureStatus.Group
            };

            featuresSet.Nodes.Add(deviceService);

            FeatureNode capabilities = new FeatureNode()
            {
                Name    = "Capabilities",
                Feature = Feature.Capabilities,
                State   = FeatureState.Undefined,
                Status  = FeatureStatus.Group
            };

            deviceService.Nodes.Add(capabilities);
            capabilities.Nodes.Add(new FeatureNode()
            {
                Name = "GetCapabilities", Feature = Feature.GetCapabilities
            });
            capabilities.Nodes.Add(new FeatureNode()
            {
                Name = "GetServices", Feature = Feature.GetServices
            });

            FeatureNode network = new FeatureNode()
            {
                Name    = "Network",
                Feature = Feature.Network,
                State   = FeatureState.Undefined,
                Status  = FeatureStatus.Group
            };

            deviceService.Nodes.Add(network);

            network.Nodes.Add(new FeatureNode()
            {
                Name    = "ZeroConfiguration",
                Feature = Feature.ZeroConfiguration
            });
            network.Nodes.Add(new FeatureNode()
            {
                Name = "NTP", Feature = Feature.NTP
            });
            network.Nodes.Add(new FeatureNode()
            {
                Name = "IPv6", Feature = Feature.IPv6
            });
            network.Nodes.Add(new FeatureNode()
            {
                Name = "DynamicDNS", Feature = Feature.DynamicDNS
            });
            network.Nodes.Add(new FeatureNode()
            {
                Name = "IPFilter", Feature = Feature.IPFilter
            });

            FeatureNode system = new FeatureNode()
            {
                Name    = "System",
                Feature = Feature.System,
                State   = FeatureState.Undefined,
                Status  = FeatureStatus.Group
            };

            deviceService.Nodes.Add(system);

            FeatureNode systemLog = new FeatureNode()
            {
                Name    = "SystemLog",
                Feature = Feature.SystemLogging
            };

            system.Nodes.Add(systemLog);

            FeatureNode deviceIo = new FeatureNode()
            {
                Name    = "DeviceIo",
                Feature = Feature.DeviceIO,
                State   = FeatureState.Undefined,
                Status  = FeatureStatus.Group
            };

            deviceService.Nodes.Add(deviceIo);

            FeatureNode deviceIoRelayOutputs = new FeatureNode()
            {
                Name    = "DeviceIoRelayOutputs",
                Feature = Feature.DeviceIORelayOutputs
            };

            deviceIo.Nodes.Add(deviceIoRelayOutputs);

            {
                FeatureNode deviceIoRelayOutputsBistable = new FeatureNode()
                {
                    Name    = "DeviceIoRelayOutputsBistable",
                    Feature = Feature.DeviceIORelayOutputsBistable
                };
                FeatureNode deviceIoRelayOutputsBistableOpen = new FeatureNode()
                {
                    Name    = "DeviceIoRelayOutputsBistableOpen",
                    Feature =
                        Feature.DeviceIORelayOutputsBistableOpen
                };
                FeatureNode deviceIoRelayOutputsBistableClosed = new FeatureNode()
                {
                    Name    = "DeviceIoRelayOutputsBistableClosed",
                    Feature =
                        Feature.DeviceIORelayOutputsBistableClosed
                };

                deviceIoRelayOutputsBistable.Nodes.Add(deviceIoRelayOutputsBistableOpen);
                deviceIoRelayOutputsBistable.Nodes.Add(deviceIoRelayOutputsBistableClosed);

                deviceIoRelayOutputs.Nodes.Add(deviceIoRelayOutputsBistable);
            }

            {
                FeatureNode deviceIoRelayOutputsMonostable = new FeatureNode()
                {
                    Name    = "DeviceIoRelayOutputsMonostable",
                    Feature = Feature.DeviceIORelayOutputsMonostable
                };

                FeatureNode deviceIoRelayOutputsMonostableOpen = new FeatureNode()
                {
                    Name    = "DeviceIoRelayOutputsMonostableOpen",
                    Feature =
                        Feature.DeviceIORelayOutputsMonostableOpen
                };
                FeatureNode deviceIoRelayOutputsMonostableClosed = new FeatureNode()
                {
                    Name    = "DeviceIoRelayOutputsMonostableClosed",
                    Feature =
                        Feature.DeviceIORelayOutputsMonostableClosed
                };

                deviceIoRelayOutputsMonostable.Nodes.Add(deviceIoRelayOutputsMonostableOpen);
                deviceIoRelayOutputsMonostable.Nodes.Add(deviceIoRelayOutputsMonostableClosed);

                deviceIoRelayOutputs.Nodes.Add(deviceIoRelayOutputsMonostable);
            }

            FeatureNode events = new FeatureNode()
            {
                Name = "Events", Feature = Feature.EventsService
            };

            featuresSet.Nodes.Add(events);

            FeatureNode media = new FeatureNode()
            {
                Name = "Media", Feature = Feature.MediaService
            };

            featuresSet.Nodes.Add(media);

            FeatureNode video = new FeatureNode()
            {
                Name    = "VideoCodec",
                Feature = Feature.Video,
                State   = FeatureState.Undefined,
                Status  = FeatureStatus.Group
            };

            media.Nodes.Add(video);
            video.Nodes.Add(new FeatureNode()
            {
                Name = "JPEG", Feature = Feature.JPEG
            });
            video.Nodes.Add(new FeatureNode()
            {
                Name = "H264", Feature = Feature.H264
            });
            video.Nodes.Add(new FeatureNode()
            {
                Name = "MPEG4", Feature = Feature.MPEG4
            });

            FeatureNode audio = new FeatureNode()
            {
                Name = "Audio", Feature = Feature.Audio
            };

            media.Nodes.Add(audio);

            audio.Nodes.Add(new FeatureNode()
            {
                Name = "G711", Feature = Feature.G711
            });
            audio.Nodes.Add(new FeatureNode()
            {
                Name = "G726", Feature = Feature.G726
            });
            audio.Nodes.Add(new FeatureNode()
            {
                Name = "AAC", Feature = Feature.AAC
            });

            FeatureNode backchannel = new FeatureNode()
            {
                Name    = "Backchannel",
                Feature = Feature.AudioOutput
            };

            media.Nodes.Add(backchannel);
            backchannel.Nodes.Add(new FeatureNode()
            {
                Name = "BackchannelG711", Feature = Feature.AudioOutputG711
            });
            backchannel.Nodes.Add(new FeatureNode()
            {
                Name = "BackchannelG726", Feature = Feature.AudioOutputG726
            });
            backchannel.Nodes.Add(new FeatureNode()
            {
                Name = "BackchannelAAC", Feature = Feature.AudioOutputAAC
            });



            FeatureNode rtss = new FeatureNode()
            {
                Name    = "RTSS",
                Feature = Feature.RTSS,
                State   = FeatureState.Undefined,
                Status  = FeatureStatus.Group
            };

            media.Nodes.Add(rtss);

            rtss.Nodes.Add(new FeatureNode()
            {
                Name = "RTPUDP", Feature = Feature.RTPUDP
            });
            rtss.Nodes.Add(new FeatureNode()
            {
                Name = "RTPRTSPHTTP", Feature = Feature.RTPRTSPHTTP
            });
            rtss.Nodes.Add(new FeatureNode()
            {
                Name = "RTPRTSPTCP", Feature = Feature.RTPRTSPTCP
            });
            rtss.Nodes.Add(new FeatureNode()
            {
                Name = "RTPMulticastUDP", Feature = Feature.RTPMulticastUDP
            });
            rtss.Nodes.Add(new FeatureNode()
            {
                Name = "SnapshotURI", Feature = Feature.SnapshotUri
            });

            FeatureNode ptz = new FeatureNode()
            {
                Name = "PTZ", Feature = Feature.PTZService
            };

            featuresSet.Nodes.Add(ptz);

            FeatureNode ptzAbsolute = new FeatureNode()
            {
                Name = "PTZAbsolute", Feature = Feature.PTZAbsolute
            };

            ptzAbsolute.Nodes.Add(new FeatureNode()
            {
                Name = "PanTiltMovement", Feature = Feature.PTZAbsolutePanTilt
            });
            ptzAbsolute.Nodes.Add(new FeatureNode()
            {
                Name = "ZoomMovement", Feature = Feature.PTZAbsoluteZoom
            });
            FeatureNode ptzRelative = new FeatureNode()
            {
                Name = "PTZRelative", Feature = Feature.PTZRelative
            };

            ptzRelative.Nodes.Add(new FeatureNode()
            {
                Name = "PanTiltMovement", Feature = Feature.PTZRelativePanTilt
            });
            ptzRelative.Nodes.Add(new FeatureNode()
            {
                Name = "ZoomMovement", Feature = Feature.PTZRelativeZoom
            });
            FeatureNode ptzContinious = new FeatureNode()
            {
                Name = "PTZContinuous", Feature = Feature.PTZContinious
            };

            ptzContinious.Nodes.Add(new FeatureNode()
            {
                Name = "PanTiltSpeedConfiguration", Feature = Feature.PTZContinuousPanTilt
            });
            ptzContinious.Nodes.Add(new FeatureNode()
            {
                Name = "ZoomSpeedConfiguration", Feature = Feature.PTZContinuousZoom
            });
            FeatureNode ptzPresets = new FeatureNode()
            {
                Name = "PTZPresets", Feature = Feature.PTZPresets
            };
            FeatureNode ptzHome = new FeatureNode()
            {
                Name = "PTZHome", Feature = Feature.PTZHome
            };

            ptzHome.Nodes.Add(new FeatureNode()
            {
                Name = "ConfigurableHomePosition", Feature = Feature.PTZConfigurableHome
            });
            ptzHome.Nodes.Add(new FeatureNode()
            {
                Name = "FixedHomePosition", Feature = Feature.PTZFixedHome
            });
            FeatureNode ptzAuxiliary = new FeatureNode()
            {
                Name = "PTZAuxiliary", Feature = Feature.PTZAuxiliary
            };
            FeatureNode ptzSpeed = new FeatureNode()
            {
                Name = "PTZSpeed", Feature = Feature.PTZSpeed
            };

            ptzSpeed.Nodes.Add(new FeatureNode()
            {
                Name = "PanTiltSpeed", Feature = Feature.PTZSpeedPanTilt
            });
            ptzSpeed.Nodes.Add(new FeatureNode()
            {
                Name = "ZoomSpeed", Feature = Feature.PTZSpeedZoom
            });

            ptz.Nodes.AddRange(new FeatureNode[] { ptzAbsolute, ptzRelative, ptzContinious, ptzPresets, ptzHome, ptzAuxiliary, ptzSpeed });

            FeatureNode io = new FeatureNode()
            {
                Name = "IO", Feature = Feature.DeviceIoService
            };

            featuresSet.Nodes.Add(io);
            io.Nodes.Add(new FeatureNode()
            {
                Name = "RelayOutput", Feature = Feature.RelayOutputs
            });

            FeatureNode imaging = new FeatureNode()
            {
                Name = "Imaging", Feature = Feature.ImagingService
            };

            featuresSet.Nodes.Add(imaging);

            FeatureNode analytics = new FeatureNode()
            {
                Name = "Analytics", Feature = Feature.AnalyticsService
            };

            featuresSet.Nodes.Add(analytics);

            FeatureNode recording = new FeatureNode()
            {
                Name = "Recording", Feature = Feature.RecordingControlService
            };

            featuresSet.Nodes.Add(recording);
            FeatureNode dynamicRecording = new FeatureNode()
            {
                Name = "DynamicRecording", Feature = Feature.DynamicRecording
            };

            recording.Nodes.Add(dynamicRecording);

            FeatureNode search = new FeatureNode()
            {
                Name = "Search", Feature = Feature.RecordingSearchService
            };

            featuresSet.Nodes.Add(search);
            FeatureNode metadataSearch = new FeatureNode()
            {
                Name = "MetadataSearch", Feature = Feature.MetadataSearch
            };

            search.Nodes.Add(metadataSearch);

            FeatureNode replay = new FeatureNode()
            {
                Name = "Replay", Feature = Feature.ReplayService
            };

            featuresSet.Nodes.Add(replay);
            FeatureNode reverseReplay = new FeatureNode()
            {
                Name = "ReverseReplay", Feature = Feature.ReverseReplay
            };

            replay.Nodes.Add(reverseReplay);

            return(featuresSet);
        }
Esempio n. 3
0
        /// <summary>
        /// Creates features tree. Initializes checked state; sets up mandatory features.
        /// </summary>
        /// <returns>"Canonical" features tree</returns>
        public static FeaturesSet CreateFeaturesSet()
        {
            FeaturesSet featuresSet = new FeaturesSet();

            FeatureNode security = new FeatureNode()
            {
                Name    = "Security",
                Feature = Feature.Security,
                State   = FeatureState.Undefined,
                Status  = FeatureStatus.Group
            };

            featuresSet.Nodes.Add(security);


            security.Nodes.Add(new FeatureNode()
            {
                Name = "WSU", Feature = Feature.WSU
            });
            security.Nodes.Add(new FeatureNode()
            {
                Name = "Digest", Feature = Feature.Digest
            });

            FeatureNode discovery = new FeatureNode()
            {
                Name    = "Discovery",
                Feature = Feature.Discovery,
                State   = FeatureState.Undefined,
                Status  = FeatureStatus.Group
            };

            featuresSet.Nodes.Add(discovery);

            //[14.05.2013] AKS: Added new node with two new features according ticket #224
            var types = new FeatureNode()
            {
                Name    = "Types",
                Feature = Feature.DiscoveryTypes,
                State   = FeatureState.Undefined,
                Status  = FeatureStatus.Group
            };

            types.Nodes.Add(new FeatureNode()
            {
                Name = "tds:Device", Feature = Feature.DiscoveryTypesTdsDevice
            });
            types.Nodes.Add(new FeatureNode()
            {
                Name = "dn:NetworkVideoTransmitter", Feature = Feature.DiscoveryTypesDnNetworkVideoTransmitter
            });

            discovery.Nodes.Add(new FeatureNode()
            {
                Name = "BYE", Feature = Feature.BYE
            });
            discovery.Nodes.Add(types);

            FeatureNode deviceService = new FeatureNode()
            {
                Name    = "DeviceService",
                Feature = Feature.DeviceService,
                State   = FeatureState.Undefined,
                Status  = FeatureStatus.Group
            };

            featuresSet.Nodes.Add(deviceService);

            FeatureNode capabilities = new FeatureNode()
            {
                Name    = "Capabilities",
                Feature = Feature.Capabilities,
                State   = FeatureState.Undefined,
                Status  = FeatureStatus.Group
            };

            deviceService.Nodes.Add(capabilities);
            capabilities.Nodes.Add(new FeatureNode()
            {
                Name = "GetCapabilities", Feature = Feature.GetCapabilities
            });
            capabilities.Nodes.Add(new FeatureNode()
            {
                Name = "GetServices", Feature = Feature.GetServices
            });

            FeatureNode network = new FeatureNode()
            {
                Name    = "Network",
                Feature = Feature.Network,
                State   = FeatureState.Undefined,
                Status  = FeatureStatus.Group
            };

            deviceService.Nodes.Add(network);

            network.Nodes.Add(new FeatureNode()
            {
                Name    = "ZeroConfiguration",
                Feature = Feature.ZeroConfiguration
            });
            network.Nodes.Add(new FeatureNode()
            {
                Name = "NTP", Feature = Feature.NTP
            });
            network.Nodes.Add(new FeatureNode()
            {
                Name = "IPv6", Feature = Feature.IPv6
            });
            network.Nodes.Add(new FeatureNode()
            {
                Name = "DHCPv6", Feature = Feature.DHCPv6
            });
            network.Nodes.Add(new FeatureNode()
            {
                Name = "DynamicDNS", Feature = Feature.DynamicDNS
            });
            network.Nodes.Add(new FeatureNode()
            {
                Name = "IPFilter", Feature = Feature.IPFilter
            });

            {
                FeatureNode system = new FeatureNode()
                {
                    Name    = "System",
                    Feature = Feature.System,
                    State   = FeatureState.Undefined,
                    Status  = FeatureStatus.Group
                };
                deviceService.Nodes.Add(system);

                var systemLog = new FeatureNode()
                {
                    Name = "SystemLog", Feature = Feature.SystemLogging
                };
                var httpSystemLog = new FeatureNode()
                {
                    Name = "HTTPSystemLog", Feature = Feature.HttpSystemLogging
                };
                var httpFirmwareUpgrade = new FeatureNode()
                {
                    Name = "HTTPFirmwareUpgrade", Feature = Feature.HttpFirmwareUpgrade
                };
                var httpSupportInformation = new FeatureNode()
                {
                    Name = "HTTPSupportInformation", Feature = Feature.HttpSupportInformation
                };
                var httpSystemBackup = new FeatureNode()
                {
                    Name = "HTTPSystemBackup", Feature = Feature.HttpSystemBackup
                };

                system.Nodes.Add(systemLog);
                system.Nodes.Add(httpSystemLog);
                system.Nodes.Add(httpFirmwareUpgrade);
                system.Nodes.Add(httpSupportInformation);
                system.Nodes.Add(httpSystemBackup);
            }

            {
                var deviceServiceSecurity = new FeatureNode()
                {
                    Name = "Security", Feature = Feature.DeviceServiceSecurity, Status = FeatureStatus.Group
                };
                deviceService.Nodes.Add(deviceServiceSecurity);

                deviceServiceSecurity.Nodes.Add(new FeatureNode()
                {
                    Name = "Default Access Policy", Feature = Feature.DefaultAccessPolicy
                });
                deviceServiceSecurity.Nodes.Add(new FeatureNode()
                {
                    Name = "Maximum Users", Feature = Feature.MaxUsers
                });
                deviceServiceSecurity.Nodes.Add(new FeatureNode()
                {
                    Name = "Remote User Handling", Feature = Feature.RemoteUserHandling
                });
                deviceServiceSecurity.Nodes.Add(new FeatureNode()
                {
                    Name = "Maximum Username Length", Feature = Feature.MaximumUsernameLength
                });
                deviceServiceSecurity.Nodes.Add(new FeatureNode()
                {
                    Name = "Maximum Password Length", Feature = Feature.MaximumPasswordLength
                });
            }


            FeatureNode deviceIo = new FeatureNode()
            {
                Name    = "DeviceIo",
                Feature = Feature.DeviceIO,
                State   = FeatureState.Undefined,
                Status  = FeatureStatus.Group
            };

            deviceService.Nodes.Add(deviceIo);

            FeatureNode deviceIoRelayOutputs = new FeatureNode()
            {
                Name    = "DeviceIoRelayOutputs",
                Feature = Feature.DeviceIORelayOutputs
            };

            deviceIo.Nodes.Add(deviceIoRelayOutputs);

            {
                FeatureNode deviceIoRelayOutputsBistable = new FeatureNode()
                {
                    Name    = "DeviceIoRelayOutputsBistable",
                    Feature = Feature.DeviceIORelayOutputsBistable
                };
                FeatureNode deviceIoRelayOutputsBistableOpen = new FeatureNode()
                {
                    Name    = "DeviceIoRelayOutputsBistableOpen",
                    Feature =
                        Feature.DeviceIORelayOutputsBistableOpen
                };
                FeatureNode deviceIoRelayOutputsBistableClosed = new FeatureNode()
                {
                    Name    = "DeviceIoRelayOutputsBistableClosed",
                    Feature =
                        Feature.DeviceIORelayOutputsBistableClosed
                };

                deviceIoRelayOutputsBistable.Nodes.Add(deviceIoRelayOutputsBistableOpen);
                deviceIoRelayOutputsBistable.Nodes.Add(deviceIoRelayOutputsBistableClosed);

                deviceIoRelayOutputs.Nodes.Add(deviceIoRelayOutputsBistable);
            }

            {
                FeatureNode deviceIoRelayOutputsMonostable = new FeatureNode()
                {
                    Name    = "DeviceIoRelayOutputsMonostable",
                    Feature = Feature.DeviceIORelayOutputsMonostable
                };

                FeatureNode deviceIoRelayOutputsMonostableOpen = new FeatureNode()
                {
                    Name    = "DeviceIoRelayOutputsMonostableOpen",
                    Feature =
                        Feature.DeviceIORelayOutputsMonostableOpen
                };
                FeatureNode deviceIoRelayOutputsMonostableClosed = new FeatureNode()
                {
                    Name    = "DeviceIoRelayOutputsMonostableClosed",
                    Feature =
                        Feature.DeviceIORelayOutputsMonostableClosed
                };

                deviceIoRelayOutputsMonostable.Nodes.Add(deviceIoRelayOutputsMonostableOpen);
                deviceIoRelayOutputsMonostable.Nodes.Add(deviceIoRelayOutputsMonostableClosed);

                deviceIoRelayOutputs.Nodes.Add(deviceIoRelayOutputsMonostable);
            }

            {
                var monitoringEvents = new FeatureNode()
                {
                    Name = "Monitoring Events", Feature = Feature.MonitoringEvents, Status = FeatureStatus.Group
                };
                featuresSet.Nodes.Add(monitoringEvents);

                monitoringEvents.Nodes.Add(new FeatureNode()
                {
                    Name = "Monitoring/ProcessorUsage", Feature = Feature.MonitoringProcessorUsageEvent
                });
                monitoringEvents.Nodes.Add(new FeatureNode()
                {
                    Name = "Monitoring/OperatingTime/LastReset", Feature = Feature.MonitoringOperatingTimeLastResetEvent
                });
                monitoringEvents.Nodes.Add(new FeatureNode()
                {
                    Name = "Monitoring/OperatingTime/LastReboot", Feature = Feature.MonitoringOperatingTimeLastRebootEvent
                });
                monitoringEvents.Nodes.Add(new FeatureNode()
                {
                    Name = "Monitoring/OperatingTime/LastClockSynchronization", Feature = Feature.MonitoringOperatingTimeLastClockSynchronizationEvent
                });
                monitoringEvents.Nodes.Add(new FeatureNode()
                {
                    Name = "Monitoring/Backup/Last", Feature = Feature.MonitoringBackupLastEvent
                });
                monitoringEvents.Nodes.Add(new FeatureNode()
                {
                    Name = "Device/HardwareFailure/FanFailure", Feature = Feature.DeviceHardwareFailureFanFailureEvent
                });
                monitoringEvents.Nodes.Add(new FeatureNode()
                {
                    Name = "DeviceHardware/FailurePower/SupplyFailure", Feature = Feature.DeviceHardwareFailurePowerSupplyFailureEvent
                });
                monitoringEvents.Nodes.Add(new FeatureNode()
                {
                    Name = "Device/HardwareFailure/StorageFailure", Feature = Feature.DeviceHardwareFailureStorageFailureEvent
                });
                monitoringEvents.Nodes.Add(new FeatureNode()
                {
                    Name = "Device/HardwareFailure/TemperatureCritical", Feature = Feature.DeviceHardwareFailureTemperatureCriticalEvent
                });
            }

            {
                FeatureNode events = new FeatureNode()
                {
                    Name = "Events", Feature = Feature.EventsService
                };
                featuresSet.Nodes.Add(events);

                events.Nodes.Add(new FeatureNode()
                {
                    Name = "Persistent Notification Storage", Feature = Feature.PersistentNotificationStorage
                });
                events.Nodes.Add(new FeatureNode()
                {
                    Name = "WS Basic Notification", Feature = Feature.WSBasicNotification
                });

                var getServiceCapabilities = new FeatureNode()
                {
                    Name        = "EventServiceCapabilities",
                    DisplayName = "Get Service Capabilities",
                    Feature     = Feature.EventsServiceCapabilities,
                    State       = FeatureState.Undefined,
                    Status      = FeatureStatus.Group
                };
                getServiceCapabilities.Nodes.Add(new FeatureNode()
                {
                    Name = "MaxPullPoints", Feature = Feature.MaxPullPoints
                });

                events.Nodes.Add(getServiceCapabilities);
            }
            FeatureNode media = new FeatureNode()
            {
                Name = "Media", Feature = Feature.MediaService
            };

            featuresSet.Nodes.Add(media);

            FeatureNode video = new FeatureNode()
            {
                Name    = "VideoCodec",
                Feature = Feature.Video,
                State   = FeatureState.Undefined,
                Status  = FeatureStatus.Group
            };

            media.Nodes.Add(video);
            video.Nodes.Add(new FeatureNode()
            {
                Name = "JPEG", Feature = Feature.JPEG
            });
            video.Nodes.Add(new FeatureNode()
            {
                Name = "H264", Feature = Feature.H264
            });
            video.Nodes.Add(new FeatureNode()
            {
                Name = "MPEG4", Feature = Feature.MPEG4
            });

            FeatureNode audio = new FeatureNode()
            {
                Name = "Audio", Feature = Feature.Audio
            };

            media.Nodes.Add(audio);

            audio.Nodes.Add(new FeatureNode()
            {
                Name = "G711", Feature = Feature.G711
            });
            audio.Nodes.Add(new FeatureNode()
            {
                Name = "G726", Feature = Feature.G726
            });
            audio.Nodes.Add(new FeatureNode()
            {
                Name = "AAC", Feature = Feature.AAC
            });

            FeatureNode backchannel = new FeatureNode()
            {
                Name    = "Backchannel",
                Feature = Feature.AudioOutput
            };

            media.Nodes.Add(backchannel);
            backchannel.Nodes.Add(new FeatureNode()
            {
                Name = "BackchannelG711", Feature = Feature.AudioOutputG711
            });
            backchannel.Nodes.Add(new FeatureNode()
            {
                Name = "BackchannelG726", Feature = Feature.AudioOutputG726
            });
            backchannel.Nodes.Add(new FeatureNode()
            {
                Name = "BackchannelAAC", Feature = Feature.AudioOutputAAC
            });

            {
                FeatureNode rtss = new FeatureNode()
                {
                    Name    = "RTSS",
                    Feature = Feature.RTSS,
                    State   = FeatureState.Undefined,
                    Status  = FeatureStatus.Feature
                };
                media.Nodes.Add(rtss);

                rtss.Nodes.Add(new FeatureNode()
                {
                    Name = "RTPUDP", Feature = Feature.RTPUDP
                });
                rtss.Nodes.Add(new FeatureNode()
                {
                    Name = "RTPRTSPHTTP", Feature = Feature.RTPRTSPHTTP
                });
                rtss.Nodes.Add(new FeatureNode()
                {
                    Name = "RTPRTSPTCP", Feature = Feature.RTPRTSPTCP
                });
                rtss.Nodes.Add(new FeatureNode()
                {
                    Name = "RTPMulticastUDP", Feature = Feature.RTPMulticastUDP
                });

                media.Nodes.Add(new FeatureNode()
                {
                    Name = "SnapshotURI", Feature = Feature.SnapshotUri
                });
            }

            {
                FeatureNode ptz = new FeatureNode()
                {
                    Name = "PTZ", Feature = Feature.PTZService
                };
                featuresSet.Nodes.Add(ptz);

                FeatureNode ptzAbsolute = new FeatureNode()
                {
                    Name = "PTZAbsolute", Feature = Feature.PTZAbsolute
                };
                ptzAbsolute.Nodes.Add(new FeatureNode()
                {
                    Name = "PanTiltMovement", Feature = Feature.PTZAbsolutePanTilt
                });
                ptzAbsolute.Nodes.Add(new FeatureNode()
                {
                    Name = "ZoomMovement", Feature = Feature.PTZAbsoluteZoom
                });
                FeatureNode ptzRelative = new FeatureNode()
                {
                    Name = "PTZRelative", Feature = Feature.PTZRelative
                };
                ptzRelative.Nodes.Add(new FeatureNode()
                {
                    Name = "PanTiltMovement", Feature = Feature.PTZRelativePanTilt
                });
                ptzRelative.Nodes.Add(new FeatureNode()
                {
                    Name = "ZoomMovement", Feature = Feature.PTZRelativeZoom
                });
                FeatureNode ptzContinious = new FeatureNode()
                {
                    Name = "PTZContinuous", Feature = Feature.PTZContinious
                };
                ptzContinious.Nodes.Add(new FeatureNode()
                {
                    Name = "PanTiltSpeedConfiguration", Feature = Feature.PTZContinuousPanTilt
                });
                ptzContinious.Nodes.Add(new FeatureNode()
                {
                    Name = "ZoomSpeedConfiguration", Feature = Feature.PTZContinuousZoom
                });
                FeatureNode ptzPresets = new FeatureNode()
                {
                    Name = "PTZPresets", Feature = Feature.PTZPresets
                };
                FeatureNode ptzHome = new FeatureNode()
                {
                    Name = "PTZHome", Feature = Feature.PTZHome
                };
                ptzHome.Nodes.Add(new FeatureNode()
                {
                    Name = "ConfigurableHomePosition", Feature = Feature.PTZConfigurableHome
                });
                ptzHome.Nodes.Add(new FeatureNode()
                {
                    Name = "FixedHomePosition", Feature = Feature.PTZFixedHome
                });
                FeatureNode ptzAuxiliary = new FeatureNode()
                {
                    Name = "PTZAuxiliary", Feature = Feature.PTZAuxiliary
                };
                FeatureNode ptzSpeed = new FeatureNode()
                {
                    Name = "PTZSpeed", Feature = Feature.PTZSpeed
                };
                ptzSpeed.Nodes.Add(new FeatureNode()
                {
                    Name = "PanTiltSpeed", Feature = Feature.PTZSpeedPanTilt
                });
                ptzSpeed.Nodes.Add(new FeatureNode()
                {
                    Name = "ZoomSpeed", Feature = Feature.PTZSpeedZoom
                });

                ptz.Nodes.AddRange(new FeatureNode[]
                {
                    ptzAbsolute, ptzRelative, ptzContinious, ptzPresets, ptzHome, ptzAuxiliary,
                    ptzSpeed
                });
            }

            {
                FeatureNode io = new FeatureNode()
                {
                    Name = "IO", Feature = Feature.DeviceIoService
                };
                featuresSet.Nodes.Add(io);
                io.Nodes.Add(new FeatureNode()
                {
                    Name = "RelayOutput", Feature = Feature.RelayOutputs
                });
                io.Nodes.Add(new FeatureNode()
                {
                    Name = "DigitalInputs", Feature = Feature.DigitalInputs
                });
            }

            {
                FeatureNode imaging = new FeatureNode()
                {
                    Name = "Imaging", Feature = Feature.ImagingService
                };
                featuresSet.Nodes.Add(imaging);
                imaging.Nodes.Add(new FeatureNode()
                {
                    Name = "IrCutfilter Configuration", Feature = Feature.IrCutfilterConfiguration
                });
            }

            {
                FeatureNode analytics = new FeatureNode()
                {
                    Name = "Analytics", Feature = Feature.AnalyticsService
                };
                featuresSet.Nodes.Add(analytics);
            }

            {
                FeatureNode recording = new FeatureNode()
                {
                    Name = "Recording", Feature = Feature.RecordingControlService
                };
                featuresSet.Nodes.Add(recording);
                FeatureNode dynamicRecording = new FeatureNode()
                {
                    Name = "DynamicRecordings", Feature = Feature.DynamicRecordings
                };
                recording.Nodes.Add(dynamicRecording);

                FeatureNode dynamicTracks = new FeatureNode()
                {
                    Name = "DynamicTracks", Feature = Feature.DynamicTracks
                };
                recording.Nodes.Add(dynamicTracks);

                FeatureNode audioRecording = new FeatureNode()
                {
                    Name = "AudioRecording", Feature = Feature.AudioRecording
                };
                recording.Nodes.Add(audioRecording);

                recording.Nodes.Add(new FeatureNode()
                {
                    Name = "RecordingOptions", Feature = Feature.RecordingOptions
                });

                recording.Nodes.Add(new FeatureNode()
                {
                    Name = "DeleteTrackDataEvent", Feature = Feature.RecordingConfigDeleteTrackDataEvent
                });

                recording.Nodes.Add(new FeatureNode()
                {
                    Name = "MetadataRecording", Feature = Feature.MetadataRecording
                });
            }

            {
                FeatureNode search = new FeatureNode()
                {
                    Name = "Search", Feature = Feature.RecordingSearchService
                };
                featuresSet.Nodes.Add(search);
                FeatureNode metadataSearch = new FeatureNode()
                {
                    Name = "MetadataSearch", Feature = Feature.MetadataSearch
                };
                search.Nodes.Add(metadataSearch);
                FeatureNode ptzSearch = new FeatureNode()
                {
                    Name = "PTZPositionSearch", Feature = Feature.PTZPositionSearch
                };
                search.Nodes.Add(ptzSearch);
            }

            FeatureNode doorControl = new FeatureNode()
            {
                Name = "DoorControl", Feature = Feature.DoorControlService
            };
            FeatureNode doorEntityNode = CreateDoorEntityNode();
            FeatureNode eventNode      = CreateDoorEventsNode();

            doorControl.Nodes.Add(doorEntityNode);
            doorControl.Nodes.Add(eventNode);
            featuresSet.Nodes.Add(doorControl);

            FeatureNode pacs = CreatePacsServiceNode();

            featuresSet.Nodes.Add(pacs);

            {
                FeatureNode replay = new FeatureNode()
                {
                    Name = "Replay", Feature = Feature.ReplayService
                };
                featuresSet.Nodes.Add(replay);
                replay.Nodes.Add(new FeatureNode()
                {
                    Name = "ReverseReplay", Feature = Feature.ReverseReplay
                });
                replay.Nodes.Add(new FeatureNode()
                {
                    Name = "ReplayRTPRTSPTCP", Feature = Feature.ReplayServiceRTPRTSPTCP
                });
            }

            {
                FeatureNode receiver = new FeatureNode()
                {
                    Name = "Receiver", Feature = Feature.ReceiverService
                };
                featuresSet.Nodes.Add(receiver);
            }

            featuresSet.Nodes.Add(CreateAdvancedSecurityNode());

            featuresSet.Nodes.Add(CreateCredentialNode());

            featuresSet.Nodes.Add(CreateAccessRulesNode());

            featuresSet.Nodes.Add(CreateScheduleNode());

            return(featuresSet);
        }