242 [[nodiscard]]
bool start();
258 [[nodiscard]]
bool is_running() const noexcept;
316 const
core::dicom_dataset& dataset,
317 const std::
string& calling_ae,
318 const std::
string& sop_class_uid,
319 const std::
string& sop_instance_uid);
322 const
core::dicom_dataset& dataset,
323 const std::filesystem::path& file_path);
330 services::query_level level,
331 const
core::dicom_dataset& query_keys,
332 const std::
string& calling_ae);
339 const
core::dicom_dataset& query_keys);
342 const std::
string& ae_title);
349 const
core::dicom_dataset& query_keys,
350 const std::
string& calling_ae);
359 const services::mpps_instance& instance);
362 const std::
string& sop_instance_uid,
363 const
core::dicom_dataset& modifications,
364 services::mpps_status new_status);
386 std::unique_ptr<network::dicom_server>
server_;
Represents a DICOM Dataset (ordered collection of Data Elements)
std::unique_ptr< network::dicom_server > server_
std::shared_ptr< services::retrieve_scp > retrieve_scp_
std::shared_ptr< services::mpps_scp > mpps_scp_
std::atomic< bool > running_
std::shared_ptr< storage::file_storage > file_storage_
mini_pacs & operator=(const mini_pacs &)=delete
void stop()
Stop the PACS server.
std::vector< core::dicom_dataset > handle_worklist_query(const core::dicom_dataset &query_keys, const std::string &calling_ae)
std::shared_ptr< services::query_scp > query_scp_
std::shared_ptr< services::worklist_scp > worklist_scp_
mini_pacs(mini_pacs &&)=delete
std::vector< core::dicom_dataset > handle_query(services::query_level level, const core::dicom_dataset &query_keys, const std::string &calling_ae)
const mini_pacs_statistics & statistics() const noexcept
Get current statistics.
mini_pacs & operator=(mini_pacs &&)=delete
std::shared_ptr< services::storage_scp > storage_scp_
std::mutex worklist_mutex_
std::vector< worklist_entry > worklist_items_
core::dicom_dataset create_worklist_response(const worklist_entry &item)
void setup_event_handlers()
mini_pacs(const mini_pacs &)=delete
~mini_pacs()
Destructor - ensures clean shutdown.
bool is_running() const noexcept
Check if server is running.
std::vector< mpps_entry > mpps_instances_
std::vector< worklist_entry > get_worklist_items() const
Get current worklist items.
bool start()
Start the PACS server.
services::storage_status handle_store(const core::dicom_dataset &dataset, const std::string &calling_ae, const std::string &sop_class_uid, const std::string &sop_instance_uid)
std::optional< std::pair< std::string, uint16_t > > resolve_destination(const std::string &ae_title)
network::Result< std::monostate > handle_mpps_set(const std::string &sop_instance_uid, const core::dicom_dataset &modifications, services::mpps_status new_status)
std::vector< core::dicom_file > handle_retrieve(const core::dicom_dataset &query_keys)
void initialize_services()
void wait()
Block until server shutdown.
const mini_pacs_config & config() const noexcept
Get the configuration.
std::shared_ptr< services::verification_scp > verification_scp_
std::shared_ptr< storage::index_database > index_db_
network::Result< std::monostate > handle_mpps_create(const services::mpps_instance &instance)
bool update_index(const core::dicom_dataset &dataset, const std::filesystem::path &file_path)
mini_pacs_statistics stats_
void clear_worklist()
Clear all worklist items.
void initialize_storage()
void add_worklist_item(const worklist_entry &item)
Add a worklist item for MWL queries.
mini_pacs(const mini_pacs_config &config)
Construct Mini PACS with configuration.
DICOM Dataset - ordered collection of Data Elements.
DICOM Part 10 file handling for reading/writing DICOM files.
Multi-threaded DICOM server for handling multiple associations.
Filesystem-based DICOM storage with hierarchical organization.
PACS index database for metadata storage and retrieval.
DICOM MPPS (Modality Performed Procedure Step) SCP service.
DICOM Query SCP service (C-FIND handler)
DICOM Retrieve SCP service (C-MOVE/C-GET handler)
DICOM Server configuration structures.
DICOM Storage SCP service (C-STORE handler)
Configuration options for Mini PACS.
uint16_t port
TCP port to listen on.
std::string ae_title
Application Entity title (max 16 characters)
bool verbose_logging
Enable verbose logging.
bool enable_mpps
Enable MPPS service.
std::filesystem::path storage_path
Root path for DICOM file storage.
size_t max_associations
Maximum concurrent associations.
bool enable_worklist
Enable Modality Worklist service.
Runtime statistics for Mini PACS operations.
std::atomic< int > c_move_count
C-MOVE operations processed.
std::atomic< int > associations_total
Total associations established since start.
std::atomic< int > associations_active
Currently active associations.
std::atomic< int > c_store_count
C-STORE operations processed.
std::atomic< int > c_get_count
C-GET operations processed.
std::atomic< int > mwl_count
MWL queries processed.
std::atomic< int > c_find_count
C-FIND operations processed.
std::atomic< int > c_echo_count
C-ECHO operations processed.
std::atomic< size_t > bytes_received
Total bytes received.
std::atomic< int > mpps_create_count
MPPS N-CREATE processed.
std::atomic< int > mpps_set_count
MPPS N-SET processed.
MPPS instance for tracking procedure progress.
std::string sop_instance_uid
Worklist item for MWL queries.
std::string referring_physician
std::string patient_birth_date
std::string scheduled_station_ae
std::string accession_number
std::string scheduled_time
std::string procedure_description
std::string scheduled_date
DICOM Verification SCP service (C-ECHO handler)
DICOM Modality Worklist SCP service (MWL C-FIND handler)