summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar nandika2010-09-07 07:07:43 +0000
committerGravatar nandika2010-09-07 07:07:43 +0000
commitf50ef01a9279bd00a5021e84ca44b59941ddf4ea (patch)
treeef5c445cf736716f791507f72df3b8785934bbae
parentec135f9a64d6066a4f7870ec308de779a0da9256 (diff)
downloadaxis2c-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
-rw-r--r--src/core/transport/http/sender/http_client.c10
-rw-r--r--src/core/transport/http/sender/http_sender.c14
-rw-r--r--src/core/transport/http/sender/ssl/ssl_stream.c4
-rw-r--r--src/core/transport/http/sender/ssl/ssl_stream.h5
-rw-r--r--src/core/transport/http/sender/ssl/ssl_utils.c5
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)
{