PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
wado_uri_endpoints.h
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2021-2025, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
21#pragma once
22
23#include <optional>
24#include <string>
25#include <string_view>
26
27namespace kcenon::pacs::web {
28
29struct rest_server_context;
30
31namespace wado_uri {
32
41 std::string study_uid;
42
44 std::string series_uid;
45
47 std::string object_uid;
48
50 std::string content_type{"application/dicom"};
51
53 std::optional<std::string> transfer_syntax;
54
56 bool anonymize{false};
57
59 std::optional<uint16_t> rows;
60
62 std::optional<uint16_t> columns;
63
65 std::optional<double> window_center;
66
68 std::optional<double> window_width;
69
71 std::optional<uint32_t> frame_number;
72};
73
78 bool valid{true};
79 int http_status{200};
80 std::string error_code;
81 std::string error_message;
82
83 [[nodiscard]] static validation_result ok() { return {true, 200, "", ""}; }
84 [[nodiscard]] static validation_result error(int status,
85 std::string code,
86 std::string message) {
87 return {false, status, std::move(code), std::move(message)};
88 }
89};
90
107[[nodiscard]] wado_uri_request parse_wado_uri_params(
108 const char* study_uid,
109 const char* series_uid,
110 const char* object_uid,
111 const char* content_type,
112 const char* transfer_syntax,
113 const char* anonymize,
114 const char* rows,
115 const char* columns,
116 const char* window_center,
117 const char* window_width,
118 const char* frame_number);
119
125[[nodiscard]] validation_result validate_wado_uri_request(
126 const wado_uri_request& request);
127
133[[nodiscard]] bool is_supported_content_type(std::string_view content_type);
134
135} // namespace wado_uri
136
137namespace endpoints {
138
139// Internal function - implementation in cpp file
140// Registers WADO-URI endpoints with the Crow app
141// Called from rest_server.cpp
142
143} // namespace endpoints
144
145} // namespace kcenon::pacs::web
validation_result validate_wado_uri_request(const wado_uri_request &request)
Validate a WADO-URI request.
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.
bool is_supported_content_type(std::string_view content_type)
Check if a content type is supported by WADO-URI.
http_status
Common HTTP status codes.
Definition rest_types.h:30
std::string_view code
Result of WADO-URI request validation.
static validation_result error(int status, std::string code, std::string message)
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)