Linux printing issue

  • 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

  • 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!