PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
pdu_types.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
11#ifndef PACS_NETWORK_PDU_TYPES_HPP
12#define PACS_NETWORK_PDU_TYPES_HPP
13
14#include <cstdint>
15#include <string>
16#include <vector>
17
18namespace kcenon::pacs::network {
19
25enum class pdu_type : uint8_t {
26 associate_rq = 0x01,
27 associate_ac = 0x02,
28 associate_rj = 0x03,
29 p_data_tf = 0x04,
30 release_rq = 0x05,
31 release_rp = 0x06,
32 abort = 0x07,
33};
34
38enum class item_type : uint8_t {
39 application_context = 0x10,
42 user_information = 0x50,
43 abstract_syntax = 0x30,
44 transfer_syntax = 0x40,
45 maximum_length = 0x51,
52 user_identity_rq = 0x58,
53 user_identity_ac = 0x59,
54};
55
66
70enum class abort_source : uint8_t {
71 service_user = 0,
72 reserved = 1,
74};
75
79enum class abort_reason : uint8_t {
80 not_specified = 0,
82 unexpected_pdu = 2,
83 reserved = 3,
87};
88
92enum class reject_result : uint8_t {
95};
96
100enum class reject_source : uint8_t {
101 service_user = 1,
104};
105
115
119enum class reject_reason_provider_acse : uint8_t {
120 no_reason = 1,
122};
123
131
136 uint8_t context_id;
138 bool is_last;
139 std::vector<uint8_t> data;
140
142 presentation_data_value(uint8_t id, bool command, bool last, std::vector<uint8_t> d)
143 : context_id(id), is_command(command), is_last(last), data(std::move(d)) {}
144};
145
150 uint8_t id;
151 std::string abstract_syntax;
152 std::vector<std::string> transfer_syntaxes;
153
155 presentation_context_rq(uint8_t context_id, std::string abs_syntax,
156 std::vector<std::string> ts_list)
157 : id(context_id)
158 , abstract_syntax(std::move(abs_syntax))
159 , transfer_syntaxes(std::move(ts_list)) {}
160};
161
166 uint8_t id;
168 std::string transfer_syntax;
169
173 std::string ts = "")
174 : id(context_id), result(res), transfer_syntax(std::move(ts)) {}
175};
176
181 std::string sop_class_uid;
182 bool scu_role;
183 bool scp_role;
184
186 scp_scu_role_selection(std::string uid, bool scu, bool scp)
187 : sop_class_uid(std::move(uid)), scu_role(scu), scp_role(scp) {}
188};
189
194 uint32_t max_pdu_length;
197 std::vector<scp_scu_role_selection> role_selections;
198
200};
201
206 std::string called_ae_title;
207 std::string calling_ae_title;
209 std::vector<presentation_context_rq> presentation_contexts;
211
212 associate_rq() = default;
213};
214
219 std::string called_ae_title;
220 std::string calling_ae_title;
222 std::vector<presentation_context_ac> presentation_contexts;
224
225 associate_ac() = default;
226};
227
233 uint8_t source;
234 uint8_t reason;
235
238 associate_rj(reject_result res, uint8_t src, uint8_t rsn)
239 : result(res), source(src), reason(rsn) {}
240};
241
244
248[[nodiscard]] constexpr const char* to_string(pdu_type type) noexcept {
249 switch (type) {
250 case pdu_type::associate_rq: return "A-ASSOCIATE-RQ";
251 case pdu_type::associate_ac: return "A-ASSOCIATE-AC";
252 case pdu_type::associate_rj: return "A-ASSOCIATE-RJ";
253 case pdu_type::p_data_tf: return "P-DATA-TF";
254 case pdu_type::release_rq: return "A-RELEASE-RQ";
255 case pdu_type::release_rp: return "A-RELEASE-RP";
256 case pdu_type::abort: return "A-ABORT";
257 default: return "UNKNOWN";
258 }
259}
260
262
265
267constexpr const char* DICOM_APPLICATION_CONTEXT = "1.2.840.10008.3.1.1.1";
268
270constexpr uint16_t DICOM_PROTOCOL_VERSION = 0x0001;
271
273constexpr size_t AE_TITLE_LENGTH = 16;
274
276constexpr uint32_t DEFAULT_MAX_PDU_LENGTH = 16384;
277
279constexpr uint32_t UNLIMITED_MAX_PDU_LENGTH = 0;
280
282
283} // namespace kcenon::pacs::network
284
285#endif // PACS_NETWORK_PDU_TYPES_HPP
reject_result
Reject result values.
Definition pdu_types.h:92
@ rejected_permanent
Rejected-permanent.
@ rejected_transient
Rejected-transient.
pdu_type
PDU (Protocol Data Unit) types as defined in DICOM PS3.8.
Definition pdu_types.h:25
@ associate_rj
A-ASSOCIATE-RJ (Association Reject)
@ associate_ac
A-ASSOCIATE-AC (Association Accept)
@ p_data_tf
P-DATA-TF (Data Transfer)
@ release_rq
A-RELEASE-RQ (Release Request)
@ release_rp
A-RELEASE-RP (Release Response)
@ associate_rq
A-ASSOCIATE-RQ (Association Request)
item_type
Item types used in variable items of PDUs.
Definition pdu_types.h:38
@ maximum_length
Maximum Length Sub-item.
@ sop_class_extended_negotiation
SOP Class Extended Negotiation.
@ implementation_class_uid
Implementation Class UID Sub-item.
@ abstract_syntax
Abstract Syntax Sub-item.
@ user_identity_rq
User Identity RQ Sub-item.
@ async_operations_window
Asynchronous Operations Window Sub-item.
@ user_identity_ac
User Identity AC Sub-item.
@ implementation_version_name
Implementation Version Name Sub-item.
@ application_context
Application Context Item.
@ sop_class_common_extended_negotiation
SOP Class Common Extended Negotiation.
constexpr uint16_t DICOM_PROTOCOL_VERSION
DICOM Protocol Version.
Definition pdu_types.h:270
constexpr const char * DICOM_APPLICATION_CONTEXT
Default DICOM Application Context Name (PS3.7)
Definition pdu_types.h:267
reject_reason_provider_acse
Reject reason values when source is service-provider (ACSE).
Definition pdu_types.h:119
@ protocol_version_not_supported
Protocol-version not supported.
abort_reason
Abort reason values when source is service-provider.
Definition pdu_types.h:79
@ unrecognized_pdu_parameter
Unrecognized PDU parameter.
@ not_specified
Reason not specified.
@ invalid_pdu_parameter
Invalid PDU parameter value.
@ unexpected_pdu_parameter
Unexpected PDU parameter.
constexpr uint32_t DEFAULT_MAX_PDU_LENGTH
Maximum PDU length recommended by DICOM (16384 bytes)
Definition pdu_types.h:276
constexpr const char * to_string(association_state state) noexcept
Convert association_state to string representation.
Definition association.h:86
constexpr size_t AE_TITLE_LENGTH
AE Title length (fixed 16 characters, space-padded)
Definition pdu_types.h:273
constexpr uint32_t UNLIMITED_MAX_PDU_LENGTH
Maximum PDU length that can be negotiated (0 = unlimited)
Definition pdu_types.h:279
reject_source
Reject source values.
Definition pdu_types.h:100
@ service_provider_acse
DICOM UL service-provider (ACSE)
@ service_provider_presentation
DICOM UL service-provider (Presentation)
abort_source
Abort source values.
Definition pdu_types.h:70
@ service_user
DICOM UL service-user.
@ service_provider
DICOM UL service-provider (ACSE)
reject_reason_provider_presentation
Reject reason values when source is service-provider (Presentation).
Definition pdu_types.h:127
presentation_context_result
Result values for A-ASSOCIATE-AC presentation context.
Definition pdu_types.h:59
@ abstract_syntax_not_supported
Abstract-syntax-not-supported.
@ no_reason
No reason (provider rejection)
@ transfer_syntaxes_not_supported
Transfer-syntaxes-not-supported.
reject_reason_user
Reject reason values when source is service-user.
Definition pdu_types.h:109
@ called_ae_not_recognized
Called-AE-title not recognized.
@ application_context_not_supported
Application-context-name not supported.
@ calling_ae_not_recognized
Calling-AE-title not recognized.
Transfer Syntax UIDs.
Definition main.cpp:78
A-ASSOCIATE-AC PDU data.
Definition pdu_types.h:218
std::string calling_ae_title
Calling AE Title (16 chars max)
Definition pdu_types.h:220
user_information user_info
User Information.
Definition pdu_types.h:223
std::string called_ae_title
Called AE Title (16 chars max)
Definition pdu_types.h:219
std::string application_context
Application Context Name UID.
Definition pdu_types.h:221
std::vector< presentation_context_ac > presentation_contexts
Presentation Contexts.
Definition pdu_types.h:222
A-ASSOCIATE-RJ PDU data.
Definition pdu_types.h:231
associate_rj(reject_result res, uint8_t src, uint8_t rsn)
Definition pdu_types.h:238
uint8_t reason
Reason/Diagnostic.
Definition pdu_types.h:234
reject_result result
Result (1=permanent, 2=transient)
Definition pdu_types.h:232
A-ASSOCIATE-RQ PDU data.
Definition pdu_types.h:205
std::string called_ae_title
Called AE Title (16 chars max)
Definition pdu_types.h:206
std::string application_context
Application Context Name UID.
Definition pdu_types.h:208
user_information user_info
User Information.
Definition pdu_types.h:210
std::string calling_ae_title
Calling AE Title (16 chars max)
Definition pdu_types.h:207
std::vector< presentation_context_rq > presentation_contexts
Presentation Contexts.
Definition pdu_types.h:209
Presentation Context for A-ASSOCIATE-AC.
Definition pdu_types.h:165
presentation_context_ac(uint8_t context_id, presentation_context_result res, std::string ts="")
Definition pdu_types.h:172
presentation_context_result result
Result/Reason.
Definition pdu_types.h:167
uint8_t id
Presentation Context ID.
Definition pdu_types.h:166
std::string transfer_syntax
Accepted Transfer Syntax UID.
Definition pdu_types.h:168
Presentation Context for A-ASSOCIATE-RQ.
Definition pdu_types.h:149
uint8_t id
Presentation Context ID (odd number 1-255)
Definition pdu_types.h:150
std::string abstract_syntax
Abstract Syntax UID (SOP Class)
Definition pdu_types.h:151
std::vector< std::string > transfer_syntaxes
Proposed Transfer Syntaxes.
Definition pdu_types.h:152
presentation_context_rq(uint8_t context_id, std::string abs_syntax, std::vector< std::string > ts_list)
Definition pdu_types.h:155
Presentation Data Value (PDV) item for P-DATA-TF.
Definition pdu_types.h:135
presentation_data_value(uint8_t id, bool command, bool last, std::vector< uint8_t > d)
Definition pdu_types.h:142
bool is_command
true if Command message, false if Data
Definition pdu_types.h:137
uint8_t context_id
Presentation Context ID (odd number 1-255)
Definition pdu_types.h:136
std::vector< uint8_t > data
Fragment data.
Definition pdu_types.h:139
SCP/SCU Role Selection Sub-item.
Definition pdu_types.h:180
bool scp_role
SCP-role (true if supported)
Definition pdu_types.h:183
bool scu_role
SCU-role (true if supported)
Definition pdu_types.h:182
scp_scu_role_selection(std::string uid, bool scu, bool scp)
Definition pdu_types.h:186
std::string sop_class_uid
SOP Class UID.
Definition pdu_types.h:181
User Information for A-ASSOCIATE-RQ/AC.
Definition pdu_types.h:193
std::string implementation_class_uid
Implementation Class UID.
Definition pdu_types.h:195
std::string implementation_version_name
Implementation Version Name (optional)
Definition pdu_types.h:196
std::vector< scp_scu_role_selection > role_selections
Role selections (optional)
Definition pdu_types.h:197
uint32_t max_pdu_length
Maximum Length of P-DATA-TF PDUs.
Definition pdu_types.h:194
std::string_view uid