diff options
author | nandika | 2010-09-07 07:07:43 +0000 |
---|---|---|
committer | nandika | 2010-09-07 07:07:43 +0000 |
commit | f50ef01a9279bd00a5021e84ca44b59941ddf4ea (patch) | |
tree | ef5c445cf736716f791507f72df3b8785934bbae /src/core | |
parent | ec135f9a64d6066a4f7870ec308de779a0da9256 (diff) | |
download | axis2c-f50ef01a9279bd00a5021e84ca44b59941ddf4ea.tar.gz axis2c-f50ef01a9279bd00a5021e84ca44b59941ddf4ea.tar.bz2 |
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
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/transport/http/sender/http_client.c | 10 | ||||
-rw-r--r-- | src/core/transport/http/sender/http_sender.c | 14 | ||||
-rw-r--r-- | src/core/transport/http/sender/ssl/ssl_stream.c | 4 | ||||
-rw-r--r-- | src/core/transport/http/sender/ssl/ssl_stream.h | 5 | ||||
-rw-r--r-- | 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 <axutil_stream.h> #include <axis2_http_sender.h> #include <axutil_string.h> #include <axis2_http_transport.h> @@ -36,6 +36,7 @@ #include <axis2_util.h> #include <axiom_soap.h> #include <axutil_version.h> +#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) { |