summaryrefslogtreecommitdiff
path: root/ace/SSL
diff options
context:
space:
mode:
authorOssama Othman <ossama-othman@users.noreply.github.com>2003-04-16 07:16:40 +0000
committerOssama Othman <ossama-othman@users.noreply.github.com>2003-04-16 07:16:40 +0000
commite604888ff774747d2d6d68fa13f129f8e88679d3 (patch)
tree4d88056968b93664a5e53a2342873c0d330fba5c /ace/SSL
parent06d486a0ab494a8cf45dc32ff124cf9b45dac132 (diff)
downloadATCD-e604888ff774747d2d6d68fa13f129f8e88679d3.tar.gz
ChangeLogTag:Wed Apr 16 00:10:37 2003 Ossama Othman <ossama@uci.edu>
Diffstat (limited to 'ace/SSL')
-rw-r--r--ace/SSL/SSL_Asynch_Stream.cpp12
-rw-r--r--ace/SSL/SSL_SOCK_Stream.cpp81
-rw-r--r--ace/SSL/SSL_SOCK_Stream.i10
3 files changed, 63 insertions, 40 deletions
diff --git a/ace/SSL/SSL_Asynch_Stream.cpp b/ace/SSL/SSL_Asynch_Stream.cpp
index 160b86a466b..8978452dc7c 100644
--- a/ace/SSL/SSL_Asynch_Stream.cpp
+++ b/ace/SSL/SSL_Asynch_Stream.cpp
@@ -638,9 +638,9 @@ ACE_SSL_Asynch_Stream::do_SSL_read (void)
ACE_Message_Block & mb = this->ext_read_result_->message_block ();
size_t bytes_req = this->ext_read_result_->bytes_to_read ();
- int bytes_trn = ::SSL_read (this->ssl_,
- mb.rd_ptr (),
- bytes_req);
+ const int bytes_trn = ::SSL_read (this->ssl_,
+ mb.wr_ptr (),
+ bytes_req);
int status = ::SSL_get_error (this->ssl_, bytes_trn);
@@ -695,9 +695,9 @@ ACE_SSL_Asynch_Stream::do_SSL_write (void)
ACE_Message_Block & mb = this->ext_write_result_->message_block ();
size_t bytes_req = this->ext_write_result_->bytes_to_write ();
- int bytes_trn = ::SSL_write (this->ssl_,
- mb.rd_ptr (),
- bytes_req);
+ const int bytes_trn = ::SSL_write (this->ssl_,
+ mb.rd_ptr (),
+ bytes_req);
int status = ::SSL_get_error (this->ssl_, bytes_trn);
diff --git a/ace/SSL/SSL_SOCK_Stream.cpp b/ace/SSL/SSL_SOCK_Stream.cpp
index 578051416d9..f7189463360 100644
--- a/ace/SSL/SSL_SOCK_Stream.cpp
+++ b/ace/SSL/SSL_SOCK_Stream.cpp
@@ -89,9 +89,9 @@ ACE_SSL_SOCK_Stream::sendv (const iovec iov[],
for (size_t i = 0; i < n; ++i)
{
- ssize_t result = this->send (iov[i].iov_base,
- iov[i].iov_len,
- timeout);
+ const ssize_t result = this->send (iov[i].iov_base,
+ iov[i].iov_len,
+ timeout);
if (result == -1)
{
@@ -99,7 +99,6 @@ ACE_SSL_SOCK_Stream::sendv (const iovec iov[],
// whether or not any data was sent. If no data was sent,
// then always return -1. Otherwise return bytes_sent.
// This gives the caller an opportunity to keep track of
- // which data was actually sent.
if (bytes_sent > 0)
break;
else
@@ -224,7 +223,7 @@ ACE_SSL_SOCK_Stream::send (size_t n, ...) const
{
ACE_TRACE ("ACE_SSL_SOCK_Stream::send");
- size_t total_tuples = n / 2;
+ const size_t total_tuples = n / 2;
va_list argp;
va_start (argp, n);
@@ -238,8 +237,9 @@ ACE_SSL_SOCK_Stream::send (size_t n, ...) const
// scatter writes over SSL.
for (size_t i = 0; i < total_tuples; ++i)
{
- ssize_t result = this->send (va_arg (argp, char *),
- va_arg (argp, ssize_t));
+ const ssize_t data_len = va_arg (argp, ssize_t);
+ const ssize_t result = this->send (va_arg (argp, char *),
+ data_len);
if (result == -1)
{
@@ -257,7 +257,18 @@ ACE_SSL_SOCK_Stream::send (size_t n, ...) const
}
}
else
- bytes_sent += result;
+ {
+ bytes_sent += result;
+
+ // Do not continue on to the next loop iteration if the
+ // amount of data sent was less than the amount of data
+ // given. This avoids a subtle problem where "holes" in the
+ // data stream would occur if partial sends of a given
+ // buffer in the varargs occured.
+ if (result < data_len)
+ break;
+
+ }
}
va_end (argp);
@@ -270,7 +281,7 @@ ACE_SSL_SOCK_Stream::recv (size_t n, ...) const
{
ACE_TRACE ("ACE_SSL_SOCK_Stream::recv");
- size_t total_tuples = n / 2;
+ const size_t total_tuples = n / 2;
va_list argp;
va_start (argp, n);
@@ -279,8 +290,9 @@ ACE_SSL_SOCK_Stream::recv (size_t n, ...) const
for (size_t i = 0; i < total_tuples; ++i)
{
- ssize_t result = this->recv (va_arg (argp, char *),
- va_arg (argp, ssize_t));
+ const ssize_t data_len = va_arg (argp, ssize_t);
+ const ssize_t result = this->recv (va_arg (argp, char *),
+ data_len);
if (result == -1)
{
@@ -298,7 +310,18 @@ ACE_SSL_SOCK_Stream::recv (size_t n, ...) const
}
}
else
- bytes_recv += result;
+ {
+ bytes_recv += result;
+
+ // Do not continue on to the next loop iteration if the
+ // amount of data received was less than the amount of data
+ // desired. This avoids a subtle problem where "holes" in
+ // the data stream would occur if partial receives of a
+ // given buffer in the varargs occured.
+ if (result < data_len)
+ break;
+
+ }
}
va_end (argp);
@@ -337,16 +360,16 @@ ACE_SSL_SOCK_Stream::send_n (const void *buf,
timeout);
if (n < 0)
- {
+ {
if (errno == EWOULDBLOCK)
{
// If blocked, try again.
- n = 0;
- continue;
+ n = 0;
+ continue;
}
else
return -1;
- }
+ }
else if (n == 0)
break;
}
@@ -384,16 +407,16 @@ ACE_SSL_SOCK_Stream::recv_n (void *buf,
timeout);
if (n < 0)
- {
+ {
if (errno == EWOULDBLOCK)
{
// If blocked, try again.
- n = 0;
- continue;
+ n = 0;
+ continue;
}
else
return -1;
- }
+ }
else if (n == 0)
break;
}
@@ -424,18 +447,18 @@ ACE_SSL_SOCK_Stream::recv_n (void *buf, int len, int flags) const
flags);
if (n < 0)
- {
+ {
if (errno == EWOULDBLOCK)
{
// If blocked, try again.
- n = 0;
- continue;
+ n = 0;
+ continue;
}
else
return -1;
- }
+ }
else if (n == 0)
- break;
+ break;
}
return bytes_transferred;
@@ -463,16 +486,16 @@ ACE_SSL_SOCK_Stream::send_n (const void *buf, int len, int flags) const
flags);
if (n < 0)
- {
+ {
if (errno == EWOULDBLOCK)
{
// If blocked, try again.
- n = 0;
- continue;
+ n = 0;
+ continue;
}
else
return -1;
- }
+ }
else if (n == 0)
break;
}
diff --git a/ace/SSL/SSL_SOCK_Stream.i b/ace/SSL/SSL_SOCK_Stream.i
index 4cbd184837a..ea345cbe921 100644
--- a/ace/SSL/SSL_SOCK_Stream.i
+++ b/ace/SSL/SSL_SOCK_Stream.i
@@ -31,9 +31,9 @@ ACE_SSL_SOCK_Stream::send_i (const void *buf,
if (flags != 0)
ACE_NOTSUP_RETURN (-1);
- int bytes_sent = ::SSL_write (this->ssl_,
- ACE_static_cast (const char *, buf),
- n);
+ const int bytes_sent = ::SSL_write (this->ssl_,
+ ACE_static_cast (const char *, buf),
+ n);
switch (::SSL_get_error (this->ssl_, bytes_sent))
{
@@ -137,7 +137,7 @@ ACE_SSL_SOCK_Stream::recv_i (void *buf,
n);
}
- int status = ::SSL_get_error (this->ssl_, bytes_read);
+ const int status = ::SSL_get_error (this->ssl_, bytes_read);
switch (status)
{
case SSL_ERROR_NONE:
@@ -271,7 +271,7 @@ ACE_SSL_SOCK_Stream::close (void)
// SSL_shutdown() returns 1 on successful shutdown of the SSL
// connection, not 0.
- int status = ::SSL_shutdown (this->ssl_);
+ const int status = ::SSL_shutdown (this->ssl_);
switch (::SSL_get_error (this->ssl_, status))
{