From f50ef01a9279bd00a5021e84ca44b59941ddf4ea Mon Sep 17 00:00:00 2001 From: nandika Date: Tue, 7 Sep 2010 07:07:43 +0000 Subject: ssl memory issue fixed, patch 1237 applied git-svn-id: http://svn.apache.org/repos/asf/axis/axis2/c/core/trunk@993243 13f79535-47bb-0310-9956-ffa450edef68 --- src/core/transport/http/sender/http_client.c | 10 +++++++++- src/core/transport/http/sender/http_sender.c | 14 ++++++++++++-- src/core/transport/http/sender/ssl/ssl_stream.c | 4 ---- src/core/transport/http/sender/ssl/ssl_stream.h | 5 +++++ src/core/transport/http/sender/ssl/ssl_utils.c | 5 ++++- 5 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/core/transport/http/sender/http_client.c b/src/core/transport/http/sender/http_client.c index 3a8deca..7ffc8ec 100644 --- a/src/core/transport/http/sender/http_client.c +++ b/src/core/transport/http/sender/http_client.c @@ -120,7 +120,15 @@ axis2_http_client_free( } if(-1 != http_client->sockfd) { - axutil_network_handler_close_socket(env, http_client->sockfd); +#ifdef AXIS2_SSL_ENABLED + if(http_client->data_stream->stream_type == AXIS2_STREAM_SOCKET) + { + axutil_network_handler_close_socket(env, http_client->sockfd); + // ssl streams of type AXIS2_STREAM_BASIC will be handled by SSL_shutdown(); + } +#else + axutil_network_handler_close_socket(env, http_client->sockfd); +#endif http_client->sockfd = -1; } diff --git a/src/core/transport/http/sender/http_sender.c b/src/core/transport/http/sender/http_sender.c index 093cfec..f899a9e 100644 --- a/src/core/transport/http/sender/http_sender.c +++ b/src/core/transport/http/sender/http_sender.c @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - +#include #include #include #include @@ -36,6 +36,7 @@ #include #include #include +#include "ssl/ssl_stream.h" #ifdef AXIS2_LIBCURL_ENABLED #include "libcurl/axis2_libcurl.h" @@ -43,6 +44,8 @@ #define CLIENT_NONCE_LENGTH 8 #endif + + struct axis2_http_sender { axis2_char_t *http_version; @@ -1594,7 +1597,14 @@ axis2_http_sender_process_response( response, env)); property = axutil_property_create(env); axutil_property_set_scope(property, env, AXIS2_SCOPE_REQUEST); - axutil_property_set_free_func(property, env, axutil_stream_free_void_arg); +#ifdef AXIS2_SSL_ENABLED + if(in_stream->stream_type == AXIS2_STREAM_SOCKET) + axutil_property_set_free_func(property, env, axutil_stream_free_void_arg); + else /** SSL Streams are AXIS2_STREAM_BASIC */ + axutil_property_set_free_func(property, env, axis2_ssl_stream_free); +#else + axutil_property_set_free_func(property, env, axutil_stream_free_void_arg); +#endif axutil_property_set_value(property, env, in_stream); axis2_msg_ctx_set_property(msg_ctx, env, AXIS2_TRANSPORT_IN, property); AXIS2_LOG_TRACE(env->log, AXIS2_LOG_SI, "Exit:axis2_http_sender_process_response"); diff --git a/src/core/transport/http/sender/ssl/ssl_stream.c b/src/core/transport/http/sender/ssl/ssl_stream.c index 9360f1a..f5aec10 100644 --- a/src/core/transport/http/sender/ssl/ssl_stream.c +++ b/src/core/transport/http/sender/ssl/ssl_stream.c @@ -38,10 +38,6 @@ struct ssl_stream_impl #define AXIS2_INTF_TO_IMPL(stream) ((ssl_stream_impl_t *)(stream)) -void AXIS2_CALL axis2_ssl_stream_free( - axutil_stream_t * stream, - const axutil_env_t * env); - axutil_stream_type_t AXIS2_CALL axis2_ssl_stream_get_type( axutil_stream_t * stream, const axutil_env_t * env); diff --git a/src/core/transport/http/sender/ssl/ssl_stream.h b/src/core/transport/http/sender/ssl/ssl_stream.h index 396da5d..696fc47 100644 --- a/src/core/transport/http/sender/ssl/ssl_stream.h +++ b/src/core/transport/http/sender/ssl/ssl_stream.h @@ -41,6 +41,11 @@ extern "C" axis2_char_t * key_file, axis2_char_t * ssl_pp); + void AXIS2_CALL + axis2_ssl_stream_free( + axutil_stream_t *stream, + const axutil_env_t *env); + /** @} */ #ifdef __cplusplus diff --git a/src/core/transport/http/sender/ssl/ssl_utils.c b/src/core/transport/http/sender/ssl/ssl_utils.c index 01fe993..66cb9e7 100644 --- a/src/core/transport/http/sender/ssl/ssl_utils.c +++ b/src/core/transport/http/sender/ssl/ssl_utils.c @@ -215,7 +215,10 @@ axis2_ssl_utils_cleanup_ssl( if (ssl) { - SSL_shutdown(ssl); + if(SSL_shutdown(ssl)==0) + { + SSL_free(ssl); + } } if (ctx) { -- cgit v1.1-32-gdbae