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 DCMTRANS_H
00035 #define DCMTRANS_H
00036
00037 #include "dcmtk/config/osconfig.h"
00038 #include "dcmtk/ofstd/oftypes.h"
00039 #include "dcmtk/dcmnet/dcmlayer.h"
00040 #include "dcmtk/ofstd/ofstream.h"
00041
00042 #define INCLUDE_UNISTD
00043 #include "dcmtk/ofstd/ofstdinc.h"
00044
00049 class DcmTransportConnection
00050 {
00051 public:
00052
00058 DcmTransportConnection(int openSocket);
00059
00062 virtual ~DcmTransportConnection();
00063
00069 virtual DcmTransportLayerStatus serverSideHandshake() = 0;
00070
00076 virtual DcmTransportLayerStatus clientSideHandshake() = 0;
00077
00084 virtual DcmTransportLayerStatus renegotiate(const char *newSuite) = 0;
00085
00092 virtual ssize_t read(void *buf, size_t nbyte) = 0;
00093
00100 virtual ssize_t write(void *buf, size_t nbyte) = 0;
00101
00106 virtual void close() = 0;
00107
00112 virtual unsigned long getPeerCertificateLength() = 0;
00113
00114
00115
00116
00117
00118
00119
00120
00121 virtual unsigned long getPeerCertificate(void *buf, unsigned long bufLen) = 0;
00122
00129 virtual OFBool networkDataAvailable(int timeout) = 0;
00130
00134 virtual OFBool isTransparentConnection() = 0;
00135
00140 virtual void dumpConnectionParameters(ostream &out) = 0;
00141
00146 virtual const char *errorString(DcmTransportLayerStatus code) = 0;
00147
00162 static OFBool selectReadableAssociation(DcmTransportConnection *connections[], int connCount, int timeout);
00163
00164 protected:
00165
00169 int getSocket() { return theSocket; }
00170
00171 private:
00172
00174 DcmTransportConnection(const DcmTransportConnection&);
00175
00177 DcmTransportConnection& operator=(const DcmTransportConnection&);
00178
00195 static OFBool safeSelectReadableAssociation(DcmTransportConnection *connections[], int connCount, int timeout);
00196
00213 static OFBool fastSelectReadableAssociation(DcmTransportConnection *connections[], int connCount, int timeout);
00214
00216 int theSocket;
00217 };
00218
00219
00222 class DcmTCPConnection: public DcmTransportConnection
00223 {
00224 public:
00225
00231 DcmTCPConnection(int openSocket);
00232
00235 virtual ~DcmTCPConnection();
00236
00242 virtual DcmTransportLayerStatus serverSideHandshake();
00243
00249 virtual DcmTransportLayerStatus clientSideHandshake();
00250
00257 virtual DcmTransportLayerStatus renegotiate(const char *newSuite);
00258
00265 virtual ssize_t read(void *buf, size_t nbyte);
00266
00273 virtual ssize_t write(void *buf, size_t nbyte);
00274
00279 virtual void close();
00280
00285 virtual unsigned long getPeerCertificateLength();
00286
00287
00288
00289
00290
00291
00292
00293
00294 virtual unsigned long getPeerCertificate(void *buf, unsigned long bufLen);
00295
00301 virtual OFBool networkDataAvailable(int timeout);
00302
00306 virtual OFBool isTransparentConnection();
00307
00312 virtual void dumpConnectionParameters(ostream &out);
00313
00318 virtual const char *errorString(DcmTransportLayerStatus code);
00319
00320 private:
00321
00323 DcmTCPConnection(const DcmTCPConnection&);
00324
00326 DcmTCPConnection& operator=(const DcmTCPConnection&);
00327
00328 };
00329
00330 #endif
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356
00357
00358
00359