DYT/Tool/3rdParty_x64/include/dcmtk/dcmqrdb/dcmqrcnf.h

445 lines
11 KiB
C
Raw Normal View History

2024-11-22 15:19:31 +00:00
/*
*
* Copyright (C) 1993-2011, OFFIS e.V.
* All rights reserved. See COPYRIGHT file for details.
*
* This software and supporting documentation were developed by
*
* OFFIS e.V.
* R&D Division Health
* Escherweg 2
* D-26121 Oldenburg, Germany
*
*
* Module: dcmqrdb
*
* Author: Marco Eichelberg / Ralph Meyer
*
* Purpose: class DcmQueryRetrieveConfig
*
*/
#ifndef DCMQRCNF_H
#define DCMQRCNF_H
#include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */
#define INCLUDE_CSTDIO
#include "dcmtk/ofstd/ofstdinc.h"
#include "dcmtk/ofstd/ofcmdln.h"
#include "dcmtk/oflog/oflog.h"
#include "dcmtk/dcmqrdb/qrdefine.h"
extern DCMTK_DCMQRDB_EXPORT OFLogger DCM_dcmqrdbLogger;
#define DCMQRDB_TRACE(msg) OFLOG_TRACE(DCM_dcmqrdbLogger, msg)
#define DCMQRDB_DEBUG(msg) OFLOG_DEBUG(DCM_dcmqrdbLogger, msg)
#define DCMQRDB_INFO(msg) OFLOG_INFO(DCM_dcmqrdbLogger, msg)
#define DCMQRDB_WARN(msg) OFLOG_WARN(DCM_dcmqrdbLogger, msg)
#define DCMQRDB_ERROR(msg) OFLOG_ERROR(DCM_dcmqrdbLogger, msg)
#define DCMQRDB_FATAL(msg) OFLOG_FATAL(DCM_dcmqrdbLogger, msg)
/** this class describes configuration settings for the quota of a storage area
*/
struct DCMTK_DCMQRDB_EXPORT DcmQueryRetrieveConfigQuota
{
/// maximum number of studies
int maxStudies;
/// maximum number of bytes per study
long maxBytesPerStudy;
};
/** this class describes configuration settings for a remote SCP peer
*/
struct DCMTK_DCMQRDB_EXPORT DcmQueryRetrieveConfigPeer
{
/// remote peer AE title
const char *ApplicationTitle;
/// remote peer host name
const char *HostName;
/// remote peer port number
int PortNumber;
};
/** this class describes configuration settings for a single storage area
*/
struct DCMTK_DCMQRDB_EXPORT DcmQueryRetrieveConfigAEEntry
{
/// application entity title
const char *ApplicationTitle;
/// name of storage area
const char *StorageArea;
/// access type (read-only, read/write)
const char *Access;
/// quota setting for this storage area
DcmQueryRetrieveConfigQuota *StorageQuota;
/// number of peer entries
int noOfPeers;
/// array of peer entries describing remote SCP peers
DcmQueryRetrieveConfigPeer *Peers;
};
/** this class describes configuration settings for a list of storage areas
*/
struct DCMTK_DCMQRDB_EXPORT DcmQueryRetrieveConfigConfiguration
{
/// number of storage areas (aetitles)
int noOfAEEntries;
/// array of entries for each storage area
DcmQueryRetrieveConfigAEEntry *AEEntries;
};
/** this class describes configuration settings for one symbolic host or vendor
*/
struct DCMTK_DCMQRDB_EXPORT DcmQueryRetrieveConfigHostEntry
{
/// symbolic name of host
const char *SymbolicName;
/// number of peer entries
int noOfPeers;
/// array of peer entries describing remote SCP peers
DcmQueryRetrieveConfigPeer *Peers;
};
/** this class describes configuration settings for a list of symbolic hosts or vendors
*/
struct DCMTK_DCMQRDB_EXPORT DcmQueryRetrieveConfigHostTable
{
/// number of entries
int noOfHostEntries;
/// array of entries
DcmQueryRetrieveConfigHostEntry *HostEntries;
};
/** this class describes configuration settings for a Query/Retrieve SCP Service
*/
class DCMTK_DCMQRDB_EXPORT DcmQueryRetrieveConfig
{
public:
DcmQueryRetrieveConfig()
: UserName_()
, GroupName_()
, networkTCPPort_(0)
, maxPDUSize_(0)
, maxAssociations_(0)
, CNF_Config()
, CNF_HETable()
, CNF_VendorTable()
{
}
~DcmQueryRetrieveConfig();
/*
* read configuration file and initialize the
* intern configuration structure
* Input : configuration file name
* Return : 1 - ok
* 0 - error
*/
int init(const char *ConfigurationFile);
/*
* search for peer with AETitle
* Input : AETitle
* Ouput : Host Name, Port Number
* Return : 1 - found in AETable
* 2 - found in HostTable
* 0 - not found
*/
int peerForAETitle(const char *AETitle, const char **HostName, int *PortNumber) const;
/*
* check if given AETitles exist in same
* Vendor Group
* Input : two AETitles
* Return : 1 - same group
* 0 - else
*/
int checkForSameVendor(const char *AETitle1, const char *AETitle2) const;
/*
* get Storage Area for AETitle
* Input : AETitle
* Return : Storage Area
*/
const char *getStorageArea(const char *AETitle) const;
/*
* get Number of Maximal Studies
* Input : AETitle
* Return : Number of Maximal Studies
*/
int getMaxStudies(const char *AETitle) const;
/*
* get Number of maximal Bytes per Study
* Input : AETitle
* Return : Number of maximal Bytes per Study
*/
long getMaxBytesPerStudy(const char *AETitle) const;
/*
* get Max Associations
* Input :
* Return : Max Associations
*/
int getMaxAssociations() const;
/*
* get Network TCP Port
* Input :
* Return : Network TCP Port
*/
int getNetworkTCPPort() const;
/*
* get Max PDU Size
* Input :
* Return : Max PDU Size
*/
OFCmdUnsignedInt getMaxPDUSize() const;
/*
* check if there is an peer with calling AETitle
* on HostName
* Input : called AETitle, calling AETitle, Host Name
* Return : 1 -- yes
* 0 -- no
*/
int peerInAETitle(const char *calledAETitle, const char *callingAETitle, const char *HostName) const;
/*
* get Access mode
* Input : AETitle
* Return : Access mode
*/
const char *getAccess(const char *AETitle) const;
/*
* check if given storage area is read/write
* Input : AETitle
* Return : true if storage area is writable
*/
OFBool writableStorageArea(const char *aeTitle) const;
// methods only used by TI
/*
* searches in the host table for all AE titles
* known for peer hostName. Creates an array of string pointers
* containing the known AE titles. The AE titles contained
* in the array are privately owned by the config facility (you
* may not free them). You may free the array when no longer needed.
*
* Input Parameter: peer host name
* Output Parameter: malloc'ed array of private string pointers.
* Returns : number of entries in the malloced array.
* 0 if no entries found.
*/
int aeTitlesForPeer(const char *hostName, const char *** aeTitleList) const;
/*
* Creates an array of string pointers
* containing the known AE titles for CTN storage areas.
* The AE titles contained in the array are privately owned
* by the config facility (you may not free them). You may
* free the array when no longer needed.
*
* Output Parameter: malloc'ed array of private string pointers.
* Returns : number of entries in the malloced array.
* 0 if no entries exist.
*/
int ctnTitles(const char *** ctnTitleList) const;
/*
* Creates an array of string pointers
* containing the kown Host Names for given Vendor Name.
* The Host Names contained in the array are privately owned
* by the config facility (you may not free them). You may
* free the array when no longer needed.
* Input : Vendor Name
* Ouput : array of string pointers
* Return : number of entries in array
* 0 if no entries exist
*/
int HostNamesForVendor(const char *Vendor, const char ***HostNameArray) const;
/*
* searches in the host table for all AE titles
* known for a symbolic name. Creates an array of string pointers
* containing the known AE titles. The AE titles contained
* in the array are privately owned by the config facility (you
* may not free them). You may free the array when no longer needed.
*
* Input Parameter: symbolic name
* Output Parameter: malloc'ed array of private string pointers.
* Returns : number of entries in the malloced array.
* 0 if no entries found.
*/
int aeTitlesForSymbolicName(const char *symbolicName, const char ***aeTitleList) const;
/*
* printf contents of configuration stucture
* to stdout
*/
void printConfig();
/*
* get User Name
* Input :
* Return : User Name
*/
const char *getUserName() const;
/*
* get Group Name
* Input :
* Return : Group Name
*/
const char *getGroupName() const;
private:
const char* vendorForPeerAETitle(const char *peerAETitle) const;
int countCtnTitles() const;
/*
* initialize configuration storage structure
*/
void initConfigStruct();
/*
* read configuration file line by line
* Input : configuration file pointer
* Return : 1 - ok
* 0 - error
*/
int readConfigLines(FILE *cnffp);
/*
* read HostTable in configuration file
* Input : configuration file pointer, line number
* Output : line number
* Return : 1 - ok
* 0 - error
*/
int readHostTable(FILE *cnffp, int *lineno);
/*
* read VendorTable in configuration file
* Input : configuration file pointer, line number
* Output : line number
* Return : 1 - ok
* 0 - error
*/
int readVendorTable(FILE *cnffp, int *lineno);
/*
* read AETable in configuration file
* Input : configuration file pointer, line number
* Output : line number
* Return : 1 - ok
* 0 - error
*/
int readAETable(FILE *cnffp, int *lineno);
/*
* separate the peer list from value list
* Input : pointer to value list
* Output : number of peers
* Return : pointer to peer list
*/
DcmQueryRetrieveConfigPeer *parsePeers(char **valuehandle, int *peers);
/*
* extract peers from peer list
* Input : pointer to value list
* Output : number of peers
* Return : pointer to peer list
*/
DcmQueryRetrieveConfigPeer *readPeerList(char **valuehandle, int *peers);
/*
* separate a quota from value list
* Input : pointer to value list
* Return : pointer to quota structure
*/
static DcmQueryRetrieveConfigQuota *parseQuota(char **valuehandle);
/*
* check if character is white space or separator
* Input : character
* Return : 1 - yes
* 0 - no
*/
static int isgap (char gap);
/*
* check if character is quote
* Input : character
* Return : 1 - yes
* 0 - no
*/
static int isquote (char quote);
/*
* print a panic message to stderr
* Input : variable
*/
static void panic(const char *fmt, ...);
/*
* convert string to long
* Input : parameter string value
* Return : parameter as long
* -1 on error
*/
static long quota (const char *value);
/*
* skip mnemonic and first gap in rc line
* Input : rc line
* Return : pointer to value list
*/
static char *skipmnemonic (char *rcline);
/*
* separate on value from value list
* Input : pointer to value list
* Return : pointer to next value
*/
static char *parsevalues (char **valuehandle);
/* Configuration Parameters */
OFString UserName_;
OFString GroupName_;
int networkTCPPort_;
Uint32 maxPDUSize_;
int maxAssociations_;
DcmQueryRetrieveConfigConfiguration CNF_Config; /* configuration file contents */
DcmQueryRetrieveConfigHostTable CNF_HETable; /* HostEntries Table */
DcmQueryRetrieveConfigHostTable CNF_VendorTable; /* Vendor Table */
};
#endif