Transfer JPEG2000 Lossless image fails from Conquest to Orthanc

Hi

I am testing transferring compressed images from Conquest to Orthanc using various compression schemes, Only uncompressed images are being transferred and all other compression fails with the following error:

E0312 11:44:05.217373 StoreScp.cpp:294] Store SCP Failed: DIMSE Failed to receive message
W: DIMSE Warning: (CONQUESTSRV1,ROUTER): DIMSE receiveDataSetInMemory: dset->read() Failed (Illegal call, perhaps wrong parameters)
E0312 11:46:02.661522 StoreScp.cpp:294] Store SCP Failed: DIMSE Failed to receive message

Sample Image Link (JPEG2000 Lossless) + Orthanc Config + Conquest Config: https://we.tl/t-LaYeYETX4s
Using: Orthanc 1.7.2 (Windows)

Any help will be appreciated.

Regards
Kavi

Log from Conquest Server when transfer fails:

[CONQUESTSRV1] c-move from GUI
[CONQUESTSRV1]
[CONQUESTSRV1] UPACS THREAD 10: STARTED AT: Fri Mar 12 12:08:16 2021
[CONQUESTSRV1] Calling Application Title : "CONQUESTSRV1 "
[CONQUESTSRV1] Called Application Title : "CONQUESTSRV1 "
[CONQUESTSRV1] Application Context : “1.2.840.10008.3.1.1.1”, PDU length: 32768
[CONQUESTSRV1] Presentation Context 0 “1.2.840.10008.5.1.4.1.2.1.2” 1
[CONQUESTSRV1] Presentation Context 1 “1.2.840.10008.5.1.4.1.2.2.2” 1
[CONQUESTSRV1] C-Move Destination: "ROUTER "
[CONQUESTSRV1] Number of images to send: 1
[CONQUESTSRV1] Accepted compression: ui
[CONQUESTSRV1] Sending file : c:\dicomserver150\data\1008199\1.2.392.200036.9116.2.5.1.16.1613454267.1604801902.648263_0003_000001_16155297260000.dcm
[CONQUESTSRV1] C-Move (PatientRoot)
[CONQUESTSRV1] ***preretrieve/forward xxx to: remote DICOM error
[CONQUESTSRV1] UPACS THREAD 10: ENDED AT: Fri Mar 12 12:08:16 2021
[CONQUESTSRV1] UPACS THREAD 10: TOTAL RUNNING TIME: 0 SECONDS

Detailed Orthanc log is below:

I0314 10:24:52.743776 CommandDispatcher.cpp:327] Association Received from AET CONQUESTSRV1 on IP 127.0.0.1

I0314 10:24:52.743776 main.cpp:287] Incoming connection from AET CONQUESTSRV1 on IP 127.0.0.1, calling AET ROUTER

I0314 10:24:52.743776 CommandDispatcher.cpp:680] Association Acknowledged (Max Send PDV: 32756)

I0314 10:24:52.754380 main.cpp:307] Incoming Store request from AET CONQUESTSRV1 on IP 127.0.0.1, calling AET ROUTER

W: DIMSE Warning: (CONQUESTSRV1,ROUTER): DIMSE receiveDataSetInMemory: dset->read() Failed (Illegal call, perhaps wrong parameters)

E0314 10:24:52.755416 StoreScp.cpp:294] Store SCP Failed: DIMSE Failed to receive message

I0314 10:24:52.755416 CommandDispatcher.cpp:919] DIMSE Failed to receive message

0006:020f DIMSE: Command PDV Expected

I0314 10:24:52.755416 CommandDispatcher.cpp:936] DIMSE failure (aborting association): DIMSE Failed to receive message

0006:020f DIMSE: Command PDV Expected

Hi Sebastien

Can you advice on my issue here?

Rgards
Kavi

After much investigation it looks like an issue with association negotiation between orthanc and conquest.

When sending from Conquest to Orthanc : Conquest lists CT once with two syntaxes, ideally the highest priority should be accepted by Orthanc but it doesnot do that and accepts the default fallback option.

When sending from Orthanc to Conquest/Radiant/Another Orthanc : Orthanc lists CT twice with different syntaxes.

Packet capture reveals the following:

Orthanc to Orthanc Request:

A-ASSOCIATE request ROUTER → ORTHANC

Protocol Version: 1

Called AE Title: ORTHANC

Calling AE Title: ROUTER

Application Context: DICOM Application Context Name (1.2.840.10008.3.1.1.1)

Presentation Context: CT Image Storage (1.2.840.10008.5.1.4.1.1.2)

Item Type: Presentation Context (0x20)

Item Length: 59

Context ID: 0x01

Abstract Syntax: CT Image Storage (1.2.840.10008.5.1.4.1.1.2)

Transfer Syntax: JPEG Lossless, Non-Hierarchical (Process 14) (1.2.840.10008.1.2.4.57)

Presentation Context: CT Image Storage (1.2.840.10008.5.1.4.1.1.2)

Item Type: Presentation Context (0x20)

Item Length: 54

Context ID: 0x03

Abstract Syntax: CT Image Storage (1.2.840.10008.5.1.4.1.1.2)

Transfer Syntax: Implicit VR Little Endian: Default Transfer Syntax for DICOM (1.2.840.10008.1.2)

Presentation Context: CT Image Storage (1.2.840.10008.5.1.4.1.1.2)

Item Type: Presentation Context (0x20)

Item Length: 56

Context ID: 0x05

Abstract Syntax: CT Image Storage (1.2.840.10008.5.1.4.1.1.2)

Transfer Syntax: Explicit VR Little Endian (1.2.840.10008.1.2.1)

.

.

.

User Info: Max PDU Length 16384, Implementation UID 1.2.276.0.7230010.3.0.3.6.5, Version OFFIS_DCMTK_365

Orthanc to Orthanc Response:

A-ASSOCIATE accept ROUTER ← ORTHANC

Protocol Version: 1

Called AE Title: ORTHANC

Calling AE Title: ROUTER

Application Context: DICOM Application Context Name (1.2.840.10008.3.1.1.1)

Presentation Context: ID 0x01, Accept, JPEG Lossless, Non-Hierarchical (Process 14), CT Image Storage

Item Type: Presentation Context Reply (0x21)

Item Length: 30

Context ID: 0x01

Result: Accept (0x0)

Transfer Syntax: JPEG Lossless, Non-Hierarchical (Process 14) (1.2.840.10008.1.2.4.57)

Presentation Context: ID 0x03, Accept, Implicit VR Little Endian: Default Transfer Syntax for DICOM, CT Image Storage

Item Type: Presentation Context Reply (0x21)

Item Length: 25

Context ID: 0x03

Result: Accept (0x0)

Transfer Syntax: Implicit VR Little Endian: Default Transfer Syntax for DICOM (1.2.840.10008.1.2)

Presentation Context: ID 0x05, Accept, Explicit VR Little Endian, CT Image Storage

Item Type: Presentation Context Reply (0x21)

Item Length: 27

Context ID: 0x05

Result: Accept (0x0)

Transfer Syntax: Explicit VR Little Endian (1.2.840.10008.1.2.1)

.

.

.

User Info: Max PDU Length 16384, Implementation UID 1.2.276.0.7230010.3.0.3.6.6, Version OFFIS_DCMTK_366

Conquest to Orthanc Request:

  • A-ASSOCIATE request CONQUESTSRV2 → ORTHANC

    Protocol Version: 1

    Called AE Title: ORTHANC

    Calling AE Title: CONQUESTSRV2

    Application Context: DICOM Application Context Name (1.2.840.10008.3.1.1.1)

    Presentation Context: CT Image Storage (1.2.840.10008.5.1.4.1.1.2)

    Item Type: Presentation Context (0x20)

    Item Length: 106

    Context ID: 0xeb

    Abstract Syntax: CT Image Storage (1.2.840.10008.5.1.4.1.1.2)

    Transfer Syntax: JPEG Lossless, Non-Hierarchical (Process 14) (1.2.840.10008.1.2.4.57)

    Transfer Syntax: JPEG Lossless, Non-Hierarchical, First-Order Prediction (Process 14 [Selection Value 1]): Default Transfer Syntax for Lossless JPEG Image Compression (1.2.840.10008.1.2.4.70)

    Transfer Syntax: Implicit VR Little Endian: Default Transfer Syntax for DICOM (1.2.840.10008.1.2)

    User Info: Max PDU Length 32768, Implementation UID 1.2.826.0.1.3680043.2.135.1066.101, Version 1.5.0/WIN32

    Orthanc to Conquest Response:

    A-ASSOCIATE accept CONQUESTSRV2 ← ORTHANC

    Protocol Version: 1

    Called AE Title: ORTHANC

    Calling AE Title: CONQUESTSRV2

    Application Context: DICOM Application Context Name (1.2.840.10008.3.1.1.1)

    Presentation Context: ID 0xeb, Accept, Implicit VR Little Endian: Default Transfer Syntax for DICOM, CT Image Storage

    Item Type: Presentation Context Reply (0x21)

    Item Length: 25

    Context ID: 0xeb

    Result: Accept (0x0)

    Transfer Syntax: Implicit VR Little Endian: Default Transfer Syntax for DICOM (1.2.840.10008.1.2)

    User Info: Max PDU Length 16384, Implementation UID 1.2.276.0.7230010.3.0.3.6.6, Version OFFIS_DCMTK_366

Hello,

The negotiation of transfer syntaxes was improved in Orthanc 1.9.1. Accordingly to your first post, you are using an outdated version of Orthanc (1.7.2).

Please first try to upgrade your system.

HTH,
Sébastien-

Hello Sebastien

I have downloaded and tried it with 1.9.1 also. The issue remains same. All of the observations given above are true for both versions.

I have run multiple tests,
Orthanc 2 Orthanc transfer of jpeglossless works.
Orthanc 2 Radiant transfer of jpeglossless works.
Orthanc 2 Conquest transfer of jpeglossless works.
Conquest 2 Orthanc transfer of jpeglossless does not work.

I have tweaked orthanc and conquest configuration multiple times and tested but got same result.

I have run wire capture on all the tests and the only issue which i can see so far is the association negotiation of transfer syntax.
Conquest is sending jpeglossless syntax in request but orthanc is replying with default little endian implicit. Ideally, conquest should then send an uncompressed image but it still sends compressed (as we force configure it to send compressed only) which is then rejected/aborted by Orthanc during transfer.

Perhaps, if it is possible for you, can try to test a compressed transfer between conquest and orthanc.

Regards
Kavi

Perhaps, if it is possible for you, can try to test a compressed transfer between conquest and orthanc.

I could certainly learn how to setup Conquest and interface it with Orthanc, but I am under high pressure because of paid developments, so don’t expect any investigation/fix before several weeks from me.

I understand your situation.

However, at this stage atleast knowing whether its a configuration issue from my side or a bug that requires a fix will certainly help me decide my further course of action.

Regards
Kavi

This is precisely my issue: Helping you would need investigation, for which I don’t have time right now. Please be patient, or try to fix the issue by yourself (as both Orthanc and Conquest are open-source).

Noted Sebastien
Thanks for the response, I will continue to work on this. Will update you if it is resolved.

Regards
Kavi