Author: manjula
Date: Tue Jul 17 00:51:30 2007
New Revision: 556838
URL: http://svn.apache.org/viewvc?view=rev&rev=556838
Log:
Adding a ref count to rampart context.
Modified:
webservices/rampart/trunk/c/include/rampart_context.h
webservices/rampart/trunk/c/samples/client/sec_echo/echo.c
webservices/rampart/trunk/c/src/util/rampart_context.c
webservices/rampart/trunk/c/src/util/rampart_engine.c
Modified: webservices/rampart/trunk/c/include/rampart_context.h
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/include/rampart_context.h?view=diff&rev=556838&r1=556837&r2=556838
==============================================================================
--- webservices/rampart/trunk/c/include/rampart_context.h (original)
+++ webservices/rampart/trunk/c/include/rampart_context.h Tue Jul 17 00:51:30
2007
@@ -544,8 +544,11 @@
const axutil_env_t *env,
oxs_key_t *session_key);
-
-
+ AXIS2_EXTERN axis2_status_t AXIS2_CALL
+ rampart_context_increment_ref(
+ rampart_context_t *rampart_context,
+ const axutil_env_t *env);
+
#ifdef __cplusplus
}
Modified: webservices/rampart/trunk/c/samples/client/sec_echo/echo.c
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/samples/client/sec_echo/echo.c?view=diff&rev=556838&r1=556837&r2=556838
==============================================================================
--- webservices/rampart/trunk/c/samples/client/sec_echo/echo.c (original)
+++ webservices/rampart/trunk/c/samples/client/sec_echo/echo.c Tue Jul 17
00:51:30 2007
@@ -163,6 +163,28 @@
/*AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "Stub invoke FAILED: Error
code:"
" %d :: %s", env->error->error_number,
axutil_error_get_message(env->error));*/
+
+ if (axis2_svc_client_get_last_response_has_fault(svc_client, env))
+ {
+ axiom_soap_envelope_t *soap_envelope = NULL;
+ axiom_soap_body_t *soap_body = NULL;
+ axiom_soap_fault_t *soap_fault = NULL;
+
+ printf ("\nResponse has a SOAP fault\n");
+ soap_envelope =
+ axis2_svc_client_get_last_response_soap_envelope(svc_client,
env);
+ if (soap_envelope)
+ soap_body = axiom_soap_envelope_get_body(soap_envelope, env);
+ if (soap_body)
+ soap_fault = axiom_soap_body_get_fault(soap_body, env);
+ if (soap_fault)
+ {
+ printf("\nReturned SOAP fault: %s\n",
+
axiom_node_to_string(axiom_soap_fault_get_base_node(soap_fault,env),
+ env));
+ }
+ return -1;
+ }
printf("echo client invoke FAILED!\n");
}
Modified: webservices/rampart/trunk/c/src/util/rampart_context.c
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/util/rampart_context.c?view=diff&rev=556838&r1=556837&r2=556838
==============================================================================
--- webservices/rampart/trunk/c/src/util/rampart_context.c (original)
+++ webservices/rampart/trunk/c/src/util/rampart_context.c Tue Jul 17 00:51:30
2007
@@ -40,7 +40,7 @@
axis2_char_t *private_key_file;
axis2_char_t *certificate_file;
axis2_char_t *reciever_certificate_file;
-
+ int ref;
/****************************/
@@ -175,6 +175,7 @@
rampart_context->require_ut = AXIS2_FALSE;
rampart_context->require_timestamp = AXIS2_FALSE;
rampart_context->ctx = NULL;
+ rampart_context->ref = 0;
return rampart_context;
}
@@ -187,6 +188,11 @@
if(rampart_context)
{
+ if (--(rampart_context->ref) > 0)
+ {
+ return;
+ }
+
if(rampart_context->secpolicy)
{
rp_secpolicy_free(rampart_context->secpolicy,env);
@@ -2197,3 +2203,13 @@
return rp_layout_get_value(layout,env);
}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+rampart_context_increment_ref(rampart_context_t *rampart_context,
+ const axutil_env_t *env)
+{
+ AXIS2_ENV_CHECK(env, AXIS2_FAILURE);
+ rampart_context->ref++;
+ return AXIS2_SUCCESS;
+}
+
Modified: webservices/rampart/trunk/c/src/util/rampart_engine.c
URL:
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/util/rampart_engine.c?view=diff&rev=556838&r1=556837&r2=556838
==============================================================================
--- webservices/rampart/trunk/c/src/util/rampart_engine.c (original)
+++ webservices/rampart/trunk/c/src/util/rampart_engine.c Tue Jul 17 00:51:30
2007
@@ -92,23 +92,39 @@
return NULL;
}
}
-
- secpolicy = rp_secpolicy_builder_build(env, policy);
+
+ /*secpolicy = rp_secpolicy_builder_build(env, policy);
if(!secpolicy)
{
AXIS2_LOG_INFO(env->log, "[rampart][rampart_engine] Cannot create
security policy from policy.");
return NULL;
}
-
+ */
value = rampart_get_rampart_configuration(env, msg_ctx,
RAMPART_CONFIGURATION);
if(value)
{
rampart_context = (rampart_context_t *)value;
- rampart_context_set_secpolicy(rampart_context, env, secpolicy);
+ rampart_context_increment_ref(rampart_context, env);
+ if(!rampart_context_get_secpolicy(rampart_context, env))
+ {
+ secpolicy = rp_secpolicy_builder_build(env, policy);
+ if(!secpolicy)
+ {
+ AXIS2_LOG_INFO(env->log, "[rampart][rampart_engine] Cannot
create security policy from policy.");
+ return NULL;
+ }
+ rampart_context_set_secpolicy(rampart_context, env, secpolicy);
+ }
}
else
{
rampart_context = rampart_context_create(env);
+ secpolicy = rp_secpolicy_builder_build(env, policy);
+ if(!secpolicy)
+ {
+ AXIS2_LOG_INFO(env->log, "[rampart][rampart_engine] Cannot create
security policy from policy.");
+ return NULL;
+ }
rampart_context_set_secpolicy(rampart_context, env, secpolicy);
status = set_rampart_user_properties(env, rampart_context);