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 "osconfig.h"
00038 #include "oftypes.h"
00039 #include "dcmlayer.h"
00040 #include "ofstream.h"
00041
00042 BEGIN_EXTERN_C
00043 #ifdef HAVE_UNISTD_H
00044 #include <unistd.h>
00045 #endif
00046 END_EXTERN_C
00047
00052 class DcmTransportConnection
00053 {
00054 public:
00055
00061 DcmTransportConnection(int openSocket);
00062
00065 virtual ~DcmTransportConnection();
00066
00072 virtual DcmTransportLayerStatus serverSideHandshake() = 0;
00073
00079 virtual DcmTransportLayerStatus clientSideHandshake() = 0;
00080
00087 virtual DcmTransportLayerStatus renegotiate(const char *newSuite) = 0;
00088
00095 virtual ssize_t read(void *buf, size_t nbyte) = 0;
00096
00103 virtual ssize_t write(void *buf, size_t nbyte) = 0;
00104
00109 virtual void close() = 0;
00110
00115 virtual unsigned long getPeerCertificateLength() = 0;
00116
00117
00118
00119
00120
00121
00122
00123
00124 virtual unsigned long getPeerCertificate(void *buf, unsigned long bufLen) = 0;
00125
00132 virtual OFBool networkDataAvailable(int timeout) = 0;
00133
00137 virtual OFBool isTransparentConnection() = 0;
00138
00143 virtual void dumpConnectionParameters(ostream &out) = 0;
00144
00149 virtual const char *errorString(DcmTransportLayerStatus code) = 0;
00150
00165 static OFBool selectReadableAssociation(DcmTransportConnection *connections[], int connCount, int timeout);
00166
00167 protected:
00168
00172 int getSocket() { return theSocket; }
00173
00174 private:
00175
00177 DcmTransportConnection(const DcmTransportConnection&);
00178
00180 DcmTransportConnection& operator=(const DcmTransportConnection&);
00181
00198 static OFBool safeSelectReadableAssociation(DcmTransportConnection *connections[], int connCount, int timeout);
00199
00216 static OFBool fastSelectReadableAssociation(DcmTransportConnection *connections[], int connCount, int timeout);
00217
00219 int theSocket;
00220 };
00221
00222
00225 class DcmTCPConnection: public DcmTransportConnection
00226 {
00227 public:
00228
00234 DcmTCPConnection(int openSocket);
00235
00238 virtual ~DcmTCPConnection();
00239
00245 virtual DcmTransportLayerStatus serverSideHandshake();
00246
00252 virtual DcmTransportLayerStatus clientSideHandshake();
00253
00260 virtual DcmTransportLayerStatus renegotiate(const char *newSuite);
00261
00268 virtual ssize_t read(void *buf, size_t nbyte);
00269
00276 virtual ssize_t write(void *buf, size_t nbyte);
00277
00282 virtual void close();
00283
00288 virtual unsigned long getPeerCertificateLength();
00289
00290
00291
00292
00293
00294
00295
00296
00297 virtual unsigned long getPeerCertificate(void *buf, unsigned long bufLen);
00298
00304 virtual OFBool networkDataAvailable(int timeout);
00305
00309 virtual OFBool isTransparentConnection();
00310
00315 virtual void dumpConnectionParameters(ostream &out);
00316
00321 virtual const char *errorString(DcmTransportLayerStatus code);
00322
00323 private:
00324
00326 DcmTCPConnection(const DcmTCPConnection&);
00327
00329 DcmTCPConnection& operator=(const DcmTCPConnection&);
00330
00331 };
00332
00333 #endif
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356