PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
kcenon::pacs::web::wado_uri Namespace Reference

Classes

struct  validation_result
 Result of WADO-URI request validation. More...
 
struct  wado_uri_request
 Parsed WADO-URI request parameters. More...
 

Functions

wado_uri_request parse_wado_uri_params (const char *study_uid, const char *series_uid, const char *object_uid, const char *content_type, const char *transfer_syntax, const char *anonymize, const char *rows, const char *columns, const char *window_center, const char *window_width, const char *frame_number)
 Parse WADO-URI query parameters from an HTTP request.
 
validation_result validate_wado_uri_request (const wado_uri_request &request)
 Validate a WADO-URI request.
 
bool is_supported_content_type (std::string_view content_type)
 Check if a content type is supported by WADO-URI.
 

Function Documentation

◆ is_supported_content_type()

bool kcenon::pacs::web::wado_uri::is_supported_content_type ( std::string_view content_type)
nodiscard

Check if a content type is supported by WADO-URI.

Parameters
content_typeThe content type to check
Returns
true if the content type is supported

Definition at line 149 of file wado_uri_endpoints.cpp.

149 {
150 return content_type == "application/dicom"
151 || content_type == "image/jpeg"
152 || content_type == "image/png"
153 || content_type == "application/dicom+json";
154}

Referenced by validate_wado_uri_request().

Here is the caller graph for this function:

◆ parse_wado_uri_params()

wado_uri_request kcenon::pacs::web::wado_uri::parse_wado_uri_params ( const char * study_uid,
const char * series_uid,
const char * object_uid,
const char * content_type,
const char * transfer_syntax,
const char * anonymize,
const char * rows,
const char * columns,
const char * window_center,
const char * window_width,
const char * frame_number )
nodiscard

Parse WADO-URI query parameters from an HTTP request.

Parameters
request_typeThe requestType parameter value
study_uidThe studyUID parameter value
series_uidThe seriesUID parameter value
object_uidThe objectUID parameter value
content_typeThe contentType parameter value (optional)
transfer_syntaxThe transferSyntax parameter value (optional)
anonymizeThe anonymize parameter value (optional)
rowsThe rows parameter value (optional)
columnsThe columns parameter value (optional)
window_centerThe windowCenter parameter value (optional)
window_widthThe windowWidth parameter value (optional)
frame_numberThe frameNumber parameter value (optional)
Returns
Parsed WADO-URI request parameters

Definition at line 45 of file wado_uri_endpoints.cpp.

56 {
57
58 wado_uri_request request;
59
60 if (study_uid != nullptr) {
61 request.study_uid = study_uid;
62 }
63 if (series_uid != nullptr) {
64 request.series_uid = series_uid;
65 }
66 if (object_uid != nullptr) {
67 request.object_uid = object_uid;
68 }
69 if (content_type != nullptr && content_type[0] != '\0') {
70 request.content_type = content_type;
71 }
72 if (transfer_syntax != nullptr && transfer_syntax[0] != '\0') {
73 request.transfer_syntax = std::string(transfer_syntax);
74 }
75 if (anonymize != nullptr) {
76 std::string anon_str(anonymize);
77 request.anonymize = (anon_str == "yes" || anon_str == "true"
78 || anon_str == "1");
79 }
80 if (rows != nullptr) {
81 try {
82 int val = std::stoi(rows);
83 if (val > 0 && val <= 65535) {
84 request.rows = static_cast<uint16_t>(val);
85 }
86 } catch (...) {
87 // Ignore invalid values
88 }
89 }
90 if (columns != nullptr) {
91 try {
92 int val = std::stoi(columns);
93 if (val > 0 && val <= 65535) {
94 request.columns = static_cast<uint16_t>(val);
95 }
96 } catch (...) {
97 // Ignore invalid values
98 }
99 }
100 if (window_center != nullptr) {
101 try {
102 request.window_center = std::stod(window_center);
103 } catch (...) {
104 // Ignore invalid values
105 }
106 }
107 if (window_width != nullptr) {
108 try {
109 request.window_width = std::stod(window_width);
110 } catch (...) {
111 // Ignore invalid values
112 }
113 }
114 if (frame_number != nullptr) {
115 try {
116 int val = std::stoi(frame_number);
117 if (val > 0) {
118 request.frame_number = static_cast<uint32_t>(val);
119 }
120 } catch (...) {
121 // Ignore invalid values
122 }
123 }
124
125 return request;
126}
Parsed WADO-URI request parameters.
std::optional< double > window_center
Window center for rendered images (optional)
std::optional< uint16_t > rows
Output viewport rows (optional, for rendered images)
std::optional< uint16_t > columns
Output viewport columns (optional, for rendered images)
std::string series_uid
Series Instance UID (required)
std::string content_type
Requested content type (default: application/dicom)
bool anonymize
Whether to anonymize the response (optional)
std::string object_uid
SOP Instance UID (required)
std::optional< uint32_t > frame_number
Frame number for multi-frame images (1-based, optional)
std::optional< double > window_width
Window width for rendered images (optional)
std::optional< std::string > transfer_syntax
Transfer Syntax UID for transcoding (optional)
std::string study_uid
Study Instance UID (required)

References kcenon::pacs::web::wado_uri::wado_uri_request::anonymize, kcenon::pacs::web::wado_uri::wado_uri_request::columns, kcenon::pacs::web::wado_uri::wado_uri_request::content_type, kcenon::pacs::web::wado_uri::wado_uri_request::frame_number, kcenon::pacs::web::wado_uri::wado_uri_request::object_uid, kcenon::pacs::web::wado_uri::wado_uri_request::rows, kcenon::pacs::web::wado_uri::wado_uri_request::series_uid, kcenon::pacs::web::wado_uri::wado_uri_request::study_uid, kcenon::pacs::web::wado_uri::wado_uri_request::transfer_syntax, kcenon::pacs::web::wado_uri::wado_uri_request::window_center, and kcenon::pacs::web::wado_uri::wado_uri_request::window_width.

Referenced by kcenon::pacs::web::endpoints::register_wado_uri_endpoints_impl().

Here is the caller graph for this function:

◆ validate_wado_uri_request()

validation_result kcenon::pacs::web::wado_uri::validate_wado_uri_request ( const wado_uri_request & request)
nodiscard

Validate a WADO-URI request.

Parameters
requestThe parsed request parameters
Returns
Validation result

Definition at line 128 of file wado_uri_endpoints.cpp.

128 {
129 if (request.study_uid.empty()) {
130 return validation_result::error(
131 400, "MISSING_PARAMETER", "studyUID parameter is required");
132 }
133 if (request.series_uid.empty()) {
134 return validation_result::error(
135 400, "MISSING_PARAMETER", "seriesUID parameter is required");
136 }
137 if (request.object_uid.empty()) {
138 return validation_result::error(
139 400, "MISSING_PARAMETER", "objectUID parameter is required");
140 }
141 if (!is_supported_content_type(request.content_type)) {
142 return validation_result::error(
143 406, "UNSUPPORTED_MEDIA_TYPE",
144 "Unsupported contentType: " + request.content_type);
145 }
146 return validation_result::ok();
147}

References kcenon::pacs::web::wado_uri::wado_uri_request::content_type, kcenon::pacs::web::wado_uri::validation_result::error(), is_supported_content_type(), kcenon::pacs::web::wado_uri::wado_uri_request::object_uid, kcenon::pacs::web::wado_uri::validation_result::ok(), kcenon::pacs::web::wado_uri::wado_uri_request::series_uid, and kcenon::pacs::web::wado_uri::wado_uri_request::study_uid.

Referenced by kcenon::pacs::web::endpoints::register_wado_uri_endpoints_impl().

Here is the call graph for this function:
Here is the caller graph for this function: