Skip to content

Commit

Permalink
Make Find SCP resilient to missing query-retrievel level (#665)
Browse files Browse the repository at this point in the history
- if query-retrieve level is missing or could not be matched,
  send error response
- use getString to retrieve DICOM text value
- clean up code a bit, removing commented out code and unwanted prints
  • Loading branch information
Enet4 committed Sep 5, 2023
1 parent 74e3b9f commit 6e06233
Showing 1 changed file with 8 additions and 42 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
import java.util.ArrayList;
import org.slf4j.LoggerFactory;

import org.dcm4che2.data.DicomElement;
import org.dcm4che2.data.DicomObject;
import org.dcm4che2.data.Tag;
import org.dcm4che2.data.VR;
Expand Down Expand Up @@ -68,17 +67,6 @@ public FindRSP(DicomObject keys, DicomObject rsp, String callingAET) {

this.callingAET = callingAET;


/** Debug - show keys, rsp, index */
if (keys != null) {
// DebugManager.getSettings().debug("keys object: ");
// DebugManager.getSettings().debug(keys.toString());
}
if (rsp != null) {
// DebugManager.getSettings().debug("Rsp object");
// DebugManager.getSettings().debug(rsp.toString());
}

/**
* Get object to search
*/
Expand Down Expand Up @@ -130,28 +118,8 @@ public FindRSP(DicomObject keys, DicomObject rsp, String callingAET) {
// System.out.println("OLD Query: "+query);
query = applyQueryFilter(query);

System.out.println("NEW Query: " + query);

/**
* Search results
* TODO:
* - Get Search String Query?
* - Is A Network Search?
* - How works extrafields?
*/

SearchDicomResult.QUERYLEVEL level = null;
/*
if (CFindBuilder.isPatientRoot(rsp))
{
level = SearchDicomResult.QUERYLEVEL.PATIENT;
}
else if (CFindBuilder.isStudyRoot(rsp))
{
level = SearchDicomResult.QUERYLEVEL.STUDY;
}*/
DicomElement elem = keys.get(Integer.parseInt("00080052", 16));
String levelStr = new String(elem.getBytes());
final SearchDicomResult.QUERYLEVEL level;
String levelStr = keys.getString(Tag.QueryRetrieveLevel, VR.CS, "");

if (levelStr.contains("PATIENT")) {
level = SearchDicomResult.QUERYLEVEL.PATIENT;
Expand All @@ -161,17 +129,15 @@ else if (CFindBuilder.isStudyRoot(rsp))
level = SearchDicomResult.QUERYLEVEL.SERIE;
} else if (levelStr.contains("IMAGE")) {
level = SearchDicomResult.QUERYLEVEL.IMAGE;
} else {
// illegal query-retrieve level, reject request
this.rsp.putInt(Tag.Status, VR.US, 0xA900);
this.rsp.putInt(Tag.OffendingElement, VR.AT, Tag.QueryRetrieveLevel);
this.rsp.putString(Tag.ErrorComment, VR.LO, "Query/Retrieve Level invalid or missing");
return;
}
System.out.println("Charset: " + this.keys.get(Tag.SpecificCharacterSet));
search = new SearchDicomResult(query, true, extrafields, level);



if (search == null) {
// DebugManager.getSettings().debug(">> Search is null, so" +
// " somethig is wrong ");
}

// always return Specific Character Set
if (!keys.contains(Tag.SpecificCharacterSet)) {
this.keys.putNull(Tag.SpecificCharacterSet, VR.CS);
Expand Down

0 comments on commit 6e06233

Please sign in to comment.