• I have discovered a problem with printing under linux using conquest 1413.

    In order for the dcmtk program findscu to work correctly, LittleEndianExplicit must be commented out in dgatesop.lst. When this happens printing stops.

    The only difference in the log output is that the line Print file: .... is missing.

    If LittleEndianExplicit is enabled again then the print files are generated.

    From the code in dgate.cpp (line 10465) it seems vr->SQObjectArray is not being populated.

    Does anyone have any possible solutions other than running multiple instances?

  • After trying to read and understand the DICOM standard part 5 I have a possible explanation of the LittleEndianExplicit issue. In section 7.3 dealing with byte ordering there is a note as follows: Note:

    Quote

    The Command Set structure as specified in PS 3.7 is encoded using the Little Endian Implicit VR Transfer Syntax.


    I think this means that the entire cfind exchange must use LittleEndianImplicit.

    When LittleEndianExplicit is available dcmtk cfind returns the following:

    Code
    findscu -d  --study --key 0008,0052="STUDY" --key 0010,0010 --key 0010,0020  --key 0008,0020  --call TRAEKIPG2 127.0.0.1 5678Request Parameters:Our Implementation Class UID:    1.2.276.0.7230010.3.0.3.5.4Our Implementation Version Name: OFFIS_DCMTK_354Their Implementation Class UID:Their Implementation Version Name:Application Context Name:    1.2.840.10008.3.1.1.1Calling Application Name:    FINDSCUCalled Application Name:     TRAEKIPG2Responding Application Name: resp AP TitleOur Max PDU Receive Size: 16384Their Max PDU Receive Size: 0Presentation Contexts:  Context ID:        1 (Proposed)    Abstract Syntax: =FINDStudyRootQueryRetrieveInformationModel    Proposed SCP/SCU Role: Default    Accepted SCP/SCU Role: Default    Proposed Transfer Syntax(es):      =LittleEndianExplicit      =BigEndianExplicit      =LittleEndianImplicitRequested Extended Negotiation: noneAccepted Extended Negotiation: noneConstructing Associate RQ PDUPDU Type: Associate Accept, PDU Length: 190 + 6 bytes PDU header  02  00  00  00  00  be  00  01  00  00  54  52  41  45  4b  49  50  47  32  20  20  20  20  20  20  20  46  49  4e  44  53  43  55  20  20  20  20  20  20  20  20  20  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  10  00  00  15  31  2e  32  2e  38  34  30  2e  31  30  30  30  38  2e  33  2e  31  2e  31  2e  31  21  00  00  1b  01  00  00  00  40  00  00  13  31  2e  32  2e  38  34  30  2e  31  30  30  30  38  2e  31  2e  32  2e  31  50  00  00  3e  51  00  00  04  00  00  40  00  52  00  00  22  31  2e  32  2e  38  32  36  2e  30  2e  31  2e  33  36  38  30  30  34  33  2e  32  2e  31  33  35  2e  31  30  36  36  2e  31  30  31  55  00  00  0c  31  2e  34  2e  31  32  2f  4f  54  48  45  52Association Parameters Negotiated:Our Implementation Class UID:    1.2.276.0.7230010.3.0.3.5.4Our Implementation Version Name: OFFIS_DCMTK_354Their Implementation Class UID:    1.2.826.0.1.3680043.2.135.1066.101Their Implementation Version Name: 1.4.12/OTHERApplication Context Name:    1.2.840.10008.3.1.1.1Calling Application Name:    FINDSCUCalled Application Name:     TRAEKIPG2Responding Application Name: TRAEKIPG2Our Max PDU Receive Size: 16384Their Max PDU Receive Size: 16384Presentation Contexts:  Context ID:        1 (Accepted)    Abstract Syntax: =FINDStudyRootQueryRetrieveInformationModel    Proposed SCP/SCU Role: Default    Accepted SCP/SCU Role: Default    Accepted Transfer Syntax: =LittleEndianExplicitRequested Extended Negotiation: noneAccepted Extended Negotiation: noneDIMSE Command To Send:# Dicom-Data-Set# Used TransferSyntax: UnknownTransferSyntax(0000,0000) UL 0                                        #   4, 1 CommandGroupLength(0000,0002) UI =FINDStudyRootQueryRetrieveInformationModel #  28, 1 AffectedSOPClassUID(0000,0100) US 32                                       #   2, 1 CommandField(0000,0110) US 1                                        #   2, 1 MessageID(0000,0700) US 2                                        #   2, 1 Priority(0000,0800) US 1                                        #   2, 1 DataSetTypeDIMSE sendDcmDataset: sending 88 bytesDIMSE sendDcmDataset: sending 38 bytesDIMSE receiveCommandDIMSE receiveCommand: 1 pdv's (88 bytes), presID=1DIMSE Command Received:# Dicom-Data-Set# Used TransferSyntax: LittleEndianImplicit(0000,0002) UI =FINDStudyRootQueryRetrieveInformationModel #  28, 1 AffectedSOPClassUID(0000,0100) US 32800                                    #   2, 1 CommandField(0000,0120) US 1                                        #   2, 1 MessageIDBeingRespondedTo(0000,0800) US 258                                      #   2, 1 DataSetType(0000,0900) US 65280                                    #   2, 1 StatusDIMSE receiveFileData: 82 bytes read (last: YES)RESPONSE: 1 (Pending)# Dicom-Data-Set# Used TransferSyntax: LittleEndianExplicit(0008,0020) UN 31\39\39\38\30\34\31\34                  #   8, 1 StudyDate(0008,0052) UN 53\54\55\44\59\20                        #   6, 1 QueryRetrieveLevel(0010,0010) UN 48\45\41\44\20\45\58\50\32\20            #  10, 1 PatientsName(0010,0020) UN 30\30\30\39\37\30\33\38\32\38            #  10, 1 PatientID--------DIMSE receiveCommandDIMSE receiveCommand: 1 pdv's (88 bytes), presID=1DIMSE Command Received:# Dicom-Data-Set# Used TransferSyntax: LittleEndianImplicit(0000,0002) UI =FINDStudyRootQueryRetrieveInformationModel #  28, 1 AffectedSOPClassUID(0000,0100) US 32800                                    #   2, 1 CommandField(0000,0120) US 1                                        #   2, 1 MessageIDBeingRespondedTo(0000,0800) US 257                                      #   2, 1 DataSetType(0000,0900) US 0                                        #   2, 1 Status


    Part of the data sent captured by wireshark looks like this:

    Code
    0000  00 00 00 00 00 00 00 00  00 00 00 00 08 00 45 00   ........ ......E.0010  00 f6 8b ea 40 00 40 06  b0 15 7f 00 00 01 7f 00   ....@.@. ........0020  00 01 16 2e c3 3f c1 60  5e 48 c1 7f 8e 8c 80 18   .....?.` ^H......0030  02 11 fe ea 00 00 01 01  08 0a 07 b1 d7 35 07 b1   ........ .....5..0040  d7 35 04 00 00 00 00 58  00 00 00 54 01 02 08 00   .5.....X ...T....0050  20 00 55 4e 00 00 08 00  00 00 31 39 39 38 30 34    .UN.... ..1998040060  31 34 08 00 52 00 55 4e  00 00 06 00 00 00 53 54   14..R.UN ......ST0070  55 44 59 20 10 00 10 00  55 4e 00 00 0a 00 00 00   UDY .... UN......0080  48 45 41 44 20 45 58 50  32 20 10 00 20 00 55 4e   HEAD EXP 2 .. .UN0090  00 00 0a 00 00 00 30 30  30 39 37 30 33 38 32 38   ......00 0970382800a0  04 00 00 00 00 5e 00 00  00 5a 01 03 00 00 00 00   .....^.. .Z......00b0  04 00 00 00 4c 00 00 00  00 00 02 00 1c 00 00 00   ....L... ........00c0  31 2e 32 2e 38 34 30 2e  31 30 30 30 38 2e 35 2e   1.2.840. 10008.5.00d0  31 2e 34 2e 31 2e 32 2e  32 2e 31 00 00 00 00 01   1.4.1.2. 2.1.....00e0  02 00 00 00 20 80 00 00  20 01 02 00 00 00 01 00   .... ...  .......00f0  00 00 00 08 02 00 00 00  01 01 00 00 00 09 02 00   ........ ........0100  00 00 00 00                                        ....

    When LittleEndianExplicit is not available the following is produced:

    Code
    findscu -d  --study --key 0008,0052="STUDY" --key 0010,0010 --key 0010,0020  --key 0008,0020  --call TRAEKIPG2 127.0.0.1 5678Request Parameters:Our Implementation Class UID:    1.2.276.0.7230010.3.0.3.5.4Our Implementation Version Name: OFFIS_DCMTK_354Their Implementation Class UID:Their Implementation Version Name:Application Context Name:    1.2.840.10008.3.1.1.1Calling Application Name:    FINDSCUCalled Application Name:     TRAEKIPG2Responding Application Name: resp AP TitleOur Max PDU Receive Size: 16384Their Max PDU Receive Size: 0Presentation Contexts:  Context ID:        1 (Proposed)    Abstract Syntax: =FINDStudyRootQueryRetrieveInformationModel    Proposed SCP/SCU Role: Default    Accepted SCP/SCU Role: Default    Proposed Transfer Syntax(es):      =LittleEndianExplicit      =BigEndianExplicit      =LittleEndianImplicitRequested Extended Negotiation: noneAccepted Extended Negotiation: noneConstructing Associate RQ PDUPDU Type: Associate Accept, PDU Length: 190 + 6 bytes PDU header  02  00  00  00  00  be  00  01  00  00  54  52  41  45  4b  49  50  47  32  20  20  20  20  20  20  20  46  49  4e  44  53  43  55  20  20  20  20  20  20  20  20  20  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  10  00  00  15  31  2e  32  2e  38  34  30  2e  31  30  30  30  38  2e  33  2e  31  2e  31  2e  31  21  00  00  1b  01  00  00  00  40  00  00  13  31  2e  32  2e  38  34  30  2e  31  30  30  30  38  2e  31  2e  32  2e  31  50  00  00  3e  51  00  00  04  00  00  40  00  52  00  00  22  31  2e  32  2e  38  32  36  2e  30  2e  31  2e  33  36  38  30  30  34  33  2e  32  2e  31  33  35  2e  31  30  36  36  2e  31  30  31  55  00  00  0c  31  2e  34  2e  31  32  2f  4f  54  48  45  52Association Parameters Negotiated:Our Implementation Class UID:    1.2.276.0.7230010.3.0.3.5.4Our Implementation Version Name: OFFIS_DCMTK_354Their Implementation Class UID:    1.2.826.0.1.3680043.2.135.1066.101Their Implementation Version Name: 1.4.12/OTHERApplication Context Name:    1.2.840.10008.3.1.1.1Calling Application Name:    FINDSCUCalled Application Name:     TRAEKIPG2Responding Application Name: TRAEKIPG2Our Max PDU Receive Size: 16384Their Max PDU Receive Size: 16384Presentation Contexts:  Context ID:        1 (Accepted)    Abstract Syntax: =FINDStudyRootQueryRetrieveInformationModel    Proposed SCP/SCU Role: Default    Accepted SCP/SCU Role: Default    Accepted Transfer Syntax: =LittleEndianExplicitRequested Extended Negotiation: noneAccepted Extended Negotiation: noneDIMSE Command To Send:# Dicom-Data-Set# Used TransferSyntax: UnknownTransferSyntax(0000,0000) UL 0                                        #   4, 1 CommandGroupLength(0000,0002) UI =FINDStudyRootQueryRetrieveInformationModel #  28, 1 AffectedSOPClassUID(0000,0100) US 32                                       #   2, 1 CommandField(0000,0110) US 1                                        #   2, 1 MessageID(0000,0700) US 2                                        #   2, 1 Priority(0000,0800) US 1                                        #   2, 1 DataSetTypeDIMSE sendDcmDataset: sending 88 bytesDIMSE sendDcmDataset: sending 38 bytesDIMSE receiveCommandDIMSE receiveCommand: 1 pdv's (88 bytes), presID=1DIMSE Command Received:# Dicom-Data-Set# Used TransferSyntax: LittleEndianImplicit(0000,0002) UI =FINDStudyRootQueryRetrieveInformationModel #  28, 1 AffectedSOPClassUID(0000,0100) US 32800                                    #   2, 1 CommandField(0000,0120) US 1                                        #   2, 1 MessageIDBeingRespondedTo(0000,0800) US 258                                      #   2, 1 DataSetType(0000,0900) US 65280                                    #   2, 1 StatusDIMSE receiveFileData: 82 bytes read (last: YES)RESPONSE: 1 (Pending)# Dicom-Data-Set# Used TransferSyntax: LittleEndianExplicit(0008,0020) UN 31\39\39\38\30\34\31\34                  #   8, 1 StudyDate(0008,0052) UN 53\54\55\44\59\20                        #   6, 1 QueryRetrieveLevel(0010,0010) UN 48\45\41\44\20\45\58\50\32\20            #  10, 1 PatientsName(0010,0020) UN 30\30\30\39\37\30\33\38\32\38            #  10, 1 PatientID--------DIMSE receiveCommandDIMSE receiveCommand: 1 pdv's (88 bytes), presID=1DIMSE Command Received:# Dicom-Data-Set# Used TransferSyntax: LittleEndianImplicit(0000,0002) UI =FINDStudyRootQueryRetrieveInformationModel #  28, 1 AffectedSOPClassUID(0000,0100) US 32800                                    #   2, 1 CommandField(0000,0120) US 1                                        #   2, 1 MessageIDBeingRespondedTo(0000,0800) US 257                                      #   2, 1 DataSetType(0000,0900) US 0                                        #   2, 1 Status

    wireshark capture:

    The point to note is that the study demographic data is sent as LittleEndianExplicit when available, so even though the data on the wire is the same the interpretation is incorrect. I think the standard says that only the pixel data should be sent as LittleEndianExplicit.

    If the flag --propose-implicit is added to the dcmtk cfind then the correct result is returned, but our Philips nuclear medicine workstations just crash.

  • I just wanted to post an update of my analysis of this problem. My theory that the cfind demographics should be returned as LittleEndianImplicit is incorrect. I tried connecting to different dicom server that gave a correct response as LittleEndianExplicit.

    If I caputre data with wireshark from the two servers using LittleEndianExplicit it is able to decode the data from the other server but not from conquest.

    If I am able to track down the source of the problem I'll post it with a new subjet title.

  • Mark,

    Can you please have a brief look at this problem for version 1.4.14? I believe LittleEndianImplicit and LittleEndianExplicit both work now (at least for findscu). I am working now also to fix BigEndianExplicit.

    Marcel

    Marcel van Herk is developer of the Conquest DICOM server together with Lambert Zijp.

  • Hi Marcel and group,

    My tests confirm that both cfind and dicom print now work on linux with both LittleEndianImplicit and LittleEndianExplicit enabled. This will simplify my setup as I won't have to use separate storage and print servers.

    Thanks.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!