Author: shankar
Date: Wed Jun 25 03:24:48 2008
New Revision: 671499

URL: http://svn.apache.org/viewvc?rev=671499&view=rev
Log:
serialise and deserialize method to security context token

Modified:
    webservices/rampart/trunk/c/include/secconv_security_context_token.h
    webservices/rampart/trunk/c/src/secconv/security_context_token.c

Modified: webservices/rampart/trunk/c/include/secconv_security_context_token.h
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/include/secconv_security_context_token.h?rev=671499&r1=671498&r2=671499&view=diff
==============================================================================
--- webservices/rampart/trunk/c/include/secconv_security_context_token.h 
(original)
+++ webservices/rampart/trunk/c/include/secconv_security_context_token.h Wed 
Jun 25 03:24:48 2008
@@ -127,6 +127,17 @@
     security_context_token_increment_ref(
         security_context_token_t *sct,
         const axutil_env_t * env);
+
+    AXIS2_EXTERN axis2_char_t * AXIS2_CALL
+    security_context_token_serialize(
+        security_context_token_t *sct, 
+        const axutil_env_t *env);
+
+    AXIS2_EXTERN axis2_status_t AXIS2_CALL
+    security_context_token_deserialize(
+        security_context_token_t *sct, 
+        const axutil_env_t *env, 
+        axis2_char_t *serialised_node);
    
 #ifdef __cplusplus
 }

Modified: webservices/rampart/trunk/c/src/secconv/security_context_token.c
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/secconv/security_context_token.c?rev=671499&r1=671498&r2=671499&view=diff
==============================================================================
--- webservices/rampart/trunk/c/src/secconv/security_context_token.c (original)
+++ webservices/rampart/trunk/c/src/secconv/security_context_token.c Wed Jun 25 
03:24:48 2008
@@ -19,6 +19,7 @@
 #include <oxs_buffer.h>
 #include <oxs_tokens.h>
 #include <trust_constants.h>
+#include <trust_util.h>
 
 struct security_context_token_t
 {
@@ -424,5 +425,197 @@
     return AXIS2_SUCCESS;
 }
 
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL
+security_context_token_serialize(
+    security_context_token_t *sct, 
+    const axutil_env_t *env)
+{
+    axiom_node_t *sct_node = NULL;
+    axiom_node_t *proof_node = NULL;
+    axiom_node_t *attached_ref_node = NULL;
+    axiom_node_t *unattached_ref_node = NULL;
+    axiom_node_t *parent_attached_ref_node = NULL;
+    axiom_node_t *parent_unattached_ref_node = NULL;
+    axis2_char_t *serialised_node = NULL;
+
+    sct_node = security_context_token_get_token(sct, env);
+    if(!sct_node)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+            "[rampart]Cannot serialise security context token.");
+        return NULL;
+    }
+
+    proof_node = security_context_token_get_requested_proof_token(sct, env);
+    attached_ref_node = security_context_token_get_attached_reference(sct, 
env);
+    unattached_ref_node = security_context_token_get_unattached_reference(sct, 
env);
+    
+    if(!proof_node)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+            "[rampart]Cannot serialise proof token of security context 
token.");
+        axiom_node_free_tree(sct_node, env);
+        return NULL;
+    }
+    axiom_node_add_child(sct_node, env, proof_node);
+
+    /* attached reference is optional */
+    if(attached_ref_node)
+    {
+        parent_attached_ref_node = 
trust_util_create_req_attached_reference_element(
+            env, TRUST_WST_XMLNS, sct_node);
+        if(!parent_attached_ref_node)
+        {
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+                "[rampart]Cannot serialise attached reference of security 
context token.");
+            axiom_node_free_tree(sct_node, env);
+            return NULL;
+        }
+        axiom_node_add_child(parent_attached_ref_node, env, 
attached_ref_node);    
+    }
+
+    /* unattached reference is optional */
+    if(unattached_ref_node)
+    {
+        parent_unattached_ref_node = 
trust_util_create_req_unattached_reference_element(
+            env, TRUST_WST_XMLNS, sct_node);
+        if(!parent_unattached_ref_node)
+        {
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+                "[rampart]Cannot serialise unattached reference of security 
context token.");
+            axiom_node_free_tree(sct_node, env);
+            return NULL;
+        }
+        axiom_node_add_child(parent_unattached_ref_node, env, 
unattached_ref_node);
+    }
+
+    serialised_node = axiom_node_sub_tree_to_string(sct_node, env);
+    axiom_node_free_tree(sct_node, env);
+
+    return serialised_node;
+}
+
+AXIS2_EXTERN axis2_status_t AXIS2_CALL
+security_context_token_deserialize(
+    security_context_token_t *sct, 
+    const axutil_env_t *env, 
+    axis2_char_t *serialised_node)
+{
+    axiom_xml_reader_t *reader = NULL;
+    axiom_document_t *doc = NULL;
+    axiom_stax_builder_t *builder = NULL;
+    axiom_node_t *sct_node = NULL;
+    axiom_node_t *proof_node = NULL;
+    axiom_node_t *attached_ref_node = NULL;
+    axiom_node_t *unattached_ref_node = NULL;
+    axiom_node_t *parent_attached_ref_node = NULL;
+    axiom_node_t *parent_unattached_ref_node = NULL;
+    axiom_node_t *parent_proof_node = NULL;
+
+    reader = axiom_xml_reader_create_for_memory(
+        env, serialised_node, axutil_strlen(serialised_node), NULL, 
AXIS2_XML_PARSER_TYPE_BUFFER);
+
+    if(!reader)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+            "[rampart]Cannot create xml reader. Security context token 
deserialize failed.");
+        return AXIS2_FAILURE;
+    }
+
+    builder = axiom_stax_builder_create(env, reader);
+    doc = axiom_document_create(env, NULL, builder);
+    sct_node = axiom_document_build_all(doc, env);
+    if(!sct_node)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+            "[rampart]Security context token deserialize failed.");
+        return AXIS2_FAILURE;
+    }
+    
+    parent_proof_node = oxs_axiom_get_node_by_local_name(
+        env, sct_node, TRUST_REQUESTED_PROOF_TOKEN);
+    if(!parent_proof_node)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+            "[rampart]Proof not could not be found. Security context token 
deserialize failed.");
+        return AXIS2_FAILURE;
+    }
+
+    axiom_node_detach(parent_proof_node, env);
+    proof_node = oxs_axiom_get_node_by_local_name(env, parent_proof_node, 
TRUST_BINARY_SECRET);
+    if(!proof_node)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+            "[rampart]Proof not could not be found. Security context token 
deserialize failed.");
+        return AXIS2_FAILURE;
+    }
+
+    if(security_context_token_set_requested_proof_token(sct, env, proof_node) 
!= AXIS2_SUCCESS)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+            "[rampart]Deserializing proof token node failed. " 
+            "Security context token deserialize failed.");
+        return AXIS2_FAILURE;
+    }
+    
+    parent_attached_ref_node = oxs_axiom_get_node_by_local_name(
+        env, sct_node, TRUST_REQUESTED_ATTACHED_REFERENCE);
+    if(parent_attached_ref_node)
+    {
+        axiom_node_detach(parent_attached_ref_node, env);
+        attached_ref_node = oxs_axiom_get_node_by_local_name(
+            env, parent_attached_ref_node, OXS_NODE_SECURITY_TOKEN_REFRENCE);
+        if(!attached_ref_node)
+        {
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+                "[rampart]Attached reference node could not be found. " 
+                "Security context token deserialize failed.");
+            return AXIS2_FAILURE;
+        }
+        if (security_context_token_set_attached_reference(sct, env, 
attached_ref_node)
+            != AXIS2_SUCCESS)
+        {
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+                "[rampart]Deserializing attached reference node failed. " 
+                "Security context token deserialize failed.");
+            return AXIS2_FAILURE;
+        }
+    }
+    
+    parent_unattached_ref_node = oxs_axiom_get_node_by_local_name(
+        env, sct_node, TRUST_REQUESTED_UNATTACHED_REFERENCE);
+    if(parent_unattached_ref_node)
+    {
+        axiom_node_detach(parent_unattached_ref_node, env);
+        unattached_ref_node = oxs_axiom_get_node_by_local_name(
+            env, parent_unattached_ref_node, OXS_NODE_SECURITY_TOKEN_REFRENCE);
+        if(!unattached_ref_node)
+        {
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+                "[rampart]Unattached reference node could not be found. " 
+                "Security context token deserialize failed.");
+            return AXIS2_FAILURE;
+        }
+        if (security_context_token_set_unattached_reference(sct, env, 
unattached_ref_node)
+            != AXIS2_SUCCESS)
+        {
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+                "[rampart]Deserializing unattached reference node failed. " 
+                "Security context token deserialize failed.");
+            return AXIS2_FAILURE;
+        }
+    }
+
+    if(security_context_token_set_token(sct, env, sct_node) != AXIS2_SUCCESS)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, 
+            "[rampart]Deserializing security context token failed." );
+        return AXIS2_FAILURE;
+    }
+    
+    axiom_xml_reader_xml_free(reader, env, NULL);
+
+    return AXIS2_SUCCESS;
+}
 
 


Reply via email to