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 SCU_H
00030 #define SCU_H
00031
00032 #include "dcmtk/config/osconfig.h"
00033
00034 #include "dcmtk/dcmdata/dctk.h"
00035 #include "dcmtk/dcmnet/dcompat.h"
00036 #include "dcmtk/dcmnet/dimse.h"
00037 #include "dcmtk/dcmnet/dcasccff.h"
00038 #include "dcmtk/dcmnet/dcasccfg.h"
00039
00040 #ifdef WITH_ZLIB
00041 #include <zlib.h>
00042 #endif
00043
00044
00047 enum DcmCloseAssociationType
00048 {
00050 DCMSCU_RELEASE_ASSOCIATION,
00052 DCMSCU_ABORT_ASSOCIATION,
00054 DCMSCU_PEER_REQUESTED_RELEASE,
00056 DCMSCU_PEER_ABORTED_ASSOCIATION
00057 };
00058
00059
00062 class FINDResponse
00063 {
00064
00065 public:
00066
00068 FINDResponse();
00069
00071 virtual ~FINDResponse();
00072
00074 Uint16 m_messageIDRespondedTo;
00075
00076
00077 OFString m_affectedSOPClassUID;
00078
00080 DcmDataset *m_dataset;
00081
00083 Uint16 m_status;
00084 };
00085
00086
00089 class FINDResponses
00090 {
00091
00092 public:
00093 FINDResponses();
00094 virtual ~FINDResponses();
00095 Uint32 numResults() const;
00096 void add(FINDResponse *rsp);
00097 OFListIterator(FINDResponse *) begin();
00098 OFListIterator(FINDResponse *) end();
00099
00100 private:
00101 OFList<FINDResponse *> m_responses;
00102 };
00103
00110 class DcmSCU
00111 {
00112
00113 public:
00114
00117 DcmSCU();
00118
00121 virtual ~DcmSCU();
00122
00129 OFCondition addPresentationContext(const OFString &abstractSyntax,
00130 const OFList<OFString> &xferSyntaxes);
00131
00135 virtual OFCondition initNetwork();
00136
00142 virtual OFCondition negotiateAssociation();
00143
00151 T_ASC_PresentationContextID findPresentationContextID(const OFString &abstractSyntax,
00152 const OFString &transferSyntax);
00153
00160 virtual OFCondition sendECHORequest(const T_ASC_PresentationContextID presID);
00161
00190 virtual OFCondition sendSTORERequest(const T_ASC_PresentationContextID presID,
00191 const OFString &dicomFile,
00192 DcmDataset *dset,
00193 DcmDataset *&rspCommandSet,
00194 DcmDataset *&rspStatusDetail,
00195 Uint16 &rspStatusCode);
00196
00209 virtual OFCondition sendFINDRequest(T_ASC_PresentationContextID presID,
00210 DcmDataset *queryKeys,
00211 FINDResponses *responses);
00212
00223 virtual OFCondition handleFINDResponse(Uint16 presContextID,
00224 FINDResponse *response,
00225 OFBool &waitForNextResponse);
00226
00234 virtual OFCondition sendCANCELRequest(Uint16 presContextID);
00235
00249 virtual OFCondition sendACTIONRequest(const T_ASC_PresentationContextID presID,
00250 const OFString &sopInstanceUID,
00251 const Uint16 actionTypeID,
00252 DcmDataset *reqDataset,
00253 Uint16 &rspStatusCode);
00254
00265 virtual OFCondition handleEVENTREPORTRequest(DcmDataset *&reqDataset,
00266 Uint16 &eventTypeID,
00267 const int timeout = 0);
00268
00272 virtual void closeAssociation(const DcmCloseAssociationType closeType);
00273
00274
00275
00279 void setMaxReceivePDULength(const unsigned long maxRecPDU);
00280
00284 void setDIMSEBlockingMode(const T_DIMSE_BlockingMode blockingMode);
00285
00289 void setAETitle(const OFString &myAETtitle);
00290
00294 void setPeerHostName(const OFString &peerHostName);
00295
00299 void setPeerAETitle(const OFString &peerAETitle);
00300
00304 void setPeerPort(const Uint16 peerPort);
00305
00311 void setDIMSETimeout(const Uint32 dimseTimeout);
00312
00317 void setACSETimeout(const Uint32 acseTimeout);
00318
00323 void setAssocConfigFileAndProfile(const OFString &filename,
00324 const OFString &profile);
00325
00330 void setVerbosePCMode(const OFBool mode);
00331
00332
00333
00337 OFBool isConnected() const;
00338
00342 Uint32 getMaxReceivePDULength() const;
00343
00347 T_DIMSE_BlockingMode getDIMSEBlockingMode() const;
00348
00352 const OFString &getAETitle() const;
00353
00357 const OFString &getPeerHostName() const;
00358
00362 const OFString &getPeerAETitle() const;
00363
00367 Uint16 getPeerPort() const;
00368
00373 Uint32 getDIMSETimeout() const;
00374
00379 Uint32 getACSETimeout() const;
00380
00386 OFBool getVerbosePCMode() const;
00387
00391 OFBool getTLSEnabled() const;
00392
00393 protected:
00394
00410 OFCondition sendDIMSEMessage(const T_ASC_PresentationContextID presID,
00411 T_DIMSE_Message *msg,
00412 DcmDataset *dataObject,
00413 DIMSE_ProgressCallback callback,
00414 void *callbackContext,
00415 DcmDataset **commandSet = NULL);
00416
00426 OFCondition getDatasetInfo(DcmDataset *dataset,
00427 OFString &sopClassUID,
00428 OFString &sopInstanceUID,
00429 E_TransferSyntax &transferSyntax);
00430
00431
00436 OFCondition useSecureConnection(DcmTransportLayer *tlayer);
00437
00459 OFCondition receiveDIMSECommand(T_ASC_PresentationContextID *presID,
00460 T_DIMSE_Message *msg,
00461 DcmDataset **statusDetail,
00462 DcmDataset **commandSet = NULL,
00463 const Uint32 timeout = 0);
00464
00478 OFCondition receiveDIMSEDataset(T_ASC_PresentationContextID *presID,
00479 DcmDataset **dataObject,
00480 DIMSE_ProgressCallback callback,
00481 void *callbackContext);
00482
00491 void findPresentationContext(const T_ASC_PresentationContextID presID,
00492 OFString &abstractSyntax,
00493 OFString &transferSyntax);
00494
00505 virtual Uint16 checkEVENTREPORTRequest(T_DIMSE_N_EventReportRQ &request,
00506 DcmDataset *reqDataset);
00507
00508 private:
00509
00513 DcmSCU(const DcmSCU &src);
00514
00519 DcmSCU &operator=(const DcmSCU &src);
00520
00522 T_ASC_Association *m_assoc;
00523
00525 T_ASC_Network *m_net;
00526
00528 T_ASC_Parameters *m_params;
00529
00531 OFString m_assocConfigFilename;
00532
00534 OFString m_assocConfigProfile;
00535
00538 struct DcmSCUPresContext {
00540 OFString abstractSyntaxName;
00542 OFList<OFString> transferSyntaxes;
00543 };
00544
00546 OFList<DcmSCUPresContext> m_presContexts;
00547
00549 OFString m_assocConfigFile;
00550
00552 T_DIMSE_Message *m_openDIMSERequest;
00553
00555 Uint32 m_maxReceivePDULength;
00556
00558 T_DIMSE_BlockingMode m_blockMode;
00559
00561 OFString m_ourAETitle;
00562
00564 OFString m_peer;
00565
00567 OFString m_peerAETitle;
00568
00570 Uint16 m_peerPort;
00571
00573 Uint32 m_dimseTimeout;
00574
00576 Uint32 m_acseTimeout;
00577
00579 OFBool m_verbosePCMode;
00580
00584 Uint16 nextMessageID();
00585
00586 };
00587
00588 #endif // SCU_H
00589
00590
00591
00592
00593
00594
00595
00596
00597
00598
00599
00600
00601
00602
00603
00604
00605
00606
00607
00608
00609
00610
00611
00612
00613
00614
00615
00616
00617
00618
00619
00620
00621
00622
00623
00624
00625
00626
00627
00628
00629
00630
00631
00632
00633
00634
00635
00636
00637
00638
00639
00640
00641
00642
00643
00644
00645
00646
00647