summaryrefslogtreecommitdiff
path: root/ace/SSL/SSL_Asynch_Stream.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ace/SSL/SSL_Asynch_Stream.cpp')
-rw-r--r--ace/SSL/SSL_Asynch_Stream.cpp171
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) */