ZoneMinder / zoneminder

ZoneMinder is a free, open source Closed-circuit television software application developed for Linux which supports IP, USB and Analog cameras.
http://www.zoneminder.com/
GNU General Public License v2.0
5.13k stars 1.22k forks source link

zmonvif-probe.pl: Error deserializing message. No message returned from deserializer. #3675

Open daf0x opened 1 year ago

daf0x commented 1 year ago

Describe Your Environment

If the issue concerns a camera

Describe the bug ZoneMinder can't seem to probe the camera from either the web UI or the zmonvif-probe.pl script.

To Reproduce Steps to reproduce the behavior:

  1. /usr/local/bin/zmonvif-probe.pl -v probe

Expected behavior Sensible output listing the camera.

Actual behaviour Error deserializing message. No message returned from deserializer. I think there was also another error message, but I've been debugging a bit so I don't know any more what errors were there and what I added.

Debug Logs I've been adding some print statements around, but I don't really understand where the problem is. I've included my log at the end, although I'm not sure how helpful it will really be. I'll try to give my understanding here first.

As far as I can tell, the problem appears to be that the ONVIF::Deserializer::MessageParser doesn't set $self->{ data } to a valid value (it's left undef), so the ONVIF::Deserializer::XSD doesn't get any data. This is where I had to give up, as the code here gets too complex for me.

The message that is received from the probe is (after pretty printing):

<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"
              xmlns:soapenc="http://www.w3.org/2003/05/soap-encoding"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xmlns:xs="http://www.w3.org/2001/XMLSchema"
              xmlns:tt="http://www.onvif.org/ver10/schema"
              xmlns:tds="http://www.onvif.org/ver10/device/wsdl"
              xmlns:trt="http://www.onvif.org/ver10/media/wsdl"
              xmlns:timg="http://www.onvif.org/ver20/imaging/wsdl"
              xmlns:tev="http://www.onvif.org/ver10/events/wsdl"
              xmlns:tptz="http://www.onvif.org/ver20/ptz/wsdl"
              xmlns:tan="http://www.onvif.org/ver20/analytics/wsdl"
              xmlns:tst="http://www.onvif.org/ver10/storage/wsdl"
              xmlns:ter="http://www.onvif.org/ver10/error"
              xmlns:dn="http://www.onvif.org/ver10/network/wsdl"
              xmlns:tns1="http://www.onvif.org/ver10/topics"
              xmlns:tmd="http://www.onvif.org/ver10/deviceIO/wsdl"
              xmlns:gte="http://www.onvif.org/ver10/gtextension/wsdl"
              xmlns:wsdl="http://schemas.xmlsoap.org/wsdl"
              xmlns:wsoap12="http://schemas.xmlsoap.org/wsdl/soap12"
              xmlns:http="http://schemas.xmlsoap.org/wsdl/http"
              xmlns:d="http://schemas.xmlsoap.org/ws/2005/04/discovery"
              xmlns:wsadis="http://schemas.xmlsoap.org/ws/2004/08/addressing"
              xmlns:xop="http://www.w3.org/2004/08/xop/include"
              xmlns:wsnt="http://docs.oasis-open.org/wsn/b-2"
              xmlns:wsa="http://www.w3.org/2005/08/addressing"
              xmlns:wstop="http://docs.oasis-open.org/wsn/t-1"
              xmlns:wsrf-bf="http://docs.oasis-open.org/wsrf/bf-2"
              xmlns:wsntw="http://docs.oasis-open.org/wsn/bw-2"
              xmlns:wsrf-rw="http://docs.oasis-open.org/wsrf/rw-2"
              xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"
              xmlns:wsrf-r="http://docs.oasis-open.org/wsrf/r-2"
              xmlns:tnsn="http://www.eventextension.com/2011/event/topics">
    <env:Header>
        <wsadis:MessageID>urn:uuid:1df2e14e-1dd2-11b2-8323-b46dc2e70b23</wsadis:MessageID>
        <wsadis:To>urn:schemas-xmlsoap-org:ws:2005:04:discovery</wsadis:To>
        <wsadis:Action>http://schemas.xmlsoap.org/ws/2005/04/discovery/Hello</wsadis:Action>
        <d:AppSequence InstanceId="1679144852"
                       MessageNumber="456"/>
    </env:Header>
    <env:Body>
        <dn:Hello>
            <wsadis:EndpointReference>
                <wsadis:Address>urn:uuid:1df2e14e-1dd2-11b2-8323-b46dc2e70b23</wsadis:Address>
            </wsadis:EndpointReference>
            <d:Types>dn:NetworkVideoTransmitter</d:Types>
            <d:Scopes> </d:Scopes>
            <d:XAddrs>http://192.168.1.100/onvif/device_service</d:XAddrs>
            <d:MetadataVersion>10</d:MetadataVersion>
        </dn:Hello>
    </env:Body>
</env:Envelope>

The parser steps for this seem to go something like so (when Receiving SOAP 1.2):

Start Header (skip = 0)
Start Header at level 1
Start MessageID (skip = 0)
class: __SKIP__
skipping MessageID
End MessageID
Start To (skip = 0)
class: __SKIP__
skipping To
End To
Start Action (skip = 0)
class: __SKIP__
skipping Action
End Action
Start AppSequence (skip = 0)
class: __SKIP__
skipping AppSequence
End AppSequence
End Header
Use of uninitialized value $current in concatenation (.) or string at /usr/local/lib/perl5/site_perl/ONVIF/Deserializer/MessageParser.pm line 265.
setting self-data to
Start Body (skip = 0)
Start Body at level 1
Start Hello (skip = 0)
Use of uninitialized value $_class in concatenation (.) or string at /usr/local/lib/perl5/site_perl/ONVIF/Deserializer/MessageParser.pm line 155.
class:
skipping Hello
Start EndpointReference (skip = Hello)
Start Address (skip = Hello)
End Address
End EndpointReference
Start Types (skip = Hello)
End Types
Start Scopes (skip = Hello)
End Scopes
Start XAddrs (skip = Hello)
End XAddrs
Start MetadataVersion (skip = Hello)
End MetadataVersion
End Hello
End Body
Use of uninitialized value $current in concatenation (.) or string at /usr/local/lib/perl5/site_perl/ONVIF/Deserializer/MessageParser.pm line 265.
setting self-data to
End Envelope

So it looks like the Hello element which contains the EndpointReference isn't recognized because the class returned by the class_resolver is undef and so it gets skipped. This is where my understanding stops.

Extended logging with my added print statements ``` Probing for SOAP 1.1 ONVIF::deserialize begin ONVIF::deserialize: no parser ONVIF::deserialize eval PARSE: d2 = PARSE: d = 1 PARSE: zero = ONVIF::Deserializer::MessageParser=HASH(0x80246b4b0) Start Envelope (skip = 0) Receiving SOAP 1.2 Start Header (skip = 0) Start Header at level 1 Start MessageID (skip = 0) class: __SKIP__ skipping MessageID End MessageID Start To (skip = 0) class: __SKIP__ skipping To End To Start Action (skip = 0) class: __SKIP__ skipping Action End Action Start AppSequence (skip = 0) class: __SKIP__ skipping AppSequence End AppSequence End Header setting self-data to Start Body (skip = 0) Start Body at level 1 Start Hello (skip = 0) class: skipping Hello Start EndpointReference (skip = Hello) Start Address (skip = Hello) End Address End EndpointReference Start Types (skip = Hello) End Types Start Scopes (skip = Hello) End Scopes Start XAddrs (skip = Hello) End XAddrs Start MetadataVersion (skip = Hello) End MetadataVersion End Hello End Body setting self-data to End Envelope ONVIF::deserialize: parser data: ONVIF::deserialize end Received message: urn:uuid:1df2e14e-1dd2-11b2-8323-94a40819fd3d urn:schemas-xmlsoap-org:ws:2005:04:discovery http://schemas.xmlsoap.org/ws/2005/04/discovery/Hello urn:uuid:1df2e14e-1dd2-11b2-8323-94a40819fd3d dn:NetworkVideoTransmitter http://192.168.2.117/onvif/device_service 10 soap_version: 1.1 can set class resolver ONVIF::deserialize begin ONVIF::deserialize eval PARSE: d2 = PARSE: d = 1 PARSE: zero = ONVIF::Deserializer::MessageParser=HASH(0x80246b4b0) Start Envelope (skip = 0) Receiving SOAP 1.2 Start Header (skip = 0) Start Header at level 1 Start MessageID (skip = 0) class: __SKIP__ skipping MessageID End MessageID Start To (skip = 0) class: __SKIP__ skipping To End To Start Action (skip = 0) class: __SKIP__ skipping Action End Action Start AppSequence (skip = 0) class: __SKIP__ skipping AppSequence End AppSequence End Header setting self-data to Start Body (skip = 0) Start Body at level 1 Start Hello (skip = 0) class: skipping Hello Start EndpointReference (skip = Hello) Start Address (skip = Hello) End Address End EndpointReference Start Types (skip = Hello) End Types Start Scopes (skip = Hello) End Scopes Start XAddrs (skip = Hello) End XAddrs Start MetadataVersion (skip = Hello) End MetadataVersion End Hello End Body setting self-data to End Envelope ONVIF::deserialize: parser data: ONVIF::deserialize end %dd ONVIF::deserialize begin ONVIF::deserialize eval PARSE: d2 = PARSE: d = 1 PARSE: zero = ONVIF::Deserializer::MessageParser=HASH(0x80246b4b0) Start Envelope (skip = 0) Receiving SOAP 1.2 Start Header (skip = 0) Start Header at level 1 Start MessageID (skip = 0) class: __SKIP__ skipping MessageID End MessageID Start To (skip = 0) class: __SKIP__ skipping To End To Start Action (skip = 0) class: __SKIP__ skipping Action End Action Start AppSequence (skip = 0) class: __SKIP__ skipping AppSequence End AppSequence End Header setting self-data to Start Body (skip = 0) Start Body at level 1 Start Hello (skip = 0) class: skipping Hello Start EndpointReference (skip = Hello) Start Address (skip = Hello) End Address End EndpointReference Start Types (skip = Hello) End Types Start Scopes (skip = Hello) End Scopes Start XAddrs (skip = Hello) End XAddrs Start MetadataVersion (skip = Hello) End MetadataVersion End Hello End Body setting self-data to End Envelope ONVIF::deserialize: parser data: ONVIF::deserialize end success: 1 result_body: result_header: deserialize_message: success, returning body wantarray: no Error deserializing message. No message returned from deserializer. Received message: urn:uuid:1df2e14e-1dd2-11b2-8323-b46dc2e70b23 urn:schemas-xmlsoap-org:ws:2005:04:discovery http://schemas.xmlsoap.org/ws/2005/04/discovery/Hello urn:uuid:1df2e14e-1dd2-11b2-8323-b46dc2e70b23 dn:NetworkVideoTransmitter http://192.168.1.100/onvif/device_service 10 soap_version: 1.1 can set class resolver ONVIF::deserialize begin ONVIF::deserialize eval PARSE: d2 = PARSE: d = 1 PARSE: zero = ONVIF::Deserializer::MessageParser=HASH(0x80246b4b0) Start Envelope (skip = 0) Receiving SOAP 1.2 Start Header (skip = 0) Start Header at level 1 Start MessageID (skip = 0) class: __SKIP__ skipping MessageID End MessageID Start To (skip = 0) class: __SKIP__ skipping To End To Start Action (skip = 0) class: __SKIP__ skipping Action End Action Start AppSequence (skip = 0) class: __SKIP__ skipping AppSequence End AppSequence End Header setting self-data to Start Body (skip = 0) Start Body at level 1 Start Hello (skip = 0) class: skipping Hello Start EndpointReference (skip = Hello) Start Address (skip = Hello) End Address End EndpointReference Start Types (skip = Hello) End Types Start Scopes (skip = Hello) End Scopes Start XAddrs (skip = Hello) End XAddrs Start MetadataVersion (skip = Hello) End MetadataVersion End Hello End Body setting self-data to End Envelope ONVIF::deserialize: parser data: ONVIF::deserialize end %dd ONVIF::deserialize begin ONVIF::deserialize eval PARSE: d2 = PARSE: d = 1 PARSE: zero = ONVIF::Deserializer::MessageParser=HASH(0x80246b4b0) Start Envelope (skip = 0) Receiving SOAP 1.2 Start Header (skip = 0) Start Header at level 1 Start MessageID (skip = 0) class: __SKIP__ skipping MessageID End MessageID Start To (skip = 0) class: __SKIP__ skipping To End To Start Action (skip = 0) class: __SKIP__ skipping Action End Action Start AppSequence (skip = 0) class: __SKIP__ skipping AppSequence End AppSequence End Header setting self-data to Start Body (skip = 0) Start Body at level 1 Start Hello (skip = 0) class: skipping Hello Start EndpointReference (skip = Hello) Start Address (skip = Hello) End Address End EndpointReference Start Types (skip = Hello) End Types Start Scopes (skip = Hello) End Scopes Start XAddrs (skip = Hello) End XAddrs Start MetadataVersion (skip = Hello) End MetadataVersion End Hello End Body setting self-data to End Envelope ONVIF::deserialize: parser data: ONVIF::deserialize end success: 1 result_body: result_header: deserialize_message: success, returning body wantarray: no Error deserializing message. No message returned from deserializer. Probing for SOAP 1.2 ONVIF::deserialize begin ONVIF::deserialize: no parser ONVIF::deserialize eval PARSE: d2 = PARSE: d = 1 PARSE: zero = ONVIF::Deserializer::MessageParser=HASH(0x801f49708) Start Envelope (skip = 0) Receiving SOAP 1.2 Start Header (skip = 0) Start Header at level 1 Start MessageID (skip = 0) class: __SKIP__ skipping MessageID End MessageID Start To (skip = 0) class: __SKIP__ skipping To End To Start Action (skip = 0) class: __SKIP__ skipping Action End Action Start AppSequence (skip = 0) class: __SKIP__ skipping AppSequence End AppSequence End Header setting self-data to Start Body (skip = 0) Start Body at level 1 Start Hello (skip = 0) class: skipping Hello Start EndpointReference (skip = Hello) Start Address (skip = Hello) End Address End EndpointReference Start Types (skip = Hello) End Types Start Scopes (skip = Hello) End Scopes Start XAddrs (skip = Hello) End XAddrs Start MetadataVersion (skip = Hello) End MetadataVersion End Hello End Body setting self-data to End Envelope ONVIF::deserialize: parser data: ONVIF::deserialize end Received message: urn:uuid:1df2e14e-1dd2-11b2-8323-94a40819fd3d urn:schemas-xmlsoap-org:ws:2005:04:discovery http://schemas.xmlsoap.org/ws/2005/04/discovery/Hello urn:uuid:1df2e14e-1dd2-11b2-8323-94a40819fd3d dn:NetworkVideoTransmitter http://192.168.2.117/onvif/device_service 10 soap_version: 1.2 can set class resolver ONVIF::deserialize begin ONVIF::deserialize eval PARSE: d2 = PARSE: d = 1 PARSE: zero = ONVIF::Deserializer::MessageParser=HASH(0x801f49708) Start Envelope (skip = 0) Receiving SOAP 1.2 Start Header (skip = 0) Start Header at level 1 Start MessageID (skip = 0) class: __SKIP__ skipping MessageID End MessageID Start To (skip = 0) class: __SKIP__ skipping To End To Start Action (skip = 0) class: __SKIP__ skipping Action End Action Start AppSequence (skip = 0) class: __SKIP__ skipping AppSequence End AppSequence End Header setting self-data to Start Body (skip = 0) Start Body at level 1 Start Hello (skip = 0) class: skipping Hello Start EndpointReference (skip = Hello) Start Address (skip = Hello) End Address End EndpointReference Start Types (skip = Hello) End Types Start Scopes (skip = Hello) End Scopes Start XAddrs (skip = Hello) End XAddrs Start MetadataVersion (skip = Hello) End MetadataVersion End Hello End Body setting self-data to End Envelope ONVIF::deserialize: parser data: ONVIF::deserialize end %dd ONVIF::deserialize begin ONVIF::deserialize eval PARSE: d2 = PARSE: d = 1 PARSE: zero = ONVIF::Deserializer::MessageParser=HASH(0x801f49708) Start Envelope (skip = 0) Receiving SOAP 1.2 Start Header (skip = 0) Start Header at level 1 Start MessageID (skip = 0) class: __SKIP__ skipping MessageID End MessageID Start To (skip = 0) class: __SKIP__ skipping To End To Start Action (skip = 0) class: __SKIP__ skipping Action End Action Start AppSequence (skip = 0) class: __SKIP__ skipping AppSequence End AppSequence End Header setting self-data to Start Body (skip = 0) Start Body at level 1 Start Hello (skip = 0) class: skipping Hello Start EndpointReference (skip = Hello) Start Address (skip = Hello) End Address End EndpointReference Start Types (skip = Hello) End Types Start Scopes (skip = Hello) End Scopes Start XAddrs (skip = Hello) End XAddrs Start MetadataVersion (skip = Hello) End MetadataVersion End Hello End Body setting self-data to End Envelope ONVIF::deserialize: parser data: ONVIF::deserialize end success: 1 result_body: result_header: deserialize_message: success, returning body wantarray: no Error deserializing message. No message returned from deserializer. Received message: urn:uuid:1df2e14e-1dd2-11b2-8323-b46dc2e70b23 urn:schemas-xmlsoap-org:ws:2005:04:discovery http://schemas.xmlsoap.org/ws/2005/04/discovery/Hello urn:uuid:1df2e14e-1dd2-11b2-8323-b46dc2e70b23 dn:NetworkVideoTransmitter http://192.168.1.100/onvif/device_service 10 soap_version: 1.2 can set class resolver ONVIF::deserialize begin ONVIF::deserialize eval PARSE: d2 = PARSE: d = 1 PARSE: zero = ONVIF::Deserializer::MessageParser=HASH(0x801f49708) Start Envelope (skip = 0) Receiving SOAP 1.2 Start Header (skip = 0) Start Header at level 1 Start MessageID (skip = 0) class: __SKIP__ skipping MessageID End MessageID Start To (skip = 0) class: __SKIP__ skipping To End To Start Action (skip = 0) class: __SKIP__ skipping Action End Action Start AppSequence (skip = 0) class: __SKIP__ skipping AppSequence End AppSequence End Header setting self-data to Start Body (skip = 0) Start Body at level 1 Start Hello (skip = 0) class: skipping Hello Start EndpointReference (skip = Hello) Start Address (skip = Hello) End Address End EndpointReference Start Types (skip = Hello) End Types Start Scopes (skip = Hello) End Scopes Start XAddrs (skip = Hello) End XAddrs Start MetadataVersion (skip = Hello) End MetadataVersion End Hello End Body setting self-data to End Envelope ONVIF::deserialize: parser data: ONVIF::deserialize end %dd ONVIF::deserialize begin ONVIF::deserialize eval PARSE: d2 = PARSE: d = 1 PARSE: zero = ONVIF::Deserializer::MessageParser=HASH(0x801f49708) Start Envelope (skip = 0) Receiving SOAP 1.2 Start Header (skip = 0) Start Header at level 1 Start MessageID (skip = 0) class: __SKIP__ skipping MessageID End MessageID Start To (skip = 0) class: __SKIP__ skipping To End To Start Action (skip = 0) class: __SKIP__ skipping Action End Action Start AppSequence (skip = 0) class: __SKIP__ skipping AppSequence End AppSequence End Header setting self-data to Start Body (skip = 0) Start Body at level 1 Start Hello (skip = 0) class: skipping Hello Start EndpointReference (skip = Hello) Start Address (skip = Hello) End Address End EndpointReference Start Types (skip = Hello) End Types Start Scopes (skip = Hello) End Scopes Start XAddrs (skip = Hello) End XAddrs Start MetadataVersion (skip = Hello) End MetadataVersion End Hello End Body setting self-data to End Envelope ONVIF::deserialize: parser data: ONVIF::deserialize end success: 1 result_body: result_header: deserialize_message: success, returning body wantarray: no Error deserializing message. No message returned from deserializer. ```

A workaround would be greatly appreciated.

welcome[bot] commented 1 year ago

Thanks for opening your first issue here! Just a reminder, this forum is for Bug Reports only. Be sure to follow the issue template!