00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef DCMQRTIS_H
00035 #define DCMQRTIS_H
00036
00037 #include "dcmtk/config/osconfig.h"
00038
00039 #include "dcmtk/dcmnet/dicom.h"
00040 #include "dcmtk/dcmnet/cond.h"
00041 #include "dcmtk/dcmnet/assoc.h"
00042 #include "dcmtk/dcmnet/dimse.h"
00043 #include "dcmtk/ofstd/ofcmdln.h"
00044 #include "dcmtk/dcmqrdb/dcmqrcnf.h"
00045
00046 class DcmQueryRetrieveDatabaseHandle;
00047
00048
00049
00050
00051
00052 #define TI_MAXPEERS 100
00053 #define TI_MAXDATABASES 100
00054 #define TI_MAXSTUDIES 1000
00055 #define TI_MAXSERIES 500
00056 #define TI_MAXIMAGES 1000
00057
00058
00059
00060
00061
00062 struct TI_ImageEntry
00063 {
00064 DIC_UI sopInstanceUID;
00065 DIC_IS imageNumber;
00066 int intImageNumber;
00067 } ;
00068
00069 struct TI_SeriesEntry
00070 {
00071 DIC_UI seriesInstanceUID;
00072 DIC_IS seriesNumber;
00073 int intSeriesNumber;
00074 DIC_CS modality;
00075 TI_ImageEntry *images[TI_MAXIMAGES];
00076 int imageCount;
00077
00078 time_t lastQueryTime;
00079 };
00080
00081 struct TI_StudyEntry
00082 {
00083 DIC_UI studyInstanceUID;
00084 DIC_CS studyID;
00085 DIC_PN patientsName;
00086 DIC_LO patientID;
00087 TI_SeriesEntry *series[TI_MAXSERIES];
00088 int seriesCount;
00089 time_t lastQueryTime;
00090 };
00091
00092
00093 struct TI_DBEntry
00094 {
00095 const char *title;
00096
00097 const char **peerTitles;
00098
00099 int peerTitleCount;
00100
00101 DcmQueryRetrieveDatabaseHandle *dbHandle;
00102
00103 TI_StudyEntry *studies[TI_MAXSTUDIES];
00104 int studyCount;
00105
00106 int currentStudy;
00107 int currentSeries;
00108 int currentImage;
00109
00110 time_t lastQueryTime;
00111
00112 OFBool isRemoteDB;
00113 };
00114
00115 struct TI_GenericCallbackStruct
00116 {
00117 TI_DBEntry *db;
00118 TI_StudyEntry *study;
00119 TI_SeriesEntry *series;
00120 };
00121
00122 typedef OFBool (*TI_GenericEntryCallbackFunction)(TI_GenericCallbackStruct *cbstruct, DcmDataset *reply);
00123
00126 class DcmQueryRetrieveTelnetInitiator
00127 {
00128 public:
00129
00133 DcmQueryRetrieveTelnetInitiator(DcmQueryRetrieveConfig &cfg);
00134
00137 void TI_userInput();
00138
00143 OFBool addPeerName(const char *peerName, const char *configFileName);
00144
00147 void printConfig();
00148
00152 OFBool TI_detachAssociation(OFBool abortFlag);
00153
00157 void setAETitle(const char *ae)
00158 {
00159 myAETitle = ae;
00160 }
00161
00165 void setMaxPDU(OFCmdUnsignedInt pdu)
00166 {
00167 maxReceivePDULength = pdu;
00168 }
00169
00172 void activateFirstPeer()
00173 {
00174 peerHostName = peerNames[0];
00175 }
00176
00181 T_ASC_Network **accessNet()
00182 {
00183 return &net;
00184 }
00185
00187 int getdbCount() const
00188 {
00189 return dbCount;
00190 }
00191
00197 void createConfigEntries(
00198 const char *configFileName,
00199 int remoteDBTitlesCount,
00200 const char **remoteDBTitles);
00201
00205 void setXferSyntax(E_TransferSyntax xfer) { networkTransferSyntax = xfer; }
00206
00211 void setDebug (OFBool is_verbose, OFBool is_debug)
00212 {
00213 verbose = is_verbose;
00214 debug = is_debug;
00215 }
00216
00221 void setBlockMode(T_DIMSE_BlockingMode blockMode, int timeout)
00222 {
00223 blockMode_ = blockMode;
00224 dimse_timeout_ = timeout;
00225 }
00226
00227 private:
00228
00229 OFBool TI_attachAssociation();
00230 OFBool TI_changeAssociation();
00231 OFBool TI_sendEcho();
00232 OFBool TI_storeImage(char *sopClass, char *sopInstance, char * imgFile);
00233 OFBool TI_remoteFindQuery(
00234 TI_DBEntry *db, DcmDataset *query,
00235 TI_GenericEntryCallbackFunction callbackFunction,
00236 TI_GenericCallbackStruct *callbackData);
00237 OFBool TI_title(int arg, const char * );
00238 OFBool TI_attachDB(TI_DBEntry *db);
00239 OFBool TI_database(int arg, const char * );
00240 OFBool TI_echo(int arg, const char * );
00241 OFBool TI_quit(int arg, const char * );
00242 OFBool TI_actualizeStudies();
00243 OFBool TI_study(int arg, const char * );
00244 OFBool TI_actualizeSeries();
00245 OFBool TI_series(int arg, const char * );
00246 OFBool TI_actualizeImages();
00247 OFBool TI_image(int arg, const char * );
00248 OFBool TI_buildStudies(TI_DBEntry *db);
00249 OFBool TI_buildSeries(TI_DBEntry *db, TI_StudyEntry *study);
00250 OFBool TI_buildRemoteImages(TI_DBEntry *db, TI_StudyEntry *study, TI_SeriesEntry *series);
00251 OFBool TI_buildImages(TI_DBEntry *db, TI_StudyEntry *study, TI_SeriesEntry *series);
00252 OFBool TI_sendStudy(int arg, const char * );
00253 OFBool TI_sendSeries(int arg, const char * );
00254 OFBool TI_sendImage(int arg, const char * );
00255 OFBool TI_send(int , const char *cmdbuf);
00256 OFBool TI_shortHelp(int , const char * );
00257 OFBool TI_help(int arg, const char * );
00258 OFBool TI_buildRemoteStudies(TI_DBEntry *db);
00259 OFBool TI_buildRemoteSeries(TI_DBEntry *db, TI_StudyEntry *study);
00260 OFBool TI_dbReadable(const char *dbTitle);
00261 time_t TI_dbModifyTime(const char *dbTitle);
00262 OFCondition addPresentationContexts(T_ASC_Parameters *params);
00263
00264 OFBool findDBPeerTitles(
00265 const char *configFileName,
00266 TI_DBEntry *dbEntry,
00267 const char *peer);
00268
00270 TI_DBEntry **dbEntries;
00271
00273 int dbCount;
00274
00276 const char *peerHostName;
00277
00279 const char *peerNames[TI_MAXPEERS];
00280
00282 int peerNamesCount;
00283
00285 const char *myAETitle;
00286
00288 T_ASC_Network *net;
00289
00291 T_ASC_Association *assoc;
00292
00294 OFCmdUnsignedInt maxReceivePDULength;
00295
00297 int currentdb;
00298
00300 const char *currentPeerTitle;
00301
00303 DcmQueryRetrieveConfig& config;
00304
00306 E_TransferSyntax networkTransferSyntax;
00307
00309 OFBool verbose;
00310
00312 OFBool debug;
00313
00315 T_DIMSE_BlockingMode blockMode_;
00316
00318 int dimse_timeout_;
00319
00320 };
00321
00322
00323 #endif
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344