DYT/Tool/3rdParty_x64/include/dcmtk/dcmtls/tlstrans.h
2024-11-22 23:19:31 +08:00

158 lines
5.0 KiB
C++

/*
*
* Copyright (C) 1998-2011, OFFIS e.V.
* All rights reserved. See COPYRIGHT file for details.
*
* This software and supporting documentation were developed by
*
* OFFIS e.V.
* R&D Division Health
* Escherweg 2
* D-26121 Oldenburg, Germany
*
*
* Module: dcmnet
*
* Author: Marco Eichelberg
*
* Purpose:
* classes: DcmTransportConnection
*
*/
#ifndef TLSTRANS_H
#define TLSTRANS_H
#include "dcmtk/config/osconfig.h" /* make sure OS specific configuration is included first */
#include "dcmtk/dcmnet/dcmtrans.h" /* for DcmTransportConnection */
#include "dcmtk/ofstd/ofstream.h" /* for ostream */
#include "dcmtk/dcmtls/tlsdefin.h"
#ifdef WITH_OPENSSL
BEGIN_EXTERN_C
#include <openssl/ssl.h>
END_EXTERN_C
/** this class represents a TLS (Transport Layer Security) V1 based secure
* transport connection.
*/
class DCMTK_DCMTLS_EXPORT DcmTLSConnection: public DcmTransportConnection
{
public:
/** constructor.
* @param openSocket TCP/IP socket to be used for the transport connection.
* the connection must already be establised on socket level. This object
* takes over control of the socket.
* @param newTLSConnection pointer to intialized OpenSSL connection object
* to be used for this connection.
*/
DcmTLSConnection(int openSocket, SSL *newTLSConnection);
/** destructor
*/
virtual ~DcmTLSConnection();
/** performs server side handshake on established socket.
* This function is used to establish a secure transport connection
* over the established TCP connection.
* @return TCS_ok if successful, an error code otherwise.
*/
virtual DcmTransportLayerStatus serverSideHandshake();
/** performs client side handshake on established socket.
* This function is used to establish a secure transport connection
* over the established TCP connection.
* @return TCS_ok if successful, an error code otherwise.
*/
virtual DcmTransportLayerStatus clientSideHandshake();
/** performs a re-negotiation of the connection with different
* connection parameters. Used to change the parameters of the
* secure transport connection.
* @param newSuite string identifying the ciphersuite to be negotiated.
* @return TCS_ok if successful, an error code otherwise.
*/
virtual DcmTransportLayerStatus renegotiate(const char *newSuite);
/** attempts to read nbyte bytes from the transport connection and
* writes them into the given buffer.
* @param buf buffer
* @param nbyte number of bytes to read
* @return number of bytes read, negative number if unsuccessful.
*/
virtual ssize_t read(void *buf, size_t nbyte);
/** attempts to write nbyte bytes from the given buffer
* to the transport connection.
* @param buf buffer
* @param nbyte number of bytes to write
* @return number of bytes written, negative number if unsuccessful.
*/
virtual ssize_t write(void *buf, size_t nbyte);
/** Closes the transport connection. If a secure connection
* is used, a closure alert is sent before the connection
* is closed.
*/
virtual void close();
/** returns the size in bytes of the peer certificate of a secure connection.
* @return peer certificate length in bytes
*/
virtual unsigned long getPeerCertificateLength();
/* copies the peer certificate of a secure connection into a buffer
* specified by the caller. If the buffer is too small to hold the
* certificate, nothing is copied and zero is returned.
* @param buf buffer into which the certificate is written
* @param bufLen size of the buffer in bytes
* @return number of bytes written, always less or equal bufLen.
*/
virtual unsigned long getPeerCertificate(void *buf, unsigned long bufLen);
/** checks if data is available to be read on the transport connection.
* @param timeout maximum number of seconds to wait if no data is available.
* If this parameter is 0, the function does not block.
* @returns OFTrue if data is available, OFFalse otherwise.
*/
virtual OFBool networkDataAvailable(int timeout);
/** returns OFTrue if this connection is a transparent TCP connection,
* OFFalse if the connection is a secure connection.
*/
virtual OFBool isTransparentConnection();
/** dump the characteristics of the current connection
* @param str the string to dump into
* @return reference to string
*/
virtual OFString& dumpConnectionParameters(OFString& str);
/** returns an error string for a given error code.
* @param code error code
* @return description for error code
*/
virtual const char *errorString(DcmTransportLayerStatus code);
private:
/// private undefined copy constructor
DcmTLSConnection(const DcmTLSConnection&);
/// private undefined assignment operator
DcmTLSConnection& operator=(const DcmTLSConnection&);
/// pointer to the TLS connection structure used by the OpenSSL library
SSL *tlsConnection;
/// last error code returned by the OpenSSL library
unsigned long lastError;
};
#endif /* WITH_OPENSSL */
#endif