40#ifndef PACS_SECURITY_XDS_AUDIT_EVENTS_HPP
41#define PACS_SECURITY_XDS_AUDIT_EVENTS_HPP
51class atna_service_auditor;
61struct xds_iti41_event {
62 std::string source_id;
63 std::string destination_endpoint;
65 std::string submission_set_unique_id;
66 std::vector<std::string> document_unique_ids;
68 std::string failure_description;
74struct xds_iti43_event {
75 std::string consumer_id;
76 std::string source_endpoint;
77 std::string document_unique_id;
78 std::string repository_unique_id;
80 std::string failure_description;
90struct xds_iti18_event {
91 enum class kind : std::uint8_t {
96 std::string querier_id;
97 std::string registry_endpoint;
98 kind query_kind{kind::find_documents};
100 std::vector<std::string> document_uuids;
102 std::string failure_description;
119class xds_audit_sink {
121 virtual ~xds_audit_sink() =
default;
123 virtual void on_iti41_submit(
const xds_iti41_event& e) = 0;
124 virtual void on_iti43_retrieve(
const xds_iti43_event& e) = 0;
125 virtual void on_iti18_query(
const xds_iti18_event& e) = 0;
155 atna_service_auditor& auditor, std::string local_participant_id);
170class recording_xds_audit_sink :
public xds_audit_sink {
172 struct captured_event {
173 enum class kind : std::uint8_t { iti41, iti43, iti18 };
175 xds_iti41_event iti41;
176 xds_iti43_event iti43;
177 xds_iti18_event iti18;
180 void on_iti41_submit(
const xds_iti41_event& e)
override;
181 void on_iti43_retrieve(
const xds_iti43_event& e)
override;
182 void on_iti18_query(
const xds_iti18_event& e)
override;
184 [[nodiscard]]
const std::vector<captured_event>& events() const noexcept;
185 void clear() noexcept;
188 std::vector<captured_event> events_;
210[[nodiscard]] atna_audit_message build_iti41_audit_message(
211 const std::
string& audit_source_id, const xds_iti41_event& event,
212 const std::
string& local_participant_id = "");
213[[nodiscard]] atna_audit_message build_iti43_audit_message(
214 const std::
string& audit_source_id, const xds_iti43_event& event,
215 const std::
string& local_participant_id = "");
216[[nodiscard]] atna_audit_message build_iti18_audit_message(
217 const std::
string& audit_source_id, const xds_iti18_event& event,
218 const std::
string& local_participant_id = "");
IHE ATNA-compliant audit message generator (RFC 3881 XML format)
std::shared_ptr< xds_audit_sink > make_null_xds_audit_sink()
std::shared_ptr< xds_audit_sink > make_atna_xds_audit_sink(atna_service_auditor &auditor, std::string local_participant_id)
atna_event_outcome
Outcome of the audited event.