PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
pdu_encoder.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_ENCODER_HPP
12#define PACS_NETWORK_PDU_ENCODER_HPP
13
14#include "pdu_types.h"
15
16#include <cstdint>
17#include <vector>
18
19namespace kcenon::pacs::network {
20
42public:
45
53 [[nodiscard]] static std::vector<uint8_t> encode_associate_rq(
54 const associate_rq& rq);
55
63 [[nodiscard]] static std::vector<uint8_t> encode_associate_ac(
64 const associate_ac& ac);
65
73 [[nodiscard]] static std::vector<uint8_t> encode_associate_rj(
74 const associate_rj& rj);
75
77
80
87 [[nodiscard]] static std::vector<uint8_t> encode_release_rq();
88
95 [[nodiscard]] static std::vector<uint8_t> encode_release_rp();
96
98
101
110 [[nodiscard]] static std::vector<uint8_t> encode_abort(
111 uint8_t source, uint8_t reason);
112
119 [[nodiscard]] static std::vector<uint8_t> encode_abort(
120 abort_source source, abort_reason reason);
121
123
126
140 [[nodiscard]] static std::vector<uint8_t> encode_p_data_tf(
141 const std::vector<presentation_data_value>& pdvs);
142
148 [[nodiscard]] static std::vector<uint8_t> encode_p_data_tf(
149 const presentation_data_value& pdv);
150
152
153private:
156
160 static void write_uint16_be(std::vector<uint8_t>& buffer, uint16_t value);
161
165 static void write_uint32_be(std::vector<uint8_t>& buffer, uint32_t value);
166
170 static void write_ae_title(std::vector<uint8_t>& buffer,
171 const std::string& ae_title);
172
176 static void write_uid(std::vector<uint8_t>& buffer,
177 const std::string& uid);
178
182 static void update_pdu_length(std::vector<uint8_t>& buffer);
183
187 static void encode_application_context(std::vector<uint8_t>& buffer,
188 const std::string& context_name);
189
193 static void encode_presentation_context_rq(std::vector<uint8_t>& buffer,
194 const presentation_context_rq& pc);
195
199 static void encode_presentation_context_ac(std::vector<uint8_t>& buffer,
200 const presentation_context_ac& pc);
201
205 static void encode_user_information(std::vector<uint8_t>& buffer,
206 const user_information& user_info);
207
211 static void encode_associate_header(std::vector<uint8_t>& buffer,
212 pdu_type type,
213 const std::string& called_ae,
214 const std::string& calling_ae);
215
217};
218
219} // namespace kcenon::pacs::network
220
221#endif // PACS_NETWORK_PDU_ENCODER_HPP
Encoder for DICOM PDU (Protocol Data Unit) messages.
Definition pdu_encoder.h:41
static void write_uint32_be(std::vector< uint8_t > &buffer, uint32_t value)
Writes a 32-bit unsigned integer in big-endian format.
static std::vector< uint8_t > encode_associate_rq(const associate_rq &rq)
Encodes an A-ASSOCIATE-RQ PDU.
static std::vector< uint8_t > encode_release_rp()
Encodes an A-RELEASE-RP PDU.
static void encode_associate_header(std::vector< uint8_t > &buffer, pdu_type type, const std::string &called_ae, const std::string &calling_ae)
Encodes the common header portion for ASSOCIATE-RQ/AC PDUs.
static std::vector< uint8_t > encode_p_data_tf(const std::vector< presentation_data_value > &pdvs)
Encodes a P-DATA-TF PDU.
static void encode_user_information(std::vector< uint8_t > &buffer, const user_information &user_info)
Encodes a User Information item.
static std::vector< uint8_t > encode_associate_ac(const associate_ac &ac)
Encodes an A-ASSOCIATE-AC PDU.
static void encode_presentation_context_rq(std::vector< uint8_t > &buffer, const presentation_context_rq &pc)
Encodes a Presentation Context item for A-ASSOCIATE-RQ.
static void update_pdu_length(std::vector< uint8_t > &buffer)
Updates the PDU length field at position 2-5.
static void encode_presentation_context_ac(std::vector< uint8_t > &buffer, const presentation_context_ac &pc)
Encodes a Presentation Context item for A-ASSOCIATE-AC.
static void write_ae_title(std::vector< uint8_t > &buffer, const std::string &ae_title)
Writes an AE Title (16 bytes, space-padded).
static std::vector< uint8_t > encode_associate_rj(const associate_rj &rj)
Encodes an A-ASSOCIATE-RJ PDU.
static std::vector< uint8_t > encode_release_rq()
Encodes an A-RELEASE-RQ PDU.
static std::vector< uint8_t > encode_abort(uint8_t source, uint8_t reason)
Encodes an A-ABORT PDU.
static void write_uint16_be(std::vector< uint8_t > &buffer, uint16_t value)
Writes a 16-bit unsigned integer in big-endian format.
static void write_uid(std::vector< uint8_t > &buffer, const std::string &uid)
Writes a UID string.
static void encode_application_context(std::vector< uint8_t > &buffer, const std::string &context_name)
Encodes an Application Context item.
pdu_type
PDU (Protocol Data Unit) types as defined in DICOM PS3.8.
Definition pdu_types.h:25
abort_reason
Abort reason values when source is service-provider.
Definition pdu_types.h:79
abort_source
Abort source values.
Definition pdu_types.h:70
A-ASSOCIATE-AC PDU data.
Definition pdu_types.h:218
A-ASSOCIATE-RJ PDU data.
Definition pdu_types.h:231
A-ASSOCIATE-RQ PDU data.
Definition pdu_types.h:205
Presentation Context for A-ASSOCIATE-AC.
Definition pdu_types.h:165
Presentation Context for A-ASSOCIATE-RQ.
Definition pdu_types.h:149
Presentation Data Value (PDV) item for P-DATA-TF.
Definition pdu_types.h:135
User Information for A-ASSOCIATE-RQ/AC.
Definition pdu_types.h:193
std::string_view uid