diff options
Diffstat (limited to 'ace/SSL/SSL_Asynch_Stream.cpp')
-rw-r--r-- | ace/SSL/SSL_Asynch_Stream.cpp | 171 |
1 files changed, 127 insertions, 44 deletions
diff --git a/ace/SSL/SSL_Asynch_Stream.cpp b/ace/SSL/SSL_Asynch_Stream.cpp index 23ab69059fd..2903fe7ba39 100644 --- a/ace/SSL/SSL_Asynch_Stream.cpp +++ b/ace/SSL/SSL_Asynch_Stream.cpp @@ -1,3 +1,5 @@ +// -*- C++ -*- + #include "SSL_Asynch_Stream.h" ACE_RCSID (ACE_SSL, @@ -8,9 +10,25 @@ ACE_RCSID (ACE_SSL, #if OPENSSL_VERSION_NUMBER > 0x0090581fL && ((defined (ACE_WIN32) && !defined (ACE_HAS_WINCE)) || (defined (ACE_HAS_AIO_CALLS))) #if defined (ACE_WIN32) + +# define A_RESULT ACE_WIN32_Asynch_Result +# define ARS_RESULT ACE_WIN32_Asynch_Read_Stream_Result +# define AWS_RESULT ACE_WIN32_Asynch_Write_Stream_Result + +# define ERR_CANCELED ERROR_OPERATION_ABORTED + # include "ace/WIN32_Proactor.h" + #else + +# define A_RESULT ACE_POSIX_Asynch_Result +# define ARS_RESULT ACE_POSIX_Asynch_Read_Stream_Result +# define AWS_RESULT ACE_POSIX_Asynch_Write_Stream_Result + +# define ERR_CANCELED ECANCELED + # include "ace/POSIX_Proactor.h" + #endif /* ACE_WIN32 */ #include "ace/OS_NS_string.h" @@ -18,7 +36,27 @@ ACE_RCSID (ACE_SSL, #include <openssl/err.h> -ACE_BEGIN_VERSIONED_NAMESPACE_DECL +// ************************************************************ +// SSL Asynchronous Write Result +// ************************************************************ + +class ACE_SSL_Export ACE_SSL_Asynch_Write_Stream_Result: + public AWS_RESULT +{ + /// Factory class will have special permissions. + friend class ACE_SSL_Asynch_Stream; + +protected: + + ACE_SSL_Asynch_Write_Stream_Result (ACE_Handler &handler, + ACE_HANDLE handle, + ACE_Message_Block &message_block, + size_t bytes_to_read, + const void* act, + ACE_HANDLE event, + int priority, + int signal_number); +}; ACE_SSL_Asynch_Write_Stream_Result::ACE_SSL_Asynch_Write_Stream_Result (ACE_Handler & handler, @@ -42,6 +80,29 @@ ACE_SSL_Asynch_Write_Stream_Result::ACE_SSL_Asynch_Write_Stream_Result { } +// ************************************************************ +// SSL Asynchronous Read Result +// ************************************************************ +class ACE_SSL_Export ACE_SSL_Asynch_Read_Stream_Result: + public ARS_RESULT +{ + /// Factory class will have special permissions. + friend class ACE_SSL_Asynch_Stream; + +protected: + + ACE_SSL_Asynch_Read_Stream_Result (ACE_Handler &handler, + ACE_HANDLE handle, + ACE_Message_Block &message_block, + size_t bytes_to_read, + const void* act, + ACE_HANDLE event, + int priority, + int signal_number); +}; + + + ACE_SSL_Asynch_Read_Stream_Result::ACE_SSL_Asynch_Read_Stream_Result (ACE_Handler & handler, ACE_HANDLE handle, @@ -64,7 +125,23 @@ ACE_SSL_Asynch_Read_Stream_Result::ACE_SSL_Asynch_Read_Stream_Result { } -ACE_SSL_Asynch_Result::ACE_SSL_Asynch_Result (ACE_Handler & handler) + +// ************************************************************ +// Faked Result. It is used for close notification +// ************************************************************ +class ACE_SSL_Asynch_Result : public A_RESULT +{ +public: + ACE_SSL_Asynch_Result (ACE_Handler & handler); + + void complete (size_t bytes_transferred, + int success, + const void * completion_key, + u_long error); +}; + +ACE_SSL_Asynch_Result::ACE_SSL_Asynch_Result + (ACE_Handler & handler) : A_RESULT (handler.proxy (), 0, // act, ACE_INVALID_HANDLE, @@ -86,7 +163,7 @@ ACE_SSL_Asynch_Result::complete (size_t /* bytes_transferred */, } // ************************************************************ -// ACE_SSL_Asynch_Stream Constructor / Destructor +// ACE_SSL_Asynch_Stream Constructor / Desctructor // ************************************************************ ACE_SSL_Asynch_Stream::ACE_SSL_Asynch_Stream ( ACE_SSL_Asynch_Stream::Stream_Type s_type, @@ -121,8 +198,8 @@ ACE_SSL_Asynch_Stream::ACE_SSL_Asynch_Stream ( if (this->ssl_ == 0) ACE_ERROR ((LM_ERROR, - ACE_TEXT ("(%P|%t) ACE_SSL_Asynch_Stream %p\n"), - ACE_TEXT ("- cannot allocate new SSL structure") + ACE_LIB_TEXT ("(%P|%t) ACE_SSL_Asynch_Stream %p\n"), + ACE_LIB_TEXT ("- cannot allocate new SSL structure") )); ::SSL_set_verify (this->ssl_, @@ -141,11 +218,12 @@ ACE_SSL_Asynch_Stream::~ACE_SSL_Asynch_Stream (void) if (this->flags_ & SF_STREAM_OPEN) // open if ((this->flags_ & SF_DELETE_ENABLE) == 0) // but .. ACE_DEBUG ((LM_DEBUG, - ACE_TEXT("ACE_SSL_Asynch_Stream::DTOR-") - ACE_TEXT("possible access violation ") - ACE_TEXT("if proactor still handles events\n"))); + ACE_LIB_TEXT("ACE_SSL_Asynch_Stream::DTOR-") + ACE_LIB_TEXT("possible access violation ") + ACE_LIB_TEXT("if proactor still handles events\n"))); ::SSL_free (this->ssl_); + this->ssl_ = 0; // Was honestly copied from ACE_SSL_SOCK_Stream :) @@ -232,22 +310,22 @@ ACE_SSL_Asynch_Stream::open (ACE_Handler & handler, if (this->flags_ & SF_STREAM_OPEN) ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT ("(%P|%t) ACE_SSL_Asynch_Stream::open() %p\n"), - ACE_TEXT ("- already opened")), + ACE_LIB_TEXT ("(%P|%t) ACE_SSL_Asynch_Stream::open() %p\n"), + ACE_LIB_TEXT ("- already opened")), -1); if (this->ssl_ == 0) ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT ("(%P|%t) ACE_SSL_Asynch_Stream::open() %p\n"), - ACE_TEXT ("- SSL structure is absent")), + ACE_LIB_TEXT ("(%P|%t) ACE_SSL_Asynch_Stream::open() %p\n"), + ACE_LIB_TEXT ("- SSL structure is absent")), -1); if (handle == ACE_INVALID_HANDLE) ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT ("(%P|%t) ACE_SSL_Asynch_Stream::open() %p\n"), - ACE_TEXT ("- invalid handle")), + ACE_LIB_TEXT ("(%P|%t) ACE_SSL_Asynch_Stream::open() %p\n"), + ACE_LIB_TEXT ("- invalid handle")), -1); @@ -270,13 +348,13 @@ ACE_SSL_Asynch_Stream::open (ACE_Handler & handler, this->proactor_) != 0) return -1; - this->bio_ = ACE_SSL_make_BIO (this); + this->bio_ = ::BIO_new_ACE_Asynch (this); if (this->bio_ == 0) ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT ("(%P|%t) ACE_SSL_Asynch_Stream::open() %p\n"), - ACE_TEXT ("- cannot allocate new BIO structure")), + ACE_LIB_TEXT ("(%P|%t) ACE_SSL_Asynch_Stream::open() %p\n"), + ACE_LIB_TEXT ("- cannot allocate new BIO structure")), -1); ::SSL_set_bio (this->ssl_ , this->bio_ , this->bio_); @@ -294,8 +372,8 @@ ACE_SSL_Asynch_Stream::open (ACE_Handler & handler, default: ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT ("(%P|%t) ACE_SSL_Asynch_Stream::open() %p\n"), - ACE_TEXT ("- invalid stream type")), + ACE_LIB_TEXT ("(%P|%t) ACE_SSL_Asynch_Stream::open() %p\n"), + ACE_LIB_TEXT ("- invalid stream type")), -1); } @@ -306,6 +384,13 @@ ACE_SSL_Asynch_Stream::open (ACE_Handler & handler, return 0; } +void +ACE_SSL_Asynch_Stream::open (ACE_HANDLE new_handle, + ACE_Message_Block &block) +{ + ACE_Service_Handler::open (new_handle, + block); +} // ************************************************************ // Asynch_Operation interface @@ -464,7 +549,7 @@ ACE_SSL_Asynch_Stream::do_SSL_shutdown (void) default: this->print_error (status, - ACE_TEXT ("Shutdown error")); + ACE_LIB_TEXT ("Shutdown error")); retval = -1; break; } @@ -505,8 +590,8 @@ ACE_SSL_Asynch_Stream::do_SSL_handshake (void) default: ACE_ERROR_RETURN ((LM_ERROR, - ACE_TEXT ("(%P|%t) ACE_SSL_Asynch_Stream %p\n"), - ACE_TEXT ("- invalid stream type")), + ACE_LIB_TEXT ("(%P|%t) ACE_SSL_Asynch_Stream %p\n"), + ACE_LIB_TEXT ("- invalid stream type")), -1); } @@ -528,7 +613,7 @@ ACE_SSL_Asynch_Stream::do_SSL_handshake (void) case SSL_ERROR_SYSCALL: default: this->print_error (status, - ACE_TEXT ("Handshake error")); + ACE_LIB_TEXT ("Handshake error")); return -1; } @@ -587,7 +672,7 @@ ACE_SSL_Asynch_Stream::do_SSL_read (void) this->notify_read (0, EFAULT); this->print_error (status, - ACE_TEXT ("SSL_read error")); + ACE_LIB_TEXT ("SSL_read error")); return -1; } @@ -637,7 +722,7 @@ ACE_SSL_Asynch_Stream::do_SSL_write (void) this->notify_write(0, EFAULT); this->print_error (status, - ACE_TEXT ("SSL_write error")); + ACE_LIB_TEXT ("SSL_write error")); return -1; } @@ -698,15 +783,15 @@ ACE_SSL_Asynch_Stream::notify_read (int bytes_transferred, if (ext_read_result_ == 0) //nothing to notify return 1; - this->ext_read_result_->set_bytes_transferred (bytes_transferred); - this->ext_read_result_->set_error (error); + ext_read_result_->set_bytes_transferred (bytes_transferred); + ext_read_result_->set_error (error); - int retval = - this->ext_read_result_->post_completion (proactor_->implementation ()); + int retval = ext_read_result_->post_completion + (proactor_->implementation()); if (retval == 0) { - this->ext_read_result_ = 0; + ext_read_result_ = 0; return 0; // success } @@ -820,8 +905,8 @@ ACE_SSL_Asynch_Stream::ssl_bio_read (char * buf, { ACE_ERROR ((LM_ERROR, - ACE_TEXT ("%N:%l ((%P|%t) ACE_SSL_Asynch_Stream %p\n"), - ACE_TEXT ("error in ACE_Message_Block::size() ") + ACE_LIB_TEXT ("%N:%l ((%P|%t) ACE_SSL_Asynch_Stream %p\n"), + ACE_LIB_TEXT ("error in ACE_Message_Block::size() ") )); errval = EINVAL; @@ -843,8 +928,8 @@ ACE_SSL_Asynch_Stream::ssl_bio_read (char * buf, { ACE_ERROR ((LM_ERROR, - ACE_TEXT ("%N:%l (%P|%t) ACE_SSL_Asynch_Stream %p\n"), - ACE_TEXT ("attempt read failed") + ACE_LIB_TEXT ("%N:%l (%P|%t) ACE_SSL_Asynch_Stream %p\n"), + ACE_LIB_TEXT ("attempt read failed") )); errval = EINVAL; // may be leave EINPROGRESS ?? @@ -884,8 +969,8 @@ ACE_SSL_Asynch_Stream::ssl_bio_write (const char * buf, { ACE_ERROR ((LM_ERROR, - ACE_TEXT ("%N:%l ((%P|%t) ACE_SSL_Asynch_Stream %p\n"), - ACE_TEXT ("error in ACE_Message_Block::size() ") + ACE_LIB_TEXT ("%N:%l ((%P|%t) ACE_SSL_Asynch_Stream %p\n"), + ACE_LIB_TEXT ("error in ACE_Message_Block::size() ") )); errval = EINVAL; @@ -901,8 +986,8 @@ ACE_SSL_Asynch_Stream::ssl_bio_write (const char * buf, { ACE_ERROR ((LM_ERROR, - ACE_TEXT ("%N:%l ((%P|%t) ACE_SSL_Asynch_Stream %p\n"), - ACE_TEXT ("error in ACE_Message_Block::copy() ") + ACE_LIB_TEXT ("%N:%l ((%P|%t) ACE_SSL_Asynch_Stream %p\n"), + ACE_LIB_TEXT ("error in ACE_Message_Block::copy() ") )); errval = EINVAL; @@ -920,8 +1005,8 @@ ACE_SSL_Asynch_Stream::ssl_bio_write (const char * buf, { ACE_ERROR ((LM_ERROR, - ACE_TEXT ("%N:%l ((%P|%t) ACE_SSL_Asynch_Stream %p\n"), - ACE_TEXT ("attempt write failed") + ACE_LIB_TEXT ("%N:%l ((%P|%t) ACE_SSL_Asynch_Stream %p\n"), + ACE_LIB_TEXT ("attempt write failed") )); errval = EINVAL; // may be leave EINPROGRESS ?? @@ -971,8 +1056,8 @@ ACE_SSL_Asynch_Stream::handle_write_stream ( ACE_ERROR ((LM_ERROR, - ACE_TEXT ("(%P|%t) ACE_SSL_Asynch_Stream %p\n"), - ACE_TEXT ("attempt write failed") + ACE_LIB_TEXT ("(%P|%t) ACE_SSL_Asynch_Stream %p\n"), + ACE_LIB_TEXT ("attempt write failed") )); this->bio_out_errno_ = EINVAL; @@ -1035,7 +1120,5 @@ ACE_SSL_Asynch_Stream::pending_BIO_count (void) return ret; } -ACE_END_VERSIONED_NAMESPACE_DECL - #endif /* OPENSSL_VERSION_NUMBER > 0x0090581fL && (ACE_WIN32 || ACE_HAS_AIO_CALLS) */ |