On Tue, Aug 11, 2020, 06:08 chuck c <bubbas...@gmail.com> wrote:

> There seems to be an extra call to dissect_dcm_tag() in Wireshark before
> sop_class_uid and sop_instance_uid are needed in
> dcm_export_create_object().
>
> In tshark they are null so fail the test of containing data and
> boilerplate values are put in.
>
> This started with a question about number of exported objects:
>
> https://ask.wireshark.org/question/18322/dicom-object-extraction-discrepancy-between-tshark-and-wireshark/
>
> Maybe cleaning things up so that the UIDs match in exports from wireshark
> and tshark will also fix file exports?
>
>
> dcm_export_create_object(packet_info *pinfo, dcm_state_assoc_t *assoc,
> dcm_state_pdv_t *pdv)
>
> --------------------------------------------------------------------------------------------
>   tshark_debug("is_storage =  %d", pdv->is_storage);
>   tshark_debug("packet =  %d", pinfo->num);
>   tshark_debug("sop_class_uid =  %s", pdv_curr->sop_class_uid);
>   tshark_debug("sop_instance_uid =  %s", pdv_curr->sop_instance_uid);
>
>     if (pdv->is_storage &&
>         pdv_curr->sop_class_uid    && strlen(pdv_curr->sop_class_uid)>0 &&
>         pdv_curr->sop_instance_uid &&
> strlen(pdv_curr->sop_instance_uid)>0) {
>
>
> dissect_dcm_tag(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
>
> --------------------------------------------------------------------------------------------
>         /* -------------------------------------------------------------
>            We have decoded the value. Now store those tags of interest
>            -------------------------------------------------------------
>         */
>
>         /* Store SOP Class and Instance UID in first PDV of this object */
>         if (grp == 0x0008 && elm == 0x0016) {
>             dcm_state_pdv_get_obj_start(pdv)->sop_class_uid =
> wmem_strdup(wmem_file_scope(), tag_value);
>   tshark_debug("dissect_dcm_tag() set sop_class_uid =  %s",
> dcm_state_pdv_get_obj_start(pdv)->sop_class_uid);
>         }
>         else if (grp == 0x0008 && elm == 0x0018) {
>             dcm_state_pdv_get_obj_start(pdv)->sop_instance_uid =
> wmem_strdup(wmem_file_scope(), tag_value);
>   tshark_debug("dissect_dcm_tag() set sop_instance_uid =  %s",
> dcm_state_pdv_get_obj_start(pdv)->sop_instance_uid);
>         }
>         else if (grp == 0x0000 && elm == 0x0100) {
>             /* This is the command tag -> overwrite existing PDV
> description */
>             pdv->desc = wmem_strdup(wmem_file_scope(), tag_value);
>         }
>
> admin1@ubuntu1:~/wireshark/build/run$ ./tshark -v
>
> ** (process:26290): WARNING **: 22:52:05.703: tshark started with 2 args
>
> ** (process:26290): WARNING **: 22:52:06.003: tshark reading settings
> TShark (Wireshark) 3.2.3 (Git commit f39b50865a13)
>
> Copyright 1998-2020 Gerald Combs <ger...@wireshark.org> and contributors.
> License GPLv2+: GNU GPL version 2 or later <
> https://www.gnu.org/licenses/gpl-2.0.html>
> This is free software; see the source for copying conditions. There is NO
> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
>
> Compiled (64-bit) with libpcap, with POSIX capabilities (Linux), with
> libnl 3,
> with GLib 2.56.4, with zlib 1.2.11, with SMI 0.4.8, with c-ares 1.14.0,
> with Lua
> 5.2.4, with GnuTLS 3.5.18 and PKCS #11 support, with Gcrypt 1.8.1, with MIT
> Kerberos, with MaxMind DB resolver, with nghttp2 1.30.0, with brotli, with
> LZ4,
> with Zstandard, with Snappy, with libxml2 2.9.10.
>
> Running on Linux 4.15.0-112-generic, with Intel(R) Xeon(R) CPU
> E5645
> @ 2.40GHz (with SSE4.2), with 3944 MB of physical memory, with locale
> en_US.UTF-8, with libpcap version 1.8.1, with GnuTLS 3.5.18, with Gcrypt
> 1.8.1,
> with brotli 1.0.7, with zlib 1.2.11, binary plugins supported (0 loaded).
>
> Built using gcc 7.5.0.
> admin1@ubuntu1:~/wireshark/build/run$
>
>
> admin1@ubuntu1:~/wireshark/build/run$ ./tshark -2 -r ../../*cap
> --export-objects dicom,. -q 2>&1 | grep -i = | more
> ** (process:26252): WARNING **: 22:50:50.454: tshark: do_dissection = FALSE
> ** (process:26252): WARNING **: 22:50:50.456: tshark:
> perform_two_pass_analysis, do_dissection=TRUE
> ** (process:26252): WARNING **: 22:50:50.456: tshark: create_proto_tree =
> FALSE
> ** (process:26252): WARNING **: 22:50:50.468: is_storage =  0
> ** (process:26252): WARNING **: 22:50:50.468: packet =  585
> ** (process:26252): WARNING **: 22:50:50.468: sop_class_uid =  (null)
> ** (process:26252): WARNING **: 22:50:50.468: sop_instance_uid =  (null)
> ** (process:26252): WARNING **: 22:50:50.468: is_storage =  0
> ** (process:26252): WARNING **: 22:50:50.468: packet =  588
> ** (process:26252): WARNING **: 22:50:50.468: sop_class_uid =  (null)
> ** (process:26252): WARNING **: 22:50:50.468: sop_instance_uid =  (null)
> ** (process:26252): WARNING **: 22:50:50.470: is_storage =  0
> ** (process:26252): WARNING **: 22:50:50.470: packet =  649
> ** (process:26252): WARNING **: 22:50:50.470: sop_class_uid =  (null)
> ** (process:26252): WARNING **: 22:50:50.470: sop_instance_uid =  (null)
> ** (process:26252): WARNING **: 22:50:50.519: is_storage =  1
> ** (process:26252): WARNING **: 22:50:50.519: packet =  2804
> ** (process:26252): WARNING **: 22:50:50.519: sop_class_uid =  (null)
> ** (process:26252): WARNING **: 22:50:50.519: sop_instance_uid =  (null)
> ** (process:26252): WARNING **: 22:50:50.521: is_storage =  0
> ** (process:26252): WARNING **: 22:50:50.521: packet =  2808
> ** (process:26252): WARNING **: 22:50:50.521: sop_class_uid =  (null)
> ** (process:26252): WARNING **: 22:50:50.521: sop_instance_uid =  (null)
> ** (process:26252): WARNING **: 22:50:50.521: is_storage =  0
> ** (process:26252): WARNING **: 22:50:50.521: packet =  2810
> ** (process:26252): WARNING **: 22:50:50.521: sop_class_uid =  (null)
> ** (process:26252): WARNING **: 22:50:50.521: sop_instance_uid =  (null)
> ** (process:26252): WARNING **: 22:50:50.521: is_storage =  0
> ** (process:26252): WARNING **: 22:50:50.521: packet =  2815
> ** (process:26252): WARNING **: 22:50:50.521: sop_class_uid =  (null)
> ** (process:26252): WARNING **: 22:50:50.521: sop_instance_uid =  (null)
> ** (process:26252): WARNING **: 22:50:50.533: tshark: create_proto_tree =
> TRUE
> ** (process:26252): WARNING **: 22:50:50.579: is_storage =  0
> ** (process:26252): WARNING **: 22:50:50.579: packet =  585
> ** (process:26252): WARNING **: 22:50:50.579: sop_class_uid =  (null)
> ** (process:26252): WARNING **: 22:50:50.579: sop_instance_uid =  (null)
> ** (process:26252): WARNING **: 22:50:50.580: is_storage =  0
> ** (process:26252): WARNING **: 22:50:50.580: packet =  588
> ** (process:26252): WARNING **: 22:50:50.580: sop_class_uid =  (null)
> ** (process:26252): WARNING **: 22:50:50.580: sop_instance_uid =  (null)
> ** (process:26252): WARNING **: 22:50:50.585: is_storage =  0
> ** (process:26252): WARNING **: 22:50:50.585: packet =  649
> ** (process:26252): WARNING **: 22:50:50.585: sop_class_uid =  (null)
> ** (process:26252): WARNING **: 22:50:50.585: sop_instance_uid =  (null)
> ** (process:26252): WARNING **: 22:50:50.746: is_storage =  1
> ** (process:26252): WARNING **: 22:50:50.746: packet =  2804
> ** (process:26252): WARNING **: 22:50:50.746: sop_class_uid =  (null)
> ** (process:26252): WARNING **: 22:50:50.746: sop_instance_uid =  (null)
> ** (process:26252): WARNING **: 22:50:50.747: dissect_dcm_tag() set
> sop_class_uid =  1.2.840.10008.5.1.4.1.1.7 (Secondary Capture Image Stora
> ge)
> ** (process:26252): WARNING **: 22:50:50.747: dissect_dcm_tag() set
> sop_instance_uid =  1.2.276.0.7230010.3.1.4.341615093.12584.1428680298.84
> 5
> ** (process:26252): WARNING **: 22:50:50.748: is_storage =  0
> ** (process:26252): WARNING **: 22:50:50.748: packet =  2808
> ** (process:26252): WARNING **: 22:50:50.748: sop_class_uid =  (null)
> ** (process:26252): WARNING **: 22:50:50.748: sop_instance_uid =  (null)
> ** (process:26252): WARNING **: 22:50:50.749: is_storage =  0
> ** (process:26252): WARNING **: 22:50:50.749: packet =  2810
> ** (process:26252): WARNING **: 22:50:50.749: sop_class_uid =  (null)
> ** (process:26252): WARNING **: 22:50:50.749: sop_instance_uid =  (null)
> ** (process:26252): WARNING **: 22:50:50.749: is_storage =  0
> ** (process:26252): WARNING **: 22:50:50.749: packet =  2815
> ** (process:26252): WARNING **: 22:50:50.749: sop_class_uid =  (null)
> ** (process:26252): WARNING **: 22:50:50.749: sop_instance_uid =  (null)
> admin1@ubuntu1:~/wireshark/build/run$
>
>
> admin1@ubuntu1:~/wireshark/build/run$ ./wireshark -v
> Wireshark 3.2.3 (Git commit f39b50865a13)
>
> Copyright 1998-2020 Gerald Combs <ger...@wireshark.org> and contributors.
> License GPLv2+: GNU GPL version 2 or later <
> https://www.gnu.org/licenses/gpl-2.0.html>
> This is free software; see the source for copying conditions. There is NO
> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
>
> Compiled (64-bit) with Qt 5.9.5, with libpcap, with POSIX capabilities
> (Linux),
> with libnl 3, with GLib 2.56.4, with zlib 1.2.11, with SMI 0.4.8, with
> c-ares
> 1.14.0, with Lua 5.2.4, with GnuTLS 3.5.18 and PKCS #11 support, with
> Gcrypt
> 1.8.1, with MIT Kerberos, with MaxMind DB resolver, with nghttp2 1.30.0,
> with
> brotli, with LZ4, with Zstandard, with Snappy, with libxml2 2.9.10, with
> QtMultimedia, without automatic updates, with SpeexDSP (using system
> library),
> with SBC, with SpanDSP, without bcg729.
>
> Running on Linux 4.15.0-112-generic, with Intel(R) Xeon(R) CPU
> E5645
> @ 2.40GHz (with SSE4.2), with 3944 MB of physical memory, with locale
> en_US.UTF-8, with libpcap version 1.8.1, with GnuTLS 3.5.18, with Gcrypt
> 1.8.1,
> with brotli 1.0.7, with zlib 1.2.11, binary plugins supported (0 loaded).
>
> Built using gcc 7.5.0.
> admin1@ubuntu1:~/wireshark/build/run$ ./wireshark
> 22:53:10.495          Warn dissect_dcm_tag() set sop_class_uid =
>  1.2.840.10008.5.1.4.1.1.7 (Secondary Capture Image Storage)
> 22:53:10.495          Warn dissect_dcm_tag() set sop_instance_uid =
>  1.2.276.0.7230010.3.1.4.341615093.12584.1428680298.845
> 22:53:15.992          Warn is_storage =  0
> 22:53:15.992          Warn packet =  585
> 22:53:15.992          Warn sop_class_uid =  (null)
> 22:53:15.992          Warn sop_instance_uid =  (null)
> 22:53:15.992          Warn is_storage =  0
> 22:53:15.992          Warn packet =  588
> 22:53:15.992          Warn sop_class_uid =  (null)
> 22:53:15.992          Warn sop_instance_uid =  (null)
> 22:53:15.994          Warn is_storage =  0
> 22:53:15.994          Warn packet =  649
> 22:53:15.994          Warn sop_class_uid =  (null)
> 22:53:15.994          Warn sop_instance_uid =  (null)
> 22:53:16.043          Warn is_storage =  1
> 22:53:16.043          Warn packet =  2804
> 22:53:16.043          Warn sop_class_uid =  1.2.840.10008.5.1.4.1.1.7
> (Secondary Capture Image Storage)
> 22:53:16.043          Warn sop_instance_uid =
>  1.2.276.0.7230010.3.1.4.341615093.12584.1428680298.845
> 22:53:16.045          Warn is_storage =  0
> 22:53:16.045          Warn packet =  2808
> 22:53:16.045          Warn sop_class_uid =  (null)
> 22:53:16.045          Warn sop_instance_uid =  (null)
> 22:53:16.045          Warn is_storage =  0
> 22:53:16.045          Warn packet =  2810
> 22:53:16.045          Warn sop_class_uid =  (null)
> 22:53:16.045          Warn sop_instance_uid =  (null)
> 22:53:16.045          Warn is_storage =  0
> 22:53:16.045          Warn packet =  2815
> 22:53:16.045          Warn sop_class_uid =  (null)
> 22:53:16.045          Warn sop_instance_uid =  (null)
> 22:53:16.111          Warn is_storage =  1
> 22:53:16.111          Warn packet =  2804
> 22:53:16.111          Warn sop_class_uid =  1.2.840.10008.5.1.4.1.1.7
> (Secondary Capture Image Storage)
> 22:53:16.111          Warn sop_instance_uid =
>  1.2.276.0.7230010.3.1.4.341615093.12584.1428680298.845
> 22:53:16.113          Warn dissect_dcm_tag() set sop_class_uid =
>  1.2.840.10008.5.1.4.1.1.7 (Secondary Capture Image Storage)
> 22:53:16.113          Warn dissect_dcm_tag() set sop_instance_uid =
>  1.2.276.0.7230010.3.1.4.341615093.12584.1428680298.845
> Gtk-Message: 22:53:25.655: GtkDialog mapped without a transient parent.
> This is discouraged.
> admin1@ubuntu1:~/wireshark/build/run$
>
>
> On Mon, Aug 10, 2020 at 10:03 PM chuck c <bubbas...@gmail.com> wrote:
>
>> I think I muddied that waters asking about two-pass and export objects.
>>
>> The tshark export (with or without -2) works in versions 2.6 and 3.0.
>> Something changed in 3.2 such that wireshark produces a good file and the
>> tshark export doesn't match.
>>
>> Pretty much in over my head as to whether to look in tshark.c,
>> packet-dcm.c or somewhere else.
>> Was hoping to narrow things down before moving this to Bugzilla.
>>
>> On Mon, Aug 10, 2020 at 9:30 PM Guy Harris <ghar...@sonic.net> wrote:
>>
>>> On Aug 10, 2020, at 6:00 PM, John Thacker <johnthac...@gmail.com> wrote:
>>>
>>> > On Mon, Aug 10, 2020 at 5:32 PM chuck c <bubbas...@gmail.com> wrote:
>>> >> tshark --export-objects dicom is behaving differently than exporting
>>> Dicom objects in Wireshark.
>>> >>
>>> >> Is the "-2" option assumed to be set, observed if set or not used at
>>> all for exporting objects with tshark?
>>> >
>>> > Having implemented Export Objects on a different custom TFTP-like
>>> protocol, I experienced the same thing.
>>> >
>>> > With tshark, -2 is observed if set, and that can result in different
>>> behavior. Generally more accurate information is obtained with two passes,
>>> which is equivalent to Wireshark behavior.
>>>
>>> Generally, at least for packet dissection, the only thing you get if you
>>> defer displaying packets until after the first pass is that you get to see
>>> not only "this frame is dissected as a response to the packet dissected for
>>> frame N" but also "this frame is dissected as a packet the response to
>>> which is in frame M".  There may be exceptions, but it's best to keep them
>>> to a minimum.
>>>
>>> > There are certain protocols where single pass analysis just isn't
>>> sufficient to determine all the data, and dissectors where some state
>>> object is set, like packet-dcm.c, are a common case.
>>>
>>> If M < N, most protocols do not require data from packet N (at that
>>> protocol layer) in order to process packet M; that even applies to
>>> implementations that maintain state.  The same applies to dissection; when
>>> dissecting a packet, all state established by previous packets is available.
>>>
>>> What are some examples where you need information from *later* packets
>>> to:
>>>
>>>         dissect a packet completely;
>>>
>>>         start constructing a file object?
>>>
>>> ___________________________________________________________________________
>>> Sent via:    Wireshark-dev mailing list <wireshark-dev@wireshark.org>
>>> Archives:    https://www.wireshark.org/lists/wireshark-dev
>>> Unsubscribe: https://www.wireshark.org/mailman/options/wireshark-dev
>>>              mailto:wireshark-dev-requ...@wireshark.org
>>> ?subject=unsubscribe
>>
>>
> ___________________________________________________________________________
> Sent via:    Wireshark-dev mailing list <wireshark-dev@wireshark.org>
> Archives:    https://www.wireshark.org/lists/wireshark-dev
> Unsubscribe: https://www.wireshark.org/mailman/options/wireshark-dev
>              mailto:wireshark-dev-requ...@wireshark.org
> ?subject=unsubscribe
___________________________________________________________________________
Sent via:    Wireshark-dev mailing list <wireshark-dev@wireshark.org>
Archives:    https://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://www.wireshark.org/mailman/options/wireshark-dev
             mailto:wireshark-dev-requ...@wireshark.org?subject=unsubscribe

Reply via email to