├── .gitignore ├── Common.UnitTests ├── Common.UnitTests.csproj ├── Properties │ └── AssemblyInfo.cs ├── Util │ ├── NetworkCredentialExtensionsTests.cs │ └── TimeUtilTests.cs └── packages.config ├── Common ├── Common.csproj ├── EventReceiver │ ├── DeviceEventReceiverException.cs │ ├── IConnectionParameters.cs │ ├── IDeviceEventReceiver.cs │ └── IDeviceEventReceiverFactory.cs ├── Events │ └── DeviceEvent.cs ├── HttpGlobals.cs ├── Properties │ └── AssemblyInfo.cs └── Util │ ├── NetworkCredentialExtensions.cs │ └── TimeUtil.cs ├── Devices.UnitTests ├── Devices.UnitTests.csproj ├── Onvif │ └── OnvifEventReceiverTests.cs ├── Properties │ └── AssemblyInfo.cs └── packages.config ├── Devices ├── DeviceEventReceiverFactory.cs ├── Devices.csproj ├── Onvif │ ├── Behaviour │ │ ├── CustomAddressHeader.cs │ │ ├── CustomEndpointBehavior.cs │ │ └── CustomMessageInspector.cs │ ├── IOnvifClientFactory.cs │ ├── OnvifClientFactory.cs │ ├── OnvifEventReceiver.cs │ └── Security │ │ ├── DigestSecurityHeader.cs │ │ └── SecurityToken.cs ├── Properties │ └── AssemblyInfo.cs └── Service References │ ├── Onvif.Contracts.DeviceManagement │ ├── Devices.Onvif.Contracts.DeviceManagement.AddScopesResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.BackupFile.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.BinaryData.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.Capabilities.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.Certificate.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.CertificateInformation.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.CertificateStatus.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.CreateCertificateResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.CreateUsersResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.DNSInformation.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.DeleteCertificatesResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.DeleteDot1XConfigurationResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.DeleteUsersResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.DeviceServiceCapabilities.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.DiscoveryMode.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.Dot11AvailableNetworks.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.Dot11Capabilities.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.Dot11Status.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.Dot1XConfiguration.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.DynamicDNSInformation.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.GetCACertificatesResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.GetCapabilitiesResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.GetCertificateInformationResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.GetCertificatesResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.GetCertificatesStatusResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.GetDPAddressesResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.GetDeviceInformationResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.GetDot11CapabilitiesResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.GetDot1XConfigurationsResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.GetEndpointReferenceResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.GetNetworkInterfacesResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.GetNetworkProtocolsResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.GetPkcs10RequestResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.GetRelayOutputsResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.GetScopesResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.GetServicesResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.GetStorageConfigurationsResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.GetSystemBackupResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.GetSystemUrisResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.GetSystemUrisResponseExtension.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.GetUsersResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.GetWsdlUrlResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.HostnameInformation.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.IPAddressFilter.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.LoadCACertificatesResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.LoadCertificateWithPrivateKeyResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.LoadCertificatesResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.NTPInformation.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.NetworkGateway.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.NetworkHost.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.NetworkInterface.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.NetworkProtocol.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.NetworkZeroConfiguration.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.RelayOutput.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.RemoteUser.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.RemoveScopesResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.RestoreSystemResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.ScanAvailableDot11NetworksResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.Scope.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.Service.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.SetCertificatesStatusResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.SetDNSResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.SetDPAddressesResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.SetDynamicDNSResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.SetHostnameResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.SetNTPResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.SetNetworkDefaultGatewayResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.SetNetworkProtocolsResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.SetScopesResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.SetUserResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.StartFirmwareUpgradeResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.StartSystemRestoreResponse.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.StorageConfiguration.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.SupportInformation.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.SystemDateTime.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.SystemLog.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.SystemLogUri.datasource │ ├── Devices.Onvif.Contracts.DeviceManagement.User.datasource │ ├── Reference.cs │ ├── Reference.svcmap │ ├── b-2.xsd │ ├── bf-2.xsd │ ├── configuration.svcinfo │ ├── configuration91.svcinfo │ ├── devicemgmt.wsdl │ ├── include.xsd │ ├── item.xsd │ ├── onvif.xsd │ ├── t-1.xsd │ ├── ws-addr.xsd │ ├── xml.xsd │ └── xmlmime.xsd │ └── Onvif.Contracts.Events │ ├── Devices.Onvif.Contracts.Events.Capabilities.datasource │ ├── Devices.Onvif.Contracts.Events.CreatePullPointResponse.datasource │ ├── Devices.Onvif.Contracts.Events.CreatePullPointResponse1.datasource │ ├── Devices.Onvif.Contracts.Events.CreatePullPointSubscriptionResponse.datasource │ ├── Devices.Onvif.Contracts.Events.DestroyPullPointResponse.datasource │ ├── Devices.Onvif.Contracts.Events.DestroyPullPointResponse1.datasource │ ├── Devices.Onvif.Contracts.Events.EndpointReferenceType.datasource │ ├── Devices.Onvif.Contracts.Events.GetCurrentMessageResponse.datasource │ ├── Devices.Onvif.Contracts.Events.GetCurrentMessageResponse1.datasource │ ├── Devices.Onvif.Contracts.Events.GetEventPropertiesResponse.datasource │ ├── Devices.Onvif.Contracts.Events.GetMessagesResponse.datasource │ ├── Devices.Onvif.Contracts.Events.GetMessagesResponse1.datasource │ ├── Devices.Onvif.Contracts.Events.NotificationMessageHolderType.datasource │ ├── Devices.Onvif.Contracts.Events.PauseSubscriptionResponse.datasource │ ├── Devices.Onvif.Contracts.Events.PauseSubscriptionResponse1.datasource │ ├── Devices.Onvif.Contracts.Events.PullMessagesResponse.datasource │ ├── Devices.Onvif.Contracts.Events.RenewResponse.datasource │ ├── Devices.Onvif.Contracts.Events.RenewResponse1.datasource │ ├── Devices.Onvif.Contracts.Events.ResumeSubscriptionResponse.datasource │ ├── Devices.Onvif.Contracts.Events.ResumeSubscriptionResponse1.datasource │ ├── Devices.Onvif.Contracts.Events.SeekResponse.datasource │ ├── Devices.Onvif.Contracts.Events.SubscribeResponse.datasource │ ├── Devices.Onvif.Contracts.Events.SubscribeResponse1.datasource │ ├── Devices.Onvif.Contracts.Events.TopicSetType.datasource │ ├── Devices.Onvif.Contracts.Events.UnsubscribeResponse.datasource │ ├── Devices.Onvif.Contracts.Events.UnsubscribeResponse1.datasource │ ├── Reference.cs │ ├── Reference.svcmap │ ├── WS-BaseNotification.wsdl │ ├── WS-Resource.wsdl │ ├── b-2.xsd │ ├── bf-2.xsd │ ├── configuration.svcinfo │ ├── configuration91.svcinfo │ ├── event-vs.wsdl │ ├── r-2.xsd │ ├── t-1.xsd │ ├── ws-addr.xsd │ └── xml.xsd ├── EventsReceiver.UnitTests ├── EventsReceiver.UnitTests.csproj ├── Models │ └── MainWindowModelTests.cs ├── Properties │ └── AssemblyInfo.cs ├── ViewModels │ └── MainWindowViewModelTests.cs └── packages.config ├── EventsReceiver ├── App.config ├── App.xaml ├── App.xaml.cs ├── Commands │ └── CommandHandler.cs ├── EventsReceiver.csproj ├── Models │ ├── ConnectionParameters.cs │ ├── ConnectionStateInfo.cs │ ├── IMainWindowModel.cs │ └── MainWindowModel.cs ├── Properties │ ├── Annotations.cs │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings ├── ValidationRules │ └── AddressValidationRule.cs ├── ViewModelLocator.cs ├── ViewModels │ └── MainWindowViewModel.cs └── Views │ ├── MainWindow.xaml │ └── MainWindow.xaml.cs ├── LICENSE ├── OnvifEvents.sln └── README.md /Common.UnitTests/Common.UnitTests.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {C88C1B8D-C37B-4F99-A1A3-44986855D5C7} 8 | Library 9 | Properties 10 | Common.UnitTests 11 | Common.UnitTests 12 | v4.6 13 | 512 14 | 15 | 16 | 17 | true 18 | full 19 | false 20 | bin\Debug\ 21 | DEBUG;TRACE 22 | prompt 23 | 4 24 | 25 | 26 | pdbonly 27 | true 28 | bin\Release\ 29 | TRACE 30 | prompt 31 | 4 32 | 33 | 34 | 35 | ..\packages\NUnit.2.6.4\lib\nunit.framework.dll 36 | True 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | {df0a93d4-4fa2-480f-9351-2af6a9d06c96} 52 | Common 53 | 54 | 55 | 56 | 63 | -------------------------------------------------------------------------------- /Common.UnitTests/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("Common.UnitTests")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("Common.UnitTests")] 13 | [assembly: AssemblyCopyright("Copyright © 2016")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("c88c1b8d-c37b-4f99-a1a3-44986855d5c7")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /Common.UnitTests/Util/NetworkCredentialExtensionsTests.cs: -------------------------------------------------------------------------------- 1 | using System.Net; 2 | using Common.Util; 3 | using NUnit.Framework; 4 | 5 | namespace Common.UnitTests.Util 6 | { 7 | [TestFixture] 8 | class NetworkCredentialExtensionsTests 9 | { 10 | [TestCase("1", "1")] 11 | [TestCase("1", "")] 12 | [TestCase("1", null)] 13 | public void IsEmpty_LoginAndOrPasswordAreSet_ReturnsFalse(string login, string password) 14 | { 15 | var credential = new NetworkCredential(login, password); 16 | Assert.IsFalse(credential.IsEmpty()); 17 | } 18 | 19 | [Test] 20 | public void IsEmpty_LoginAndOrPasswordNotSet_ReturnsTrue() 21 | { 22 | var credential = new NetworkCredential(); 23 | Assert.IsTrue(credential.IsEmpty()); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Common.UnitTests/Util/TimeUtilTests.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Common.Util; 3 | using NUnit.Framework; 4 | 5 | namespace Common.UnitTests.Util 6 | { 7 | [TestFixture] 8 | class TimeUtilTests 9 | { 10 | [Test] 11 | public void IsTimeOver_TimeHasNotPassed_ReturnsFalse() 12 | { 13 | int lastTimeCalled = Environment.TickCount + 60*1000; 14 | 15 | Assert.IsFalse(TimeUtil.IsTimeOver(lastTimeCalled, 1000)); 16 | } 17 | 18 | [Test] 19 | public void IsTimeOver_TimeHasPassed_ReturnsTrue() 20 | { 21 | int lastTimeCalled = Environment.TickCount - 60 * 1000; 22 | 23 | Assert.IsTrue(TimeUtil.IsTimeOver(lastTimeCalled, 1000)); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Common.UnitTests/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Common/Common.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {DF0A93D4-4FA2-480F-9351-2AF6A9D06C96} 8 | Library 9 | Properties 10 | Common 11 | Common 12 | v4.6 13 | 512 14 | 15 | 16 | 17 | true 18 | full 19 | false 20 | bin\Debug\ 21 | DEBUG;TRACE 22 | prompt 23 | 4 24 | 25 | 26 | pdbonly 27 | true 28 | bin\Release\ 29 | TRACE 30 | prompt 31 | 4 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 56 | -------------------------------------------------------------------------------- /Common/EventReceiver/DeviceEventReceiverException.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Runtime.Serialization; 3 | 4 | namespace Common.EventReceiver 5 | { 6 | [Serializable] 7 | public class DeviceEventReceiverException : Exception 8 | { 9 | // 10 | // For guidelines regarding the creation of new exception types, see 11 | // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/cpconerrorraisinghandlingguidelines.asp 12 | // and 13 | // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncscol/html/csharp07192001.asp 14 | // 15 | 16 | public DeviceEventReceiverException() 17 | { 18 | } 19 | 20 | public DeviceEventReceiverException(string message) : base(message) 21 | { 22 | } 23 | 24 | public DeviceEventReceiverException(string message, Exception inner) : base(message, inner) 25 | { 26 | } 27 | 28 | protected DeviceEventReceiverException( 29 | SerializationInfo info, 30 | StreamingContext context) : base(info, context) 31 | { 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /Common/EventReceiver/IConnectionParameters.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Net; 3 | 4 | namespace Common.EventReceiver 5 | { 6 | public interface IConnectionParameters 7 | { 8 | Uri ConnectionUri { get; } 9 | 10 | NetworkCredential Credentials { get; } 11 | 12 | TimeSpan ConnectionTimeout { get; } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Common/EventReceiver/IDeviceEventReceiver.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading; 3 | using System.Threading.Tasks; 4 | using Common.Events; 5 | 6 | namespace Common.EventReceiver 7 | { 8 | public interface IDeviceEventReceiver 9 | { 10 | IConnectionParameters ConnectionParameters { get; } 11 | 12 | event EventHandler EventReceived; 13 | 14 | Task ConnectAsync(CancellationToken cancellationToken); 15 | 16 | Task ReceiveAsync(CancellationToken cancellationToken); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Common/EventReceiver/IDeviceEventReceiverFactory.cs: -------------------------------------------------------------------------------- 1 | namespace Common.EventReceiver 2 | { 3 | public interface IDeviceEventReceiverFactory 4 | { 5 | IDeviceEventReceiver Create(IConnectionParameters connectionParameters); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Common/Events/DeviceEvent.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Common.Events 4 | { 5 | public class DeviceEvent 6 | { 7 | public DateTime Timestamp { get; } = DateTime.UtcNow; 8 | public string Message { get; } 9 | 10 | public DeviceEvent(string message) 11 | { 12 | Message = message; 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Common/HttpGlobals.cs: -------------------------------------------------------------------------------- 1 | namespace Common 2 | { 3 | public static class HttpGlobals 4 | { 5 | public const string SchemaPrefix = "http://"; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Common/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("Common")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("Common")] 13 | [assembly: AssemblyCopyright("Copyright © 2016")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("df0a93d4-4fa2-480f-9351-2af6a9d06c96")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | [assembly: InternalsVisibleTo("EventsReceiver.UnitTests")] 38 | [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] 39 | -------------------------------------------------------------------------------- /Common/Util/NetworkCredentialExtensions.cs: -------------------------------------------------------------------------------- 1 | using System.Net; 2 | 3 | namespace Common.Util 4 | { 5 | public static class NetworkCredentialExtensions 6 | { 7 | public static bool IsEmpty(this NetworkCredential networkCredential) 8 | { 9 | if (string.IsNullOrEmpty(networkCredential.UserName) || networkCredential.Password == null) 10 | return true; 11 | 12 | return false; 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Common/Util/TimeUtil.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Common.Util 4 | { 5 | public static class TimeUtil 6 | { 7 | public static bool IsTimeOver(int previousTicks, int interval) 8 | { 9 | if (Math.Abs(Environment.TickCount - previousTicks) > interval) 10 | return true; 11 | 12 | return false; 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Devices.UnitTests/Devices.UnitTests.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {183F0876-5B96-4716-8374-F8BE172FCF08} 8 | Library 9 | Properties 10 | Devices.UnitTests 11 | Devices.UnitTests 12 | v4.6 13 | 512 14 | 15 | 16 | 17 | true 18 | full 19 | false 20 | bin\Debug\ 21 | DEBUG;TRACE 22 | prompt 23 | 4 24 | 25 | 26 | pdbonly 27 | true 28 | bin\Release\ 29 | TRACE 30 | prompt 31 | 4 32 | 33 | 34 | 35 | ..\packages\Moq.4.5.23\lib\net45\Moq.dll 36 | True 37 | 38 | 39 | ..\packages\NUnit.2.6.4\lib\nunit.framework.dll 40 | True 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | {df0a93d4-4fa2-480f-9351-2af6a9d06c96} 57 | Common 58 | 59 | 60 | {9c6d5ef3-75dd-44f4-b349-b019532e2dfd} 61 | Devices 62 | 63 | 64 | 65 | 72 | -------------------------------------------------------------------------------- /Devices.UnitTests/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("Devices.UnitTests")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("Devices.UnitTests")] 13 | [assembly: AssemblyCopyright("Copyright © 2016")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("183f0876-5b96-4716-8374-f8be172fcf08")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /Devices.UnitTests/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Devices/DeviceEventReceiverFactory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Common.EventReceiver; 3 | using Devices.Onvif; 4 | 5 | namespace Devices 6 | { 7 | public class DeviceEventReceiverFactory : IDeviceEventReceiverFactory 8 | { 9 | public IDeviceEventReceiver Create(IConnectionParameters connectionParameters) 10 | { 11 | return new OnvifEventReceiver(connectionParameters, new OnvifClientFactory(), TimeSpan.FromSeconds(60)); 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Devices/Onvif/Behaviour/CustomAddressHeader.cs: -------------------------------------------------------------------------------- 1 | using System.ServiceModel.Channels; 2 | using System.Xml; 3 | 4 | namespace Devices.Onvif.Behaviour 5 | { 6 | class CustomAddressHeader : AddressHeader 7 | { 8 | private readonly XmlElement _xmlElement; 9 | 10 | public override string Name { get; } 11 | public override string Namespace { get; } 12 | 13 | public CustomAddressHeader(XmlElement xmlElement) 14 | { 15 | _xmlElement = xmlElement; 16 | 17 | Name = xmlElement.LocalName; 18 | Namespace = xmlElement.NamespaceURI; 19 | } 20 | 21 | protected override void OnWriteAddressHeaderContents(XmlDictionaryWriter writer) 22 | { 23 | _xmlElement.WriteContentTo(writer); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Devices/Onvif/Behaviour/CustomEndpointBehavior.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ServiceModel.Channels; 3 | using System.ServiceModel.Description; 4 | using System.ServiceModel.Dispatcher; 5 | 6 | namespace Devices.Onvif.Behaviour 7 | { 8 | class CustomEndpointBehavior : IEndpointBehavior 9 | { 10 | private readonly IClientMessageInspector _clientInspector; 11 | 12 | public CustomEndpointBehavior(IClientMessageInspector clientInspector) 13 | { 14 | if (clientInspector == null) 15 | throw new ArgumentNullException(nameof(clientInspector)); 16 | 17 | _clientInspector = clientInspector; 18 | } 19 | 20 | public void Validate(ServiceEndpoint endpoint) 21 | { 22 | } 23 | 24 | public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters) 25 | { 26 | } 27 | 28 | public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher) 29 | { 30 | } 31 | 32 | public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime) 33 | { 34 | clientRuntime.MessageInspectors.Add(_clientInspector); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /Devices/Onvif/Behaviour/CustomMessageInspector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ServiceModel; 4 | using System.ServiceModel.Channels; 5 | using System.ServiceModel.Dispatcher; 6 | 7 | namespace Devices.Onvif.Behaviour 8 | { 9 | class CustomMessageInspector : IClientMessageInspector 10 | { 11 | private const string WsseNamespace = @"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"; 12 | 13 | public List Headers { get; } = new List(); 14 | 15 | public object BeforeSendRequest(ref Message request, IClientChannel channel) 16 | { 17 | if (Headers == null) 18 | return request; 19 | 20 | foreach (var header in Headers) 21 | request.Headers.Insert(0, header); 22 | 23 | return request; 24 | } 25 | public void AfterReceiveReply(ref Message reply, object correlationState) 26 | { 27 | foreach (var header in reply.Headers) 28 | if (header.Name.IndexOf("Security", StringComparison.InvariantCulture) != -1 && header.Namespace.Contains(WsseNamespace)) 29 | reply.Headers.UnderstoodHeaders.Add(header); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Devices/Onvif/IOnvifClientFactory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ServiceModel; 3 | using System.ServiceModel.Channels; 4 | using Common.EventReceiver; 5 | using Devices.Onvif.Security; 6 | 7 | namespace Devices.Onvif 8 | { 9 | internal interface IOnvifClientFactory 10 | { 11 | TService CreateClient(Uri uri, IConnectionParameters connectionParameters, MessageVersion messageEncodingVersion); 12 | TService CreateClient(EndpointAddress address, IConnectionParameters connectionParameters, MessageVersion messageEncodingVersion); 13 | void SetSecurityToken(SecurityToken token); 14 | } 15 | } -------------------------------------------------------------------------------- /Devices/Onvif/OnvifClientFactory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Net; 4 | using System.ServiceModel; 5 | using System.ServiceModel.Channels; 6 | using System.Text; 7 | using Common.EventReceiver; 8 | using Common.Util; 9 | using Devices.Onvif.Behaviour; 10 | using Devices.Onvif.Security; 11 | 12 | namespace Devices.Onvif 13 | { 14 | class OnvifClientFactory : IOnvifClientFactory 15 | { 16 | private SecurityToken _securityToken; 17 | 18 | static OnvifClientFactory() 19 | { 20 | ServicePointManager.Expect100Continue = false; 21 | } 22 | 23 | public TService CreateClient(Uri uri, IConnectionParameters connectionParameters, MessageVersion messageEncodingVersion) 24 | { 25 | return CreateClient(new EndpointAddress(uri), connectionParameters, messageEncodingVersion); 26 | } 27 | 28 | public TService CreateClient(EndpointAddress address, IConnectionParameters connectionParameters, MessageVersion messageEncodingVersion) 29 | { 30 | CustomBinding customBinding = CreateCustomBinding(connectionParameters.ConnectionTimeout, 31 | connectionParameters.Credentials, messageEncodingVersion); 32 | var factory = new ChannelFactory(customBinding); 33 | 34 | var clientInspector = new CustomMessageInspector(); 35 | 36 | if(_securityToken != null) 37 | clientInspector.Headers.Add(new DigestSecurityHeader(connectionParameters.Credentials, _securityToken)); 38 | 39 | var behavior = new CustomEndpointBehavior(clientInspector); 40 | 41 | factory.Endpoint.Behaviors.Add(behavior); 42 | 43 | if (factory.Credentials != null) 44 | { 45 | factory.Credentials.UserName.UserName = connectionParameters.Credentials.UserName; 46 | factory.Credentials.UserName.Password = connectionParameters.Credentials.Password; 47 | } 48 | 49 | TService service = factory.CreateChannel(address); 50 | return service; 51 | } 52 | 53 | public void SetSecurityToken(SecurityToken token) 54 | { 55 | _securityToken = token; 56 | } 57 | 58 | private static CustomBinding CreateCustomBinding(TimeSpan connectionTimeout, NetworkCredential credentials, MessageVersion messageVersion) 59 | { 60 | var binding = new CustomBinding(CreateBindingElements(messageVersion, false, credentials)) 61 | { 62 | CloseTimeout = connectionTimeout, 63 | OpenTimeout = connectionTimeout, 64 | SendTimeout = connectionTimeout, 65 | ReceiveTimeout = connectionTimeout 66 | }; 67 | 68 | return binding; 69 | } 70 | 71 | private static IEnumerable CreateBindingElements(MessageVersion messageVersion, bool useTls, NetworkCredential credentials) 72 | { 73 | var encoding = new TextMessageEncodingBindingElement(messageVersion, new UTF8Encoding(false)) 74 | { 75 | ReaderQuotas = { MaxStringContentLength = int.MaxValue } 76 | }; 77 | 78 | yield return encoding; 79 | 80 | HttpTransportBindingElement transport = CreateTransportBindingElement(useTls); 81 | transport.MaxReceivedMessageSize = int.MaxValue; 82 | transport.KeepAliveEnabled = false; 83 | transport.MaxBufferSize = int.MaxValue; 84 | transport.ProxyAddress = null; 85 | transport.BypassProxyOnLocal = true; 86 | transport.UseDefaultWebProxy = false; 87 | transport.TransferMode = TransferMode.StreamedResponse; 88 | transport.AuthenticationScheme = credentials.IsEmpty() ? AuthenticationSchemes.Anonymous : AuthenticationSchemes.Basic; 89 | 90 | yield return transport; 91 | } 92 | 93 | private static HttpTransportBindingElement CreateTransportBindingElement(bool useTls) 94 | { 95 | if (!useTls) 96 | return new HttpTransportBindingElement(); 97 | 98 | var transport = new HttpsTransportBindingElement { RequireClientCertificate = false }; 99 | return transport; 100 | } 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /Devices/Onvif/Security/DigestSecurityHeader.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.Linq; 4 | using System.Net; 5 | using System.Security.Cryptography; 6 | using System.ServiceModel.Channels; 7 | using System.Text; 8 | using System.Xml; 9 | 10 | namespace Devices.Onvif.Security 11 | { 12 | class DigestSecurityHeader : MessageHeader 13 | { 14 | private readonly NetworkCredential _credential; 15 | private readonly SecurityToken _token; 16 | private long _createdTimestamp; 17 | 18 | public DigestSecurityHeader(NetworkCredential credential, SecurityToken token) 19 | { 20 | if (credential == null) 21 | throw new ArgumentNullException(nameof(credential)); 22 | if (token == null) 23 | throw new ArgumentNullException(nameof(token)); 24 | 25 | _credential = credential; 26 | _token = token; 27 | _createdTimestamp = Stopwatch.GetTimestamp(); 28 | } 29 | 30 | public override string Name => "Security"; 31 | 32 | public override string Namespace => "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"; 33 | 34 | protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion) 35 | { 36 | string createdTime = GetCurrentServerTime().ToString("yyyy-MM-ddTHH:mm:ss.fffZ"); 37 | 38 | writer.WriteAttributeString("s", "mustUnderstand", null, "1"); 39 | writer.WriteStartElement("UsernameToken"); 40 | writer.WriteStartElement("Username"); 41 | writer.WriteString(_credential.UserName); 42 | writer.WriteEndElement(); 43 | writer.WriteStartElement("Password"); 44 | writer.WriteAttributeString("Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest"); 45 | writer.WriteString(ComputePasswordDigest(_credential.Password, _token.NonceBytes, createdTime)); 46 | writer.WriteEndElement(); 47 | writer.WriteStartElement("Nonce"); 48 | writer.WriteAttributeString("EncodingType", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary"); 49 | writer.WriteBase64(_token.NonceBytes, 0, _token.NonceBytes.Length); 50 | writer.WriteEndElement(); 51 | writer.WriteStartElement("Created", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"); 52 | writer.WriteString(createdTime); 53 | writer.WriteEndElement(); 54 | writer.WriteEndElement(); 55 | writer.Flush(); 56 | } 57 | 58 | private static string ComputePasswordDigest(string password, byte[] nonceBytes, string createdTime) 59 | { 60 | byte[] createdTimeBytes = Encoding.UTF8.GetBytes(createdTime); 61 | byte[] passwordBytes = Encoding.UTF8.GetBytes(password); 62 | 63 | byte[] aggregationBytes = nonceBytes.Concat(createdTimeBytes).Concat(passwordBytes).ToArray(); 64 | byte[] hashBytes = SHA1.Create().ComputeHash(aggregationBytes); 65 | 66 | return Convert.ToBase64String(hashBytes); 67 | } 68 | 69 | private DateTime GetCurrentServerTime() 70 | { 71 | long timestamp = Stopwatch.GetTimestamp(); 72 | long elapsedMilliseconds = (timestamp - _createdTimestamp) * 1000 / Stopwatch.Frequency; 73 | 74 | if (elapsedMilliseconds < 0) 75 | { 76 | _createdTimestamp = timestamp; 77 | return _token.ServerTime; 78 | } 79 | 80 | return _token.ServerTime + TimeSpan.FromTicks(elapsedMilliseconds * TimeSpan.TicksPerMillisecond); 81 | } 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /Devices/Onvif/Security/SecurityToken.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Devices.Onvif.Security 4 | { 5 | class SecurityToken 6 | { 7 | public DateTime ServerTime { get; } 8 | 9 | public byte[] NonceBytes { get; } 10 | 11 | public SecurityToken(DateTime serverTime, byte[] nonceBytes) 12 | { 13 | ServerTime = serverTime; 14 | NonceBytes = nonceBytes; 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Devices/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("Devices")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("Devices")] 13 | [assembly: AssemblyCopyright("Copyright © 2016")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("9c6d5ef3-75dd-44f4-b349-b019532e2dfd")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | [assembly: InternalsVisibleTo("Devices.UnitTests")] 38 | [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.AddScopesResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.AddScopesResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.BackupFile.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.BackupFile, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.BinaryData.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.BinaryData, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.Capabilities.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.Capabilities, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.Certificate.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.Certificate, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.CertificateInformation.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.CertificateInformation, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.CertificateStatus.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.CertificateStatus, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.CreateCertificateResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.CreateCertificateResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.CreateUsersResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.CreateUsersResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.DNSInformation.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.DNSInformation, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.DeleteCertificatesResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.DeleteCertificatesResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.DeleteDot1XConfigurationResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.DeleteDot1XConfigurationResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.DeleteUsersResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.DeleteUsersResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.DeviceServiceCapabilities.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.DeviceServiceCapabilities, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.DiscoveryMode.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.DiscoveryMode, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.Dot11AvailableNetworks.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.Dot11AvailableNetworks, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.Dot11Capabilities.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.Dot11Capabilities, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.Dot11Status.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.Dot11Status, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.Dot1XConfiguration.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.Dot1XConfiguration, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.DynamicDNSInformation.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.DynamicDNSInformation, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.GetCACertificatesResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.GetCACertificatesResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.GetCapabilitiesResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.GetCapabilitiesResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.GetCertificateInformationResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.GetCertificateInformationResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.GetCertificatesResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.GetCertificatesResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.GetCertificatesStatusResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.GetCertificatesStatusResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.GetDPAddressesResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.GetDPAddressesResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.GetDeviceInformationResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.GetDeviceInformationResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.GetDot11CapabilitiesResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.GetDot11CapabilitiesResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.GetDot1XConfigurationsResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.GetDot1XConfigurationsResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.GetEndpointReferenceResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.GetEndpointReferenceResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.GetNetworkInterfacesResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.GetNetworkInterfacesResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.GetNetworkProtocolsResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.GetNetworkProtocolsResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.GetPkcs10RequestResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.GetPkcs10RequestResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.GetRelayOutputsResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.GetRelayOutputsResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.GetScopesResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.GetScopesResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.GetServicesResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.GetServicesResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.GetStorageConfigurationsResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.GetStorageConfigurationsResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.GetSystemBackupResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.GetSystemBackupResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.GetSystemUrisResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.GetSystemUrisResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.GetSystemUrisResponseExtension.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.GetSystemUrisResponseExtension, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.GetUsersResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.GetUsersResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.GetWsdlUrlResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.GetWsdlUrlResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.HostnameInformation.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.HostnameInformation, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.IPAddressFilter.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.IPAddressFilter, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.LoadCACertificatesResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.LoadCACertificatesResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.LoadCertificateWithPrivateKeyResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.LoadCertificateWithPrivateKeyResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.LoadCertificatesResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.LoadCertificatesResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.NTPInformation.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.NTPInformation, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.NetworkGateway.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.NetworkGateway, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.NetworkHost.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.NetworkHost, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.NetworkInterface.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.NetworkInterface, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.NetworkProtocol.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.NetworkProtocol, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.NetworkZeroConfiguration.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.NetworkZeroConfiguration, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.RelayOutput.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.RelayOutput, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.RemoteUser.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.RemoteUser, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.RemoveScopesResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.RemoveScopesResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.RestoreSystemResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.RestoreSystemResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.ScanAvailableDot11NetworksResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.ScanAvailableDot11NetworksResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.Scope.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.Scope, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.Service.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.Service, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.SetCertificatesStatusResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.SetCertificatesStatusResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.SetDNSResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.SetDNSResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.SetDPAddressesResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.SetDPAddressesResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.SetDynamicDNSResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.SetDynamicDNSResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.SetHostnameResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.SetHostnameResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.SetNTPResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.SetNTPResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.SetNetworkDefaultGatewayResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.SetNetworkDefaultGatewayResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.SetNetworkProtocolsResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.SetNetworkProtocolsResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.SetScopesResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.SetScopesResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.SetUserResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.SetUserResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.StartFirmwareUpgradeResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.StartFirmwareUpgradeResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.StartSystemRestoreResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.StartSystemRestoreResponse, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.StorageConfiguration.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.StorageConfiguration, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.SupportInformation.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.SupportInformation, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.SystemDateTime.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.SystemDateTime, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.SystemLog.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.SystemLog, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.SystemLogUri.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.SystemLogUri, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Devices.Onvif.Contracts.DeviceManagement.User.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.DeviceManagement.User, Service References.Onvif.Contracts.DeviceManagement.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/Reference.svcmap: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | false 5 | true 6 | true 7 | 8 | false 9 | true 10 | false 11 | 12 | 13 | true 14 | Auto 15 | true 16 | true 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/bf-2.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Get access to the xml: attribute groups for xml:lang as declared on 'schema' 8 | and 'documentation' below 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/configuration.svcinfo: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/include.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/item.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | Elements replacing the wildcard MUST be namespace qualified, but can be in the targetNamespace 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | Fault reporting structure 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/ws-addr.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.DeviceManagement/xmlmime.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/Devices.Onvif.Contracts.Events.Capabilities.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.Events.Capabilities, Service References.Onvif.Contracts.Events.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/Devices.Onvif.Contracts.Events.CreatePullPointResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.Events.CreatePullPointResponse, Service References.Onvif.Contracts.Events.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/Devices.Onvif.Contracts.Events.CreatePullPointResponse1.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.Events.CreatePullPointResponse1, Service References.Onvif.Contracts.Events.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/Devices.Onvif.Contracts.Events.CreatePullPointSubscriptionResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.Events.CreatePullPointSubscriptionResponse, Service References.Onvif.Contracts.Events.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/Devices.Onvif.Contracts.Events.DestroyPullPointResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.Events.DestroyPullPointResponse, Service References.Onvif.Contracts.Events.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/Devices.Onvif.Contracts.Events.DestroyPullPointResponse1.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.Events.DestroyPullPointResponse1, Service References.Onvif.Contracts.Events.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/Devices.Onvif.Contracts.Events.EndpointReferenceType.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.Events.EndpointReferenceType, Service References.Onvif.Contracts.Events.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/Devices.Onvif.Contracts.Events.GetCurrentMessageResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.Events.GetCurrentMessageResponse, Service References.Onvif.Contracts.Events.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/Devices.Onvif.Contracts.Events.GetCurrentMessageResponse1.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.Events.GetCurrentMessageResponse1, Service References.Onvif.Contracts.Events.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/Devices.Onvif.Contracts.Events.GetEventPropertiesResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.Events.GetEventPropertiesResponse, Service References.Onvif.Contracts.Events.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/Devices.Onvif.Contracts.Events.GetMessagesResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.Events.GetMessagesResponse, Service References.Onvif.Contracts.Events.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/Devices.Onvif.Contracts.Events.GetMessagesResponse1.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.Events.GetMessagesResponse1, Service References.Onvif.Contracts.Events.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/Devices.Onvif.Contracts.Events.NotificationMessageHolderType.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.Events.NotificationMessageHolderType, Service References.Onvif.Contracts.Events.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/Devices.Onvif.Contracts.Events.PauseSubscriptionResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.Events.PauseSubscriptionResponse, Service References.Onvif.Contracts.Events.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/Devices.Onvif.Contracts.Events.PauseSubscriptionResponse1.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.Events.PauseSubscriptionResponse1, Service References.Onvif.Contracts.Events.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/Devices.Onvif.Contracts.Events.PullMessagesResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.Events.PullMessagesResponse, Service References.Onvif.Contracts.Events.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/Devices.Onvif.Contracts.Events.RenewResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.Events.RenewResponse, Service References.Onvif.Contracts.Events.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/Devices.Onvif.Contracts.Events.RenewResponse1.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.Events.RenewResponse1, Service References.Onvif.Contracts.Events.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/Devices.Onvif.Contracts.Events.ResumeSubscriptionResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.Events.ResumeSubscriptionResponse, Service References.Onvif.Contracts.Events.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/Devices.Onvif.Contracts.Events.ResumeSubscriptionResponse1.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.Events.ResumeSubscriptionResponse1, Service References.Onvif.Contracts.Events.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/Devices.Onvif.Contracts.Events.SeekResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.Events.SeekResponse, Service References.Onvif.Contracts.Events.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/Devices.Onvif.Contracts.Events.SubscribeResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.Events.SubscribeResponse, Service References.Onvif.Contracts.Events.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/Devices.Onvif.Contracts.Events.SubscribeResponse1.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.Events.SubscribeResponse1, Service References.Onvif.Contracts.Events.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/Devices.Onvif.Contracts.Events.TopicSetType.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.Events.TopicSetType, Service References.Onvif.Contracts.Events.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/Devices.Onvif.Contracts.Events.UnsubscribeResponse.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.Events.UnsubscribeResponse, Service References.Onvif.Contracts.Events.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/Devices.Onvif.Contracts.Events.UnsubscribeResponse1.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | Devices.Onvif.Contracts.Events.UnsubscribeResponse1, Service References.Onvif.Contracts.Events.Reference.cs.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/Reference.svcmap: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | false 5 | true 6 | true 7 | 8 | false 9 | true 10 | false 11 | 12 | 13 | true 14 | Auto 15 | true 16 | true 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/WS-Resource.wsdl: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/bf-2.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Get access to the xml: attribute groups for xml:lang as declared on 'schema' 8 | and 'documentation' below 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/configuration.svcinfo: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/r-2.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /Devices/Service References/Onvif.Contracts.Events/ws-addr.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | -------------------------------------------------------------------------------- /EventsReceiver.UnitTests/EventsReceiver.UnitTests.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {5541698D-10EF-4F58-B5B6-D9C29B031329} 8 | Library 9 | Properties 10 | EventsReceiver.UnitTests 11 | EventsReceiver.UnitTests 12 | v4.6 13 | 512 14 | 15 | 16 | 17 | true 18 | full 19 | false 20 | bin\Debug\ 21 | DEBUG;TRACE 22 | prompt 23 | 4 24 | 25 | 26 | pdbonly 27 | true 28 | bin\Release\ 29 | TRACE 30 | prompt 31 | 4 32 | 33 | 34 | 35 | ..\packages\Moq.4.5.23\lib\net45\Moq.dll 36 | True 37 | 38 | 39 | ..\packages\NUnit.2.6.4\lib\nunit.framework.dll 40 | True 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | Designer 53 | 54 | 55 | 56 | 57 | {df0a93d4-4fa2-480f-9351-2af6a9d06c96} 58 | Common 59 | 60 | 61 | {1a760e09-ce1f-4068-b1a3-f98bc88d0467} 62 | EventsReceiver 63 | 64 | 65 | 66 | 73 | -------------------------------------------------------------------------------- /EventsReceiver.UnitTests/Models/MainWindowModelTests.cs: -------------------------------------------------------------------------------- 1 | using System.Threading; 2 | using System.Threading.Tasks; 3 | using Common.EventReceiver; 4 | using Common.Events; 5 | using EventsReceiver.Models; 6 | using Moq; 7 | using NUnit.Framework; 8 | 9 | namespace EventsReceiver.UnitTests.Models 10 | { 11 | [TestFixture] 12 | class MainWindowModelTests 13 | { 14 | private const int TestWaitTimeoutMs = 15000; 15 | 16 | [Test] 17 | public void Start_ConnectionEstablishedAndEventIsReceived_EventReceivedHandlerInvoked() 18 | { 19 | var patternEvent = new DeviceEvent("test"); 20 | IDeviceEventReceiver eventReceiverFake = CreateDeviceEventReceiverFake(patternEvent); 21 | IDeviceEventReceiverFactory eventReceiverFactoryFake = CreateDeviceEventReceiverFactoryFake(eventReceiverFake); 22 | 23 | var autoResetEvent = new AutoResetEvent(false); 24 | DeviceEvent currentEvent = null; 25 | var model = new MainWindowModel(eventReceiverFactoryFake); 26 | model.EventReceived += (sender, @event) => 27 | { 28 | currentEvent = @event; 29 | autoResetEvent.Set(); 30 | }; 31 | model.Start(CreateConnectionParametersFake()); 32 | 33 | Assert.IsTrue(autoResetEvent.WaitOne(TestWaitTimeoutMs)); 34 | Assert.AreSame(patternEvent, currentEvent); 35 | } 36 | 37 | [Test] 38 | public void Start_WhenConnectingStateChanges_StateChangedHandlerInvoked() 39 | { 40 | IDeviceEventReceiver eventReceiverFake = CreateDeviceEventReceiverFake(null); 41 | IDeviceEventReceiverFactory eventReceiverFactoryFake = CreateDeviceEventReceiverFactoryFake(eventReceiverFake); 42 | 43 | var autoResetEvent = new AutoResetEvent(false); 44 | var model = new MainWindowModel(eventReceiverFactoryFake); 45 | model.ConnectionStateChanged += (sender, @event) => autoResetEvent.Set(); 46 | model.Start(CreateConnectionParametersFake()); 47 | 48 | Assert.IsTrue(autoResetEvent.WaitOne(TestWaitTimeoutMs)); 49 | } 50 | 51 | [Test] 52 | public void Stop_ConnectionEstablishedThenAborted_StoppedEventHandlerInvoked() 53 | { 54 | IDeviceEventReceiver eventReceiverFake = CreateDeviceEventReceiverFake(null); 55 | IDeviceEventReceiverFactory eventReceiverFactoryFake = CreateDeviceEventReceiverFactoryFake(eventReceiverFake); 56 | 57 | var autoResetEvent = new AutoResetEvent(false); 58 | var model = new MainWindowModel(eventReceiverFactoryFake); 59 | model.Stopped += (sender, args) => autoResetEvent.Set(); 60 | model.Start(CreateConnectionParametersFake()); 61 | Thread.Sleep(500); 62 | model.Stop(); 63 | 64 | Assert.IsTrue(autoResetEvent.WaitOne(TestWaitTimeoutMs)); 65 | } 66 | 67 | private static IConnectionParameters CreateConnectionParametersFake() 68 | { 69 | var connectionParameters = new Mock(); 70 | return connectionParameters.Object; 71 | } 72 | 73 | private static IDeviceEventReceiverFactory CreateDeviceEventReceiverFactoryFake(IDeviceEventReceiver eventReceiver) 74 | { 75 | var factoryFake = new Mock(); 76 | factoryFake.Setup(x => x.Create(It.IsNotNull())) 77 | .Returns(eventReceiver); 78 | 79 | return factoryFake.Object; 80 | } 81 | 82 | private static IDeviceEventReceiver CreateDeviceEventReceiverFake(DeviceEvent deviceEvent) 83 | { 84 | var deviceEventReceiverFake = new Mock(); 85 | deviceEventReceiverFake.Setup(x => x.ConnectAsync(It.IsNotNull())). 86 | Returns(Task.CompletedTask); 87 | deviceEventReceiverFake.Setup(x => x.ReceiveAsync(It.IsNotNull())). 88 | Returns(Task.CompletedTask). 89 | Raises(x => x.EventReceived += null, deviceEventReceiverFake, deviceEvent); 90 | deviceEventReceiverFake.Setup(x => x.ConnectionParameters). 91 | Returns(CreateConnectionParametersFake()); 92 | 93 | return deviceEventReceiverFake.Object; 94 | } 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /EventsReceiver.UnitTests/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("EventsReceiver.UnitTests")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("EventsReceiver.UnitTests")] 13 | [assembly: AssemblyCopyright("Copyright © 2016")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("5541698d-10ef-4f58-b5b6-d9c29b031329")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /EventsReceiver.UnitTests/ViewModels/MainWindowViewModelTests.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Common.EventReceiver; 3 | using Common.Events; 4 | using EventsReceiver.Models; 5 | using EventsReceiver.ViewModels; 6 | using Moq; 7 | using NUnit.Framework; 8 | 9 | namespace EventsReceiver.UnitTests.ViewModels 10 | { 11 | [TestFixture] 12 | class MainWindowViewModelTests 13 | { 14 | [Test] 15 | public void StartClickCommand_CommandExecuted_StartModelMethodCalled() 16 | { 17 | var mainWindowModelMock = new Mock(); 18 | 19 | var mainWindowViewModel = new MainWindowViewModel(mainWindowModelMock.Object); 20 | mainWindowViewModel.StartClickCommand.Execute(null); 21 | 22 | mainWindowModelMock.Verify(x => x.Start(It.IsNotNull())); 23 | } 24 | 25 | [Test] 26 | public void StopClickCommand_CommandExecuted_StopModelMethodIsCalled() 27 | { 28 | var mainWindowModelMock = new Mock(); 29 | 30 | var mainWindowViewModel = new MainWindowViewModel(mainWindowModelMock.Object); 31 | mainWindowViewModel.StopClickCommand.Execute(null); 32 | 33 | mainWindowModelMock.Verify(x => x.Stop()); 34 | } 35 | 36 | [Test] 37 | public void ConnectionParametersPreparing_DeviceAddressLoginAndPasswordAreSet_ValidParametersAreGivenToStartMethod() 38 | { 39 | Uri deviceUri = new Uri("http://127.0.0.1"); 40 | string login = "root"; 41 | string password = "1234"; 42 | var mainWindowModelMock = new Mock(); 43 | 44 | var mainWindowViewModel = new MainWindowViewModel(mainWindowModelMock.Object) 45 | { 46 | DeviceAddress = deviceUri.Host, 47 | Login = login, 48 | Password = password 49 | }; 50 | mainWindowViewModel.StartClickCommand.Execute(null); 51 | 52 | mainWindowModelMock.Verify(x => x.Start(It.Is(p => 53 | p.ConnectionUri == deviceUri && p.Credentials.UserName == login && p.Credentials.Password == password))); 54 | } 55 | 56 | [Test] 57 | public void EventHandling_DeviceEventFromModel_EventAddedToEventsCollection() 58 | { 59 | var deviceEvent = new DeviceEvent("test"); 60 | var mainWindowModelMock = new Mock(); 61 | mainWindowModelMock.Setup(x => x.Start(It.IsNotNull())) 62 | .Raises(x => x.EventReceived += null, this, deviceEvent); 63 | 64 | var mainWindowViewModel = new MainWindowViewModel(mainWindowModelMock.Object); 65 | mainWindowViewModel.StartClickCommand.Execute(null); 66 | 67 | Assert.AreEqual(1, mainWindowViewModel.Events.Count); 68 | Assert.AreSame(deviceEvent, mainWindowViewModel.Events[0]); 69 | } 70 | 71 | [Test] 72 | public void StateChangeHandling_WhenStateInfoFromModel_StateInfoAddedToConnectioLog() 73 | { 74 | var stateInfo = new ConnectionStateInfo("test"); 75 | var mainWindowModelMock = new Mock(); 76 | mainWindowModelMock.Setup(x => x.Start(It.IsNotNull())) 77 | .Raises(x => x.ConnectionStateChanged += null, this, stateInfo); 78 | 79 | var mainWindowViewModel = new MainWindowViewModel(mainWindowModelMock.Object); 80 | mainWindowViewModel.StartClickCommand.Execute(null); 81 | 82 | Assert.AreEqual(1, mainWindowViewModel.ConnectionLog.Count); 83 | Assert.AreEqual(stateInfo.ToString(), mainWindowViewModel.ConnectionLog[0]); 84 | } 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /EventsReceiver.UnitTests/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /EventsReceiver/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /EventsReceiver/App.xaml: -------------------------------------------------------------------------------- 1 |  6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /EventsReceiver/App.xaml.cs: -------------------------------------------------------------------------------- 1 | namespace EventsReceiver 2 | { 3 | /// 4 | /// Interaction logic for App.xaml 5 | /// 6 | public partial class App 7 | { 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /EventsReceiver/Commands/CommandHandler.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Input; 3 | 4 | namespace EventsReceiver.Commands 5 | { 6 | class CommandHandler : ICommand 7 | { 8 | private readonly Action _action; 9 | private bool _canExecute; 10 | 11 | public event EventHandler CanExecuteChanged; 12 | 13 | public CommandHandler(Action action, bool canExecute) 14 | { 15 | _action = action; 16 | _canExecute = canExecute; 17 | } 18 | 19 | public bool CanExecute(object parameter) 20 | { 21 | return _canExecute; 22 | } 23 | 24 | public void SetCanExecute(bool value) 25 | { 26 | _canExecute = value; 27 | CanExecuteChanged?.Invoke(this, EventArgs.Empty); 28 | } 29 | 30 | public void Execute(object parameter) 31 | { 32 | _action(); 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /EventsReceiver/EventsReceiver.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {1A760E09-CE1F-4068-B1A3-F98BC88D0467} 8 | WinExe 9 | Properties 10 | EventsReceiver 11 | EventsReceiver 12 | v4.6 13 | 512 14 | {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} 15 | 4 16 | true 17 | 18 | 19 | 20 | AnyCPU 21 | true 22 | full 23 | false 24 | bin\Debug\ 25 | DEBUG;TRACE 26 | prompt 27 | 4 28 | 29 | 30 | AnyCPU 31 | pdbonly 32 | true 33 | bin\Release\ 34 | TRACE 35 | prompt 36 | 4 37 | 38 | 39 | 40 | 41 | 42 | 43 | 4.0 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | MSBuild:Compile 52 | Designer 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | MSBuild:Compile 62 | Designer 63 | 64 | 65 | App.xaml 66 | Code 67 | 68 | 69 | 70 | 71 | 72 | MainWindow.xaml 73 | Code 74 | 75 | 76 | 77 | 78 | Code 79 | 80 | 81 | True 82 | True 83 | Resources.resx 84 | 85 | 86 | True 87 | Settings.settings 88 | True 89 | 90 | 91 | ResXFileCodeGenerator 92 | Resources.Designer.cs 93 | 94 | 95 | SettingsSingleFileGenerator 96 | Settings.Designer.cs 97 | 98 | 99 | 100 | 101 | 102 | Designer 103 | 104 | 105 | 106 | 107 | {df0a93d4-4fa2-480f-9351-2af6a9d06c96} 108 | Common 109 | 110 | 111 | {9c6d5ef3-75dd-44f4-b349-b019532e2dfd} 112 | Devices 113 | 114 | 115 | 116 | 117 | 124 | -------------------------------------------------------------------------------- /EventsReceiver/Models/ConnectionParameters.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Net; 3 | using Common.EventReceiver; 4 | 5 | namespace EventsReceiver.Models 6 | { 7 | class ConnectionParameters : IConnectionParameters 8 | { 9 | public Uri ConnectionUri { get; } 10 | public NetworkCredential Credentials { get; } 11 | public TimeSpan ConnectionTimeout { get; } 12 | 13 | public ConnectionParameters(Uri connectionUri, NetworkCredential credentials, TimeSpan connectionTimeout) 14 | { 15 | ConnectionUri = connectionUri; 16 | Credentials = credentials; 17 | ConnectionTimeout = connectionTimeout; 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /EventsReceiver/Models/ConnectionStateInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace EventsReceiver.Models 4 | { 5 | class ConnectionStateInfo 6 | { 7 | public DateTime Timestamp { get; } = DateTime.UtcNow; 8 | public string Description { get; } 9 | 10 | public ConnectionStateInfo(string description) 11 | { 12 | Description = description; 13 | } 14 | 15 | public override string ToString() 16 | { 17 | return $"[{Timestamp.ToLocalTime():HH:mm:ss}]: {Description}"; 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /EventsReceiver/Models/IMainWindowModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Common.EventReceiver; 3 | using Common.Events; 4 | 5 | namespace EventsReceiver.Models 6 | { 7 | internal interface IMainWindowModel 8 | { 9 | event EventHandler ConnectionStateChanged; 10 | event EventHandler EventReceived; 11 | void Start(IConnectionParameters connectionParameters); 12 | void Stop(); 13 | } 14 | } -------------------------------------------------------------------------------- /EventsReceiver/Models/MainWindowModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading; 3 | using System.Threading.Tasks; 4 | using Common.EventReceiver; 5 | using Common.Events; 6 | 7 | namespace EventsReceiver.Models 8 | { 9 | class MainWindowModel : IMainWindowModel 10 | { 11 | private readonly IDeviceEventReceiverFactory _deviceEventReceiverFactory; 12 | private static readonly TimeSpan ReconnectionDelay = TimeSpan.FromSeconds(5); 13 | private CancellationTokenSource _cancellationTokenSource; 14 | private IDeviceEventReceiver _deviceEventReceiver; 15 | 16 | public event EventHandler ConnectionStateChanged; 17 | public event EventHandler EventReceived; 18 | public event EventHandler Stopped; 19 | 20 | public MainWindowModel(IDeviceEventReceiverFactory deviceEventReceiverFactory) 21 | { 22 | if (deviceEventReceiverFactory == null) 23 | throw new ArgumentNullException(nameof(deviceEventReceiverFactory)); 24 | 25 | _deviceEventReceiverFactory = deviceEventReceiverFactory; 26 | } 27 | 28 | public void Start(IConnectionParameters connectionParameters) 29 | { 30 | _cancellationTokenSource = new CancellationTokenSource(); 31 | 32 | _deviceEventReceiver = _deviceEventReceiverFactory.Create(connectionParameters); 33 | _deviceEventReceiver.EventReceived += DeviceEventReceiverOnEventReceived; 34 | 35 | Task.Run(() => ReceiveEventsAsync(_deviceEventReceiver, _cancellationTokenSource.Token)); 36 | } 37 | 38 | public void Stop() 39 | { 40 | if (_deviceEventReceiver == null) 41 | return; 42 | 43 | _cancellationTokenSource.Cancel(); 44 | _deviceEventReceiver.EventReceived -= DeviceEventReceiverOnEventReceived; 45 | _deviceEventReceiver = null; 46 | } 47 | 48 | protected virtual void OnStateChanged(ConnectionStateInfo e) 49 | { 50 | ConnectionStateChanged?.Invoke(this, e); 51 | } 52 | 53 | private async void ReceiveEventsAsync(IDeviceEventReceiver deviceEventReceiver, CancellationToken token) 54 | { 55 | while (!token.IsCancellationRequested) 56 | { 57 | try 58 | { 59 | OnStateChanged(new ConnectionStateInfo( 60 | $"Connecting to {deviceEventReceiver.ConnectionParameters.ConnectionUri}...")); 61 | 62 | await deviceEventReceiver.ConnectAsync(token).ConfigureAwait(false); 63 | 64 | OnStateChanged(new ConnectionStateInfo("Connection is established. Receiving...")); 65 | 66 | await deviceEventReceiver.ReceiveAsync(token); 67 | } 68 | catch (OperationCanceledException) 69 | { 70 | break; 71 | } 72 | catch (OutOfMemoryException) 73 | { 74 | throw; 75 | } 76 | catch (Exception e) 77 | { 78 | OnStateChanged(new ConnectionStateInfo($"Connection error: {e.Message}")); 79 | } 80 | 81 | try 82 | { 83 | await Task.Delay(ReconnectionDelay, token); 84 | } 85 | catch (OperationCanceledException) 86 | { 87 | break; 88 | } 89 | } 90 | 91 | Stopped?.Invoke(this, EventArgs.Empty); 92 | } 93 | 94 | private void DeviceEventReceiverOnEventReceived(object sender, DeviceEvent deviceEvent) 95 | { 96 | EventReceived?.Invoke(sender, deviceEvent); 97 | } 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /EventsReceiver/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Resources; 3 | using System.Runtime.CompilerServices; 4 | using System.Runtime.InteropServices; 5 | using System.Windows; 6 | 7 | // General Information about an assembly is controlled through the following 8 | // set of attributes. Change these attribute values to modify the information 9 | // associated with an assembly. 10 | [assembly: AssemblyTitle("OnvifEventsReceiver")] 11 | [assembly: AssemblyDescription("")] 12 | [assembly: AssemblyConfiguration("")] 13 | [assembly: AssemblyCompany("")] 14 | [assembly: AssemblyProduct("OnvifEventsReceiver")] 15 | [assembly: AssemblyCopyright("Copyright © 2016")] 16 | [assembly: AssemblyTrademark("")] 17 | [assembly: AssemblyCulture("")] 18 | 19 | // Setting ComVisible to false makes the types in this assembly not visible 20 | // to COM components. If you need to access a type in this assembly from 21 | // COM, set the ComVisible attribute to true on that type. 22 | [assembly: ComVisible(false)] 23 | 24 | //In order to begin building localizable applications, set 25 | //CultureYouAreCodingWith in your .csproj file 26 | //inside a . For example, if you are using US english 27 | //in your source files, set the to en-US. Then uncomment 28 | //the NeutralResourceLanguage attribute below. Update the "en-US" in 29 | //the line below to match the UICulture setting in the project file. 30 | 31 | //[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] 32 | 33 | 34 | [assembly: ThemeInfo( 35 | ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located 36 | //(used if a resource is not found in the page, 37 | // or application resource dictionaries) 38 | ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located 39 | //(used if a resource is not found in the page, 40 | // app, or any theme specific resource dictionaries) 41 | )] 42 | 43 | 44 | // Version information for an assembly consists of the following four values: 45 | // 46 | // Major Version 47 | // Minor Version 48 | // Build Number 49 | // Revision 50 | // 51 | // You can specify all the values or you can default the Build and Revision Numbers 52 | // by using the '*' as shown below: 53 | // [assembly: AssemblyVersion("1.0.*")] 54 | [assembly: AssemblyVersion("1.0.0.0")] 55 | [assembly: AssemblyFileVersion("1.0.0.0")] 56 | [assembly: InternalsVisibleTo("EventsReceiver.UnitTests")] 57 | [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] 58 | -------------------------------------------------------------------------------- /EventsReceiver/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace EventsReceiver.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("EventsReceiver.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /EventsReceiver/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace EventsReceiver.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /EventsReceiver/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /EventsReceiver/ValidationRules/AddressValidationRule.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Globalization; 3 | using System.Windows.Controls; 4 | using Common; 5 | 6 | namespace EventsReceiver.ValidationRules 7 | { 8 | class AddressValidationRule : ValidationRule 9 | { 10 | public override ValidationResult Validate(object value, CultureInfo cultureInfo) 11 | { 12 | try 13 | { 14 | var adress = value as string; 15 | 16 | if (string.IsNullOrEmpty(adress)) 17 | throw new UriFormatException(); 18 | 19 | if (!adress.StartsWith(HttpGlobals.SchemaPrefix)) 20 | adress = HttpGlobals.SchemaPrefix + adress; 21 | 22 | new Uri(adress); 23 | } 24 | catch (UriFormatException) 25 | { 26 | return new ValidationResult(false, "Invalid address"); 27 | } 28 | 29 | return new ValidationResult(true, null); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /EventsReceiver/ViewModelLocator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Devices; 3 | using EventsReceiver.Models; 4 | using EventsReceiver.ViewModels; 5 | 6 | namespace EventsReceiver 7 | { 8 | class ViewModelLocator 9 | { 10 | private readonly Lazy _mainWindowViewModelLazy = new Lazy(CreateMainWindowViewModel); 11 | 12 | public MainWindowViewModel MainWindowViewModel => _mainWindowViewModelLazy.Value; 13 | 14 | private static MainWindowViewModel CreateMainWindowViewModel() 15 | { 16 | var receiverFactory = new DeviceEventReceiverFactory(); 17 | var model = new MainWindowModel(receiverFactory); 18 | return new MainWindowViewModel(model); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /EventsReceiver/ViewModels/MainWindowViewModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.ObjectModel; 3 | using System.ComponentModel; 4 | using System.Net; 5 | using System.Runtime.CompilerServices; 6 | using System.Windows; 7 | using System.Windows.Input; 8 | using Common; 9 | using Common.Events; 10 | using EventsReceiver.Commands; 11 | using EventsReceiver.Models; 12 | using EventsReceiver.Properties; 13 | 14 | namespace EventsReceiver.ViewModels 15 | { 16 | class MainWindowViewModel : INotifyPropertyChanged 17 | { 18 | private readonly IMainWindowModel _mainWindowModel; 19 | 20 | public ObservableCollection Events { get; } = new ObservableCollection(); 21 | public ObservableCollection ConnectionLog { get; } = new ObservableCollection(); 22 | 23 | public string DeviceAddress { get; set; } = "http://127.0.0.1"; 24 | public string Login { get; set; } = "root"; 25 | public string Password { get; set; } = ""; 26 | 27 | private readonly CommandHandler _startClickCommand; 28 | public ICommand StartClickCommand => _startClickCommand; 29 | 30 | private readonly CommandHandler _stopClickCommand; 31 | public ICommand StopClickCommand => _stopClickCommand; 32 | 33 | public event PropertyChangedEventHandler PropertyChanged; 34 | 35 | public MainWindowViewModel(IMainWindowModel mainWindowModel) 36 | { 37 | if (mainWindowModel == null) 38 | throw new ArgumentNullException(nameof(mainWindowModel)); 39 | 40 | _mainWindowModel = mainWindowModel; 41 | 42 | _startClickCommand = new CommandHandler(OnStartButtonClick, true); 43 | _stopClickCommand = new CommandHandler(OnStopButtonClick, false); 44 | } 45 | 46 | [NotifyPropertyChangedInvocator] 47 | protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) 48 | { 49 | PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 50 | } 51 | 52 | private void MainWindowModelOnEventReceived(object sender, DeviceEvent deviceEvent) 53 | { 54 | if (Application.Current != null) 55 | Application.Current.Dispatcher.Invoke(() => Events.Add(deviceEvent)); 56 | else 57 | Events.Add(deviceEvent); 58 | } 59 | 60 | private void MainWindowModelOnConnectionStateChanged(object sender, ConnectionStateInfo connectionStateInfo) 61 | { 62 | string stateInfo = connectionStateInfo.ToString(); 63 | 64 | if (Application.Current != null) 65 | Application.Current.Dispatcher.Invoke(() => ConnectionLog.Add(stateInfo)); 66 | else 67 | ConnectionLog.Add(stateInfo); 68 | } 69 | 70 | private void OnStartButtonClick() 71 | { 72 | Uri deviceUri; 73 | 74 | string address = DeviceAddress; 75 | 76 | if (!address.StartsWith(HttpGlobals.SchemaPrefix)) 77 | address = HttpGlobals.SchemaPrefix + address; 78 | 79 | if (!Uri.TryCreate(address, UriKind.Absolute, out deviceUri)) 80 | { 81 | MessageBox.Show("Bad device address", "Error", MessageBoxButton.OK, MessageBoxImage.Error); 82 | return; 83 | } 84 | 85 | var credential = new NetworkCredential(Login, Password); 86 | var timeout = TimeSpan.FromSeconds(15); 87 | 88 | var connectionParameters = new ConnectionParameters(deviceUri, credential, timeout); 89 | _mainWindowModel.ConnectionStateChanged += MainWindowModelOnConnectionStateChanged; 90 | _mainWindowModel.EventReceived += MainWindowModelOnEventReceived; 91 | _mainWindowModel.Start(connectionParameters); 92 | 93 | _startClickCommand.SetCanExecute(false); 94 | _stopClickCommand.SetCanExecute(true); 95 | } 96 | 97 | private void OnStopButtonClick() 98 | { 99 | _mainWindowModel.Stop(); 100 | _mainWindowModel.ConnectionStateChanged -= MainWindowModelOnConnectionStateChanged; 101 | _mainWindowModel.EventReceived -= MainWindowModelOnEventReceived; 102 | 103 | _stopClickCommand.SetCanExecute(false); 104 | _startClickCommand.SetCanExecute(true); 105 | 106 | Events.Clear(); 107 | ConnectionLog.Clear(); 108 | } 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /EventsReceiver/Views/MainWindow.xaml: -------------------------------------------------------------------------------- 1 |  10 | 11 | 12 | 13 | ! 14 | 15 | 16 | 17 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | -------------------------------------------------------------------------------- /EventsReceiver/Views/MainWindow.xaml.cs: -------------------------------------------------------------------------------- 1 | namespace EventsReceiver.Views 2 | { 3 | /// 4 | /// Interaction logic for MainWindow.xaml 5 | /// 6 | public partial class MainWindow 7 | { 8 | public MainWindow() 9 | { 10 | InitializeComponent(); 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License 2 | 3 | Copyright (c) 2016 Bogdanov Kirill 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /OnvifEvents.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.25420.1 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EventsReceiver", "EventsReceiver\EventsReceiver.csproj", "{1A760E09-CE1F-4068-B1A3-F98BC88D0467}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Common", "Common\Common.csproj", "{DF0A93D4-4FA2-480F-9351-2AF6A9D06C96}" 9 | EndProject 10 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Devices", "Devices\Devices.csproj", "{9C6D5EF3-75DD-44F4-B349-B019532E2DFD}" 11 | EndProject 12 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EventsReceiver.UnitTests", "EventsReceiver.UnitTests\EventsReceiver.UnitTests.csproj", "{5541698D-10EF-4F58-B5B6-D9C29B031329}" 13 | EndProject 14 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Common.UnitTests", "Common.UnitTests\Common.UnitTests.csproj", "{C88C1B8D-C37B-4F99-A1A3-44986855D5C7}" 15 | EndProject 16 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Devices.UnitTests", "Devices.UnitTests\Devices.UnitTests.csproj", "{183F0876-5B96-4716-8374-F8BE172FCF08}" 17 | EndProject 18 | Global 19 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 20 | Debug|Any CPU = Debug|Any CPU 21 | Release|Any CPU = Release|Any CPU 22 | EndGlobalSection 23 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 24 | {1A760E09-CE1F-4068-B1A3-F98BC88D0467}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 25 | {1A760E09-CE1F-4068-B1A3-F98BC88D0467}.Debug|Any CPU.Build.0 = Debug|Any CPU 26 | {1A760E09-CE1F-4068-B1A3-F98BC88D0467}.Release|Any CPU.ActiveCfg = Release|Any CPU 27 | {1A760E09-CE1F-4068-B1A3-F98BC88D0467}.Release|Any CPU.Build.0 = Release|Any CPU 28 | {DF0A93D4-4FA2-480F-9351-2AF6A9D06C96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 29 | {DF0A93D4-4FA2-480F-9351-2AF6A9D06C96}.Debug|Any CPU.Build.0 = Debug|Any CPU 30 | {DF0A93D4-4FA2-480F-9351-2AF6A9D06C96}.Release|Any CPU.ActiveCfg = Release|Any CPU 31 | {DF0A93D4-4FA2-480F-9351-2AF6A9D06C96}.Release|Any CPU.Build.0 = Release|Any CPU 32 | {9C6D5EF3-75DD-44F4-B349-B019532E2DFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 33 | {9C6D5EF3-75DD-44F4-B349-B019532E2DFD}.Debug|Any CPU.Build.0 = Debug|Any CPU 34 | {9C6D5EF3-75DD-44F4-B349-B019532E2DFD}.Release|Any CPU.ActiveCfg = Release|Any CPU 35 | {9C6D5EF3-75DD-44F4-B349-B019532E2DFD}.Release|Any CPU.Build.0 = Release|Any CPU 36 | {5541698D-10EF-4F58-B5B6-D9C29B031329}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 37 | {5541698D-10EF-4F58-B5B6-D9C29B031329}.Debug|Any CPU.Build.0 = Debug|Any CPU 38 | {5541698D-10EF-4F58-B5B6-D9C29B031329}.Release|Any CPU.ActiveCfg = Release|Any CPU 39 | {5541698D-10EF-4F58-B5B6-D9C29B031329}.Release|Any CPU.Build.0 = Release|Any CPU 40 | {C88C1B8D-C37B-4F99-A1A3-44986855D5C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 41 | {C88C1B8D-C37B-4F99-A1A3-44986855D5C7}.Debug|Any CPU.Build.0 = Debug|Any CPU 42 | {C88C1B8D-C37B-4F99-A1A3-44986855D5C7}.Release|Any CPU.ActiveCfg = Release|Any CPU 43 | {C88C1B8D-C37B-4F99-A1A3-44986855D5C7}.Release|Any CPU.Build.0 = Release|Any CPU 44 | {183F0876-5B96-4716-8374-F8BE172FCF08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 45 | {183F0876-5B96-4716-8374-F8BE172FCF08}.Debug|Any CPU.Build.0 = Debug|Any CPU 46 | {183F0876-5B96-4716-8374-F8BE172FCF08}.Release|Any CPU.ActiveCfg = Release|Any CPU 47 | {183F0876-5B96-4716-8374-F8BE172FCF08}.Release|Any CPU.Build.0 = Release|Any CPU 48 | EndGlobalSection 49 | GlobalSection(SolutionProperties) = preSolution 50 | HideSolutionNode = FALSE 51 | EndGlobalSection 52 | EndGlobal 53 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Onvif Events Receiver 2 | C# client for getting events from ONVIF devices using pull point subscription method 3 | 4 | # Features: 5 |
-could receive events in raw xml presentation (without any additional parsing) 6 |
-.NET 4.6 7 |
-async/await paradigm 8 |
-pull point subscription method 9 |
-unit tests (NUnit + Moq) 10 | --------------------------------------------------------------------------------