Ejemplo n.º 1
0
        private static void TrimDeviceInformation(GetDeviceInformationResponse deviceInfo)
        {
            foreach (var property in deviceInfo.GetType().GetProperties())
            {
                String processedValue = property.GetValue(deviceInfo).ToString().Trim();

                property.SetValue(deviceInfo, processedValue);
            }
        }
Ejemplo n.º 2
0
 public Media20Services(string Hostname, string User, string Password)
 {
     m_services                = null;
     m_mediaClient             = null;
     m_profiles                = null;
     m_Hostname                = Hostname;
     m_User                    = User;
     m_Password                = Password;
     m_BasicBasicAuthBehaviour = new BasicAuthBehaviour(m_User, m_Password);
     m_PasswordDigestBehavior  = new PasswordDigestBehavior(m_User, m_Password, 0);
     m_ErrorMessage            = "";
     m_deviceInformations      = null;
     m_HostnameInformation     = null;
 }
Ejemplo n.º 3
0
        public OnVifDevice(string Hostname, string User, string Password)
        {
            m_services = null;

            m_Hostname = Hostname;
            m_User     = User;
            m_Password = Password;
            m_BasicBasicAuthBehaviour = new BasicAuthBehaviour(m_User, m_Password);
            m_PasswordDigestBehavior  = new PasswordDigestBehavior(m_User, m_Password, 0);
            m_ErrorMessage            = "";
            m_deviceInformations      = null;
            m_HostnameInformation     = null;
            m_Capabilities            = null;
            m_device = null;
            m_capabilitiesResponse = null;
            m_SystemDateTime       = null;
        }
Ejemplo n.º 4
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);
        }
Ejemplo n.º 5
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);
        }