Exemplo n.º 1
0
        public async Task <bool> InitalizeDeviceAsync()
        {
            try
            {
                if (m_services != null)
                {
                    return(true);
                }


                HttpTransportBindingElement httpBinding = new HttpTransportBindingElement();
                httpBinding.AuthenticationScheme = AuthenticationSchemes.Digest;
                var messageElement = new TextMessageEncodingBindingElement();
                messageElement.MessageVersion = MessageVersion.CreateVersion(EnvelopeVersion.Soap12, AddressingVersion.None);
                CustomBinding binding = new CustomBinding(messageElement, httpBinding);

                EndpointAddress address = new EndpointAddress($@"http://{m_Hostname}/onvif/device_service");

                binding.SendTimeout = binding.CloseTimeout = binding.ReceiveTimeout = binding.OpenTimeout = TimeSpan.FromSeconds(15);

                m_device = new DeviceClient(binding, address);
                //    var discoverymode = m_device.GetRemoteDiscoveryModeAsync();

                bool   useAuth = !string.IsNullOrEmpty(m_BasicBasicAuthBehaviour.Username) && !string.IsNullOrEmpty(m_BasicBasicAuthBehaviour.Password);
                double diff    = 0;


                if (useAuth)
                {
                    m_device.Endpoint.EndpointBehaviors.Add(m_BasicBasicAuthBehaviour);
                    m_device.Endpoint.EndpointBehaviors.Add(m_PasswordDigestBehavior);
                }

                //ensure date and time are in sync
                //add basic auth for compat with some cameras
                m_SystemDateTime = await m_device.GetSystemDateAndTimeAsync();


                var d = m_SystemDateTime.UTCDateTime.Date;
                var t = m_SystemDateTime.UTCDateTime.Time;

                var dt = new System.DateTime(d.Year, d.Month, d.Day, t.Hour, t.Minute, t.Second);

                diff = (System.DateTime.UtcNow - dt).TotalSeconds;
                m_PasswordDigestBehavior.TimeOffset = diff;

                GetDeviceInformationRequest request = new GetDeviceInformationRequest();
                m_deviceInformations = await m_device.GetDeviceInformationAsync(request);

                this.m_HostnameInformation = await m_device.GetHostnameAsync();

                m_services = await m_device.GetServicesAsync(true);
            }

            catch (Exception ex)
            {
                m_ErrorMessage = ex.Message;
                throw new OnVifException("OnVifDevice.InitalizeDeviceAsync", ex);
                //            return false;
            }

            return(m_services != null);
        }
Exemplo n.º 2
0
        public async Task <bool> GetServicesAsync()
        {
            try
            {
                if (m_services != null)
                {
                    return(true);
                }


                HttpTransportBindingElement httpBinding = new HttpTransportBindingElement();
                httpBinding.AuthenticationScheme = AuthenticationSchemes.Digest;
                var messageElement = new TextMessageEncodingBindingElement();
                messageElement.MessageVersion = MessageVersion.CreateVersion(EnvelopeVersion.Soap12, AddressingVersion.None);
                CustomBinding binding = new CustomBinding(messageElement, httpBinding);

                EndpointAddress address = new EndpointAddress($@"http://{m_Hostname}/onvif/device_service");

                DeviceClient device = new DeviceClient(binding, address);

                bool   useAuth = !string.IsNullOrEmpty(m_BasicBasicAuthBehaviour.Username) && !string.IsNullOrEmpty(m_BasicBasicAuthBehaviour.Password);
                double diff    = 0;
                if (useAuth)
                {
                    device.Endpoint.EndpointBehaviors.Add(m_BasicBasicAuthBehaviour);
                }
                try
                {
                    device.Endpoint.EndpointBehaviors.Add(m_PasswordDigestBehavior);
                    //ensure date and time are in sync
                    //add basic auth for compat with some cameras
                    var sdt = await device.GetSystemDateAndTimeAsync();

                    var d = sdt.UTCDateTime.Date;
                    var t = sdt.UTCDateTime.Time;

                    var dt = new System.DateTime(d.Year, d.Month, d.Day, t.Hour, t.Minute, t.Second);

                    diff = (System.DateTime.UtcNow - dt).TotalSeconds;
                    m_PasswordDigestBehavior.TimeOffset = diff;

                    GetDeviceInformationRequest request = new GetDeviceInformationRequest();


                    m_deviceInformations = await device.GetDeviceInformationAsync(request);


                    m_HostnameInformation = await device.GetHostnameAsync();
                }
                catch (Exception ex)
                {
                    m_ErrorMessage = ex.Message;
                    return(false);
                }



                //   device.InnerChannel.OperationTimeout = TimeSpan.FromMinutes(1);
                binding.SendTimeout = binding.CloseTimeout = binding.ReceiveTimeout = binding.OpenTimeout = TimeSpan.FromSeconds(5);

                m_services = await device.GetServicesAsync(true);



                foreach (var service in m_services.Service)
                {
                    if (service.Namespace == "http://www.onvif.org/ver10/media/wsdl")
                    {
                    }
                }
            }

            catch (Exception ex)
            {
                m_ErrorMessage = ex.Message;
                return(false);
            }
            return(true);
        }
Exemplo n.º 3
0
 GetDeviceInformationResponse IOnVifDevice.GetDeviceInformation(GetDeviceInformationRequest request)
 {
     Console.WriteLine("GetDeviceInformation() operation requested");
     return(new GetDeviceInformationResponse(_manufacturer, _model, _firmwareVersion, _serialNumber, _hwId));
 }