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);


Reply via email to