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 #ifndef DCMQRTIS_H
00030 #define DCMQRTIS_H
00031
00032 #include "dcmtk/config/osconfig.h"
00033
00034 #include "dcmtk/dcmnet/dicom.h"
00035 #include "dcmtk/dcmnet/cond.h"
00036 #include "dcmtk/dcmnet/assoc.h"
00037 #include "dcmtk/dcmnet/dimse.h"
00038 #include "dcmtk/ofstd/ofcmdln.h"
00039 #include "dcmtk/dcmqrdb/dcmqrcnf.h"
00040
00041 class DcmQueryRetrieveDatabaseHandle;
00042
00043
00044
00045
00046
00047 #define TI_MAXPEERS 100
00048 #define TI_MAXDATABASES 100
00049 #define TI_MAXSTUDIES 1000
00050 #define TI_MAXSERIES 500
00051 #define TI_MAXIMAGES 1000
00052
00053
00054
00055
00056
00057 struct TI_ImageEntry
00058 {
00059 DIC_UI sopInstanceUID;
00060 DIC_IS imageNumber;
00061 int intImageNumber;
00062 } ;
00063
00064 struct TI_SeriesEntry
00065 {
00066 DIC_UI seriesInstanceUID;
00067 DIC_IS seriesNumber;
00068 int intSeriesNumber;
00069 DIC_CS modality;
00070 TI_ImageEntry *images[TI_MAXIMAGES];
00071 int imageCount;
00072
00073 time_t lastQueryTime;
00074 };
00075
00076 struct TI_StudyEntry
00077 {
00078 DIC_UI studyInstanceUID;
00079 DIC_CS studyID;
00080 DIC_PN patientName;
00081 DIC_LO patientID;
00082 TI_SeriesEntry *series[TI_MAXSERIES];
00083 int seriesCount;
00084 time_t lastQueryTime;
00085 };
00086
00087
00088 struct TI_DBEntry
00089 {
00090 const char *title;
00091
00092 const char **peerTitles;
00093
00094 int peerTitleCount;
00095
00096 DcmQueryRetrieveDatabaseHandle *dbHandle;
00097
00098 TI_StudyEntry *studies[TI_MAXSTUDIES];
00099 int studyCount;
00100
00101 int currentStudy;
00102 int currentSeries;
00103 int currentImage;
00104
00105 time_t lastQueryTime;
00106
00107 OFBool isRemoteDB;
00108 };
00109
00110 struct TI_GenericCallbackStruct
00111 {
00112 TI_DBEntry *db;
00113 TI_StudyEntry *study;
00114 TI_SeriesEntry *series;
00115 };
00116
00117 typedef OFBool (*TI_GenericEntryCallbackFunction)(TI_GenericCallbackStruct *cbstruct, DcmDataset *reply);
00118
00121 class DcmQueryRetrieveTelnetInitiator
00122 {
00123 public:
00124
00128 DcmQueryRetrieveTelnetInitiator(DcmQueryRetrieveConfig &cfg);
00129
00132 void TI_userInput();
00133
00138 OFBool addPeerName(const char *peerName, const char *configFileName);
00139
00142 void printConfig();
00143
00147 OFBool TI_detachAssociation(OFBool abortFlag);
00148
00152 void setAETitle(const char *ae)
00153 {
00154 myAETitle = ae;
00155 }
00156
00160 void setMaxPDU(OFCmdUnsignedInt pdu)
00161 {
00162 maxReceivePDULength = pdu;
00163 }
00164
00167 void activateFirstPeer()
00168 {
00169 peerHostName = peerNames[0];
00170 }
00171
00176 T_ASC_Network **accessNet()
00177 {
00178 return &net;
00179 }
00180
00182 int getdbCount() const
00183 {
00184 return dbCount;
00185 }
00186
00192 void createConfigEntries(
00193 const char *configFileName,
00194 int remoteDBTitlesCount,
00195 const char **remoteDBTitles);
00196
00200 void setXferSyntax(E_TransferSyntax xfer) { networkTransferSyntax = xfer; }
00201
00206 void setBlockMode(T_DIMSE_BlockingMode blockMode, int timeout)
00207 {
00208 blockMode_ = blockMode;
00209 dimse_timeout_ = timeout;
00210 }
00211
00212 private:
00213
00214 OFBool TI_attachAssociation();
00215 OFBool TI_changeAssociation();
00216 OFBool TI_sendEcho();
00217 OFBool TI_storeImage(char *sopClass, char *sopInstance, char * imgFile);
00218 OFBool TI_remoteFindQuery(
00219 TI_DBEntry *db, DcmDataset *query,
00220 TI_GenericEntryCallbackFunction callbackFunction,
00221 TI_GenericCallbackStruct *callbackData);
00222 OFBool TI_title(int arg, const char * );
00223 OFBool TI_attachDB(TI_DBEntry *db);
00224 OFBool TI_database(int arg, const char * );
00225 OFBool TI_echo(int arg, const char * );
00226 OFBool TI_quit(int arg, const char * );
00227 OFBool TI_actualizeStudies();
00228 OFBool TI_study(int arg, const char * );
00229 OFBool TI_actualizeSeries();
00230 OFBool TI_series(int arg, const char * );
00231 OFBool TI_actualizeImages();
00232 OFBool TI_image(int arg, const char * );
00233 OFBool TI_buildStudies(TI_DBEntry *db);
00234 OFBool TI_buildSeries(TI_DBEntry *db, TI_StudyEntry *study);
00235 OFBool TI_buildRemoteImages(TI_DBEntry *db, TI_StudyEntry *study, TI_SeriesEntry *series);
00236 OFBool TI_buildImages(TI_DBEntry *db, TI_StudyEntry *study, TI_SeriesEntry *series);
00237 OFBool TI_sendStudy(int arg, const char * );
00238 OFBool TI_sendSeries(int arg, const char * );
00239 OFBool TI_sendImage(int arg, const char * );
00240 OFBool TI_send(int , const char *cmdbuf);
00241 OFBool TI_shortHelp(int , const char * );
00242 OFBool TI_help(int arg, const char * );
00243 OFBool TI_buildRemoteStudies(TI_DBEntry *db);
00244 OFBool TI_buildRemoteSeries(TI_DBEntry *db, TI_StudyEntry *study);
00245 OFBool TI_dbReadable(const char *dbTitle);
00246 time_t TI_dbModifyTime(const char *dbTitle);
00247 OFCondition addPresentationContexts(T_ASC_Parameters *params);
00248
00249 OFBool findDBPeerTitles(
00250 const char *configFileName,
00251 TI_DBEntry *dbEntry,
00252 const char *peer);
00253
00255 TI_DBEntry **dbEntries;
00256
00258 int dbCount;
00259
00261 const char *peerHostName;
00262
00264 const char *peerNames[TI_MAXPEERS];
00265
00267 int peerNamesCount;
00268
00270 const char *myAETitle;
00271
00273 T_ASC_Network *net;
00274
00276 T_ASC_Association *assoc;
00277
00279 OFCmdUnsignedInt maxReceivePDULength;
00280
00282 int currentdb;
00283
00285 const char *currentPeerTitle;
00286
00288 DcmQueryRetrieveConfig& config;
00289
00291 E_TransferSyntax networkTransferSyntax;
00292
00294 T_DIMSE_BlockingMode blockMode_;
00295
00297 int dimse_timeout_;
00298
00299 };
00300
00301
00302 #endif
00303
00304
00305
00306
00307
00308
00309
00310
00311
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337