Browser name and version (if this is an issue with the web interface)
N/A
If the issue concerns a camera
Make and Model: "Wireless Outdoor Camera DigiCam" "Model no.: P05" (it's a cheap no-name camera)
frame rate: 8--12
resolution: "full hd" (looks like upscaled 480p)
ZoneMinder Source Type: ???
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:
/usr/local/bin/zmonvif-probe.pl -v probe
Expected behavior
Sensible output listing the camera.
Actual behaviourError 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):
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-94a40819fd3durn:schemas-xmlsoap-org:ws:2005:04:discoveryhttp://schemas.xmlsoap.org/ws/2005/04/discovery/Hellourn:uuid:1df2e14e-1dd2-11b2-8323-94a40819fd3ddn:NetworkVideoTransmitterhttp://192.168.2.117/onvif/device_service10
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-b46dc2e70b23urn:schemas-xmlsoap-org:ws:2005:04:discoveryhttp://schemas.xmlsoap.org/ws/2005/04/discovery/Hellourn:uuid:1df2e14e-1dd2-11b2-8323-b46dc2e70b23dn:NetworkVideoTransmitterhttp://192.168.1.100/onvif/device_service10
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-94a40819fd3durn:schemas-xmlsoap-org:ws:2005:04:discoveryhttp://schemas.xmlsoap.org/ws/2005/04/discovery/Hellourn:uuid:1df2e14e-1dd2-11b2-8323-94a40819fd3ddn:NetworkVideoTransmitterhttp://192.168.2.117/onvif/device_service10
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-b46dc2e70b23urn:schemas-xmlsoap-org:ws:2005:04:discoveryhttp://schemas.xmlsoap.org/ws/2005/04/discovery/Hellourn:uuid:1df2e14e-1dd2-11b2-8323-b46dc2e70b23dn:NetworkVideoTransmitterhttp://192.168.1.100/onvif/device_service10
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.
```
Describe Your Environment
zoneminder-1.36.12_1
pkg install zoneminder
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:
/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 leftundef
), so theONVIF::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):
The parser steps for this seem to go something like so (when
Receiving SOAP 1.2
):So it looks like the
Hello
element which contains theEndpointReference
isn't recognized because theclass
returned by theclass_resolver
isundef
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:A workaround would be greatly appreciated.