Added: webservices/rampart/trunk/c/src/trust/util.c
URL: 
http://svn.apache.org/viewvc/webservices/rampart/trunk/c/src/trust/util.c?rev=595202&view=auto
==============================================================================
--- webservices/rampart/trunk/c/src/trust/util.c (added)
+++ webservices/rampart/trunk/c/src/trust/util.c Wed Nov 14 20:35:52 2007
@@ -0,0 +1,1047 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <trust_util.h>
+
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+trust_util_create_rst_element(
+    const axutil_env_t * env,
+    int wst_version,
+    axis2_char_t * context)
+{
+    axis2_char_t *wst_ns_uri = NULL;
+    axiom_node_t *rst_node = NULL;
+    axiom_element_t *rst_ele = NULL;
+    axiom_namespace_t *wst_ns = NULL;
+    axiom_attribute_t *context_attr = NULL;
+    axis2_status_t status = AXIS2_SUCCESS;
+
+    wst_ns_uri = trust_util_get_wst_ns(env, wst_version);
+
+    wst_ns = axiom_namespace_create(env, wst_ns_uri, TRUST_WST);
+    rst_ele = axiom_element_create(env, NULL, TRUST_REQUEST_SECURITY_TOKEN, 
wst_ns, &rst_node);
+
+    if (!rst_ele)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[trust] RST Element creation 
failed.");
+        return NULL;
+    }
+
+    if (context)
+    {
+        context_attr = axiom_attribute_create(env, TRUST_RST_CONTEXT, context, 
wst_ns);
+        status = axiom_element_add_attribute(rst_ele, env, context_attr, 
rst_node);
+
+        if (status == AXIS2_FAILURE)
+        {
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                            "[trust] RST Element add attribute function 
failed.");
+            return NULL;
+        }
+    }
+
+    return rst_node;
+}
+
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+trust_util_create_rstr_element(
+    const axutil_env_t * env,
+    int wst_version,
+    axis2_char_t * context)
+{
+    axis2_char_t *wst_ns_uri = NULL;
+    axiom_node_t *rstr_node = NULL;
+    axiom_element_t *rstr_ele = NULL;
+    axiom_namespace_t *wst_ns = NULL;
+    axiom_attribute_t *context_attr = NULL;
+    axis2_status_t status = AXIS2_SUCCESS;
+
+    wst_ns_uri = trust_util_get_wst_ns(env, wst_version);
+
+    wst_ns = axiom_namespace_create(env, wst_ns_uri, TRUST_WST);
+    rstr_ele =
+        axiom_element_create(env, NULL, TRUST_REQUEST_SECURITY_TOKEN_RESPONSE, 
wst_ns, &rstr_node);
+
+    if (!rstr_ele)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[trust] RSTR Element creation 
failed.");
+        return NULL;
+    }
+
+    if (context)
+    {
+        context_attr = axiom_attribute_create(env, TRUST_RST_CONTEXT, context, 
wst_ns);
+        status = axiom_element_add_attribute(rstr_ele, env, context_attr, 
rstr_node);
+
+        if (status == AXIS2_FAILURE)
+        {
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                            "[trust] RSTR Element add attribute function 
failed.");
+            return NULL;
+        }
+    }
+
+    return rstr_node;
+}
+
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+trust_util_create_rstr_collection_element(
+    const axutil_env_t * env,
+    int wst_version)
+{
+    axis2_char_t *wst_ns_uri = NULL;
+    axiom_node_t *rstrc_node = NULL;
+    axiom_element_t *rstrc_ele = NULL;
+    axiom_namespace_t *wst_ns = NULL;
+
+    wst_ns_uri = trust_util_get_wst_ns(env, wst_version);
+
+    wst_ns = axiom_namespace_create(env, wst_ns_uri, TRUST_WST);
+    rstrc_ele =
+        axiom_element_create(env, NULL, 
TRUST_REQUEST_SECURITY_TOKEN_RESPONSE_COLLECTION, wst_ns,
+                             &rstrc_node);
+
+    if (!rstrc_ele)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[trust] RSTRC Element 
creation failed.");
+        return NULL;
+    }
+
+    return rstrc_node;
+}
+
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+trust_util_create_request_type_element(
+    const axutil_env_t * env,
+    int wst_version,
+    axiom_node_t * parent_node,
+    axis2_char_t * request_type)
+{
+    axis2_char_t *wst_ns_uri = NULL;
+    axis2_char_t *req_type_str = NULL;
+    axiom_node_t *request_type_node = NULL;
+    axiom_element_t *request_type_ele = NULL;
+    axiom_namespace_t *wst_ns = NULL;
+    axis2_status_t status = AXIS2_SUCCESS;
+
+    AXIS2_ENV_CHECK(env, NULL);
+
+    wst_ns_uri = trust_util_get_wst_ns(env, wst_version);
+
+    wst_ns = axiom_namespace_create(env, wst_ns_uri, TRUST_WST);
+    request_type_ele =
+        axiom_element_create(env, parent_node, TRUST_REQUEST_TYPE, wst_ns, 
&request_type_node);
+
+    if (!request_type_ele)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[trust] RequestType Element 
creation failed.");
+        return NULL;
+    }
+
+    if (0 == axutil_strcmp(request_type, TRUST_REQ_TYPE_ISSUE) ||
+        0 == axutil_strcmp(request_type, TRUST_REQ_TYPE_CANCEL) ||
+        0 == axutil_strcmp(request_type, TRUST_REQ_TYPE_RENEW) ||
+        0 == axutil_strcmp(request_type, TRUST_REQ_TYPE_VALIDATE))
+    {
+        req_type_str = axutil_stracat(env, wst_ns_uri, request_type);
+        status = axiom_element_set_text(request_type_ele, env, req_type_str, 
request_type_node);
+    }
+    else
+    {
+        status = axiom_element_set_text(request_type_ele, env, request_type, 
request_type_node);
+    }
+
+    if (status == AXIS2_FAILURE)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                        "[trust] RequestType Element's setting text function 
failed.");
+        return NULL;
+    }
+
+    return request_type_node;
+}
+
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+trust_util_create_token_type_element(
+    const axutil_env_t * env,
+    int wst_version,
+    axiom_node_t * parent_node,
+    axis2_char_t * token_type)
+{
+    axis2_char_t *wst_ns_uri = NULL;
+    axiom_node_t *token_type_node = NULL;
+    axiom_element_t *token_type_ele = NULL;
+    axiom_namespace_t *wst_ns = NULL;
+    axis2_status_t status = AXIS2_SUCCESS;
+
+    AXIS2_ENV_CHECK(env, NULL);
+
+    wst_ns_uri = trust_util_get_wst_ns(env, wst_version);
+
+    wst_ns = axiom_namespace_create(env, wst_ns_uri, TRUST_WST);
+    token_type_ele =
+        axiom_element_create(env, parent_node, TRUST_TOKEN_TYPE, wst_ns, 
&token_type_node);
+
+    if (!token_type_ele)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[trust] TokenType Element 
creation failed.");
+        return NULL;
+    }
+
+    status = axiom_element_set_text(token_type_ele, env, token_type, 
token_type_node);
+    if (status == AXIS2_FAILURE)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                        "[trust] TokenType Element's setting text function 
failed.");
+        return NULL;
+    }
+
+    return token_type_node;
+}
+
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+trust_util_create_applies_to_element(
+    const axutil_env_t * env,
+    axiom_node_t * parent_node,
+    const axis2_char_t * address,
+    const axis2_char_t * addressing_ns)
+{
+    axiom_node_t *applies_to_node = NULL;
+    axiom_node_t *epr_node = NULL;
+    axiom_node_t *addr_node = NULL;
+    axiom_element_t *applies_to_ele = NULL;
+    axiom_element_t *epr_ele = NULL;
+    axiom_element_t *addr_ele = NULL;
+    axiom_namespace_t *wsp_ns = NULL;
+    axiom_namespace_t *wsa_ns = NULL;
+    axis2_status_t status = AXIS2_SUCCESS;
+
+    wsp_ns = axiom_namespace_create(env, TRUST_WSP_XMLNS, TRUST_WSP);
+    wsa_ns = axiom_namespace_create(env, addressing_ns, TRUST_WSA);
+
+    applies_to_ele =
+        axiom_element_create(env, parent_node, TRUST_APPLIES_TO, wsp_ns, 
&applies_to_node);
+    if (!applies_to_ele)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[trust] AppliesTo Element 
creation failed!");
+        return NULL;
+    }
+
+    epr_ele = axiom_element_create(env, applies_to_node, TRUST_EPR, wsa_ns, 
&epr_node);
+    if (!epr_ele)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                        "[trust] EndpointReference Element creation failed!");
+        return NULL;
+    }
+
+    addr_ele = axiom_element_create(env, epr_node, TRUST_EPR_ADDRESS, wsa_ns, 
&addr_node);
+    if (!addr_ele)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[trust] Address Element 
creation failed!");
+        return NULL;
+    }
+
+    status = axiom_element_set_text(addr_ele, env, address, addr_node);
+    if (status == AXIS2_FAILURE)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                        "[trust] Address Element's setting text function 
failed.");
+        return NULL;
+    }
+
+    return applies_to_node;
+}
+
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+trust_util_create_claims_element(
+    const axutil_env_t * env,
+    int wst_version,
+    axiom_node_t * parent_node,
+    axiom_node_t * claims_content,
+    axis2_char_t * dialect_uri)
+{
+    axis2_char_t *wst_ns_uri = NULL;
+    axiom_node_t *claims_node = NULL;
+    axiom_element_t *claims_ele = NULL;
+    axiom_namespace_t *wst_ns = NULL;
+    axiom_attribute_t *dialect_attr = NULL;
+    axis2_status_t status = AXIS2_SUCCESS;
+
+    wst_ns_uri = trust_util_get_wst_ns(env, wst_version);
+    wst_ns = axiom_namespace_create(env, wst_ns_uri, TRUST_WST);
+
+    claims_ele = axiom_element_create(env, parent_node, TRUST_CLAIMS, wst_ns, 
&claims_node);
+    if (!claims_ele)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[trust] Claims Element 
creation failed!");
+        return NULL;
+    }
+    if (claims_content)
+    {
+        status = axiom_node_add_child(claims_node, env, claims_content);
+        if (status == AXIS2_FAILURE)
+        {
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[trust] Claims element 
adding child failed.");
+            return NULL;
+        }
+    }
+
+    if (dialect_uri)
+    {
+        dialect_attr = axiom_attribute_create(env, TRUST_CLAIMS_DIALECT, 
dialect_uri, wst_ns);
+        if (dialect_attr)
+        {
+            status = axiom_element_add_attribute(claims_ele, env, 
dialect_attr, claims_node);
+            if (status == AXIS2_FAILURE)
+            {
+                AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                                "[trust] Claims element adding attribute 
failed.");
+                return NULL;
+            }
+        }
+        else
+        {
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[trust] Dialect attribute 
creation failed.");
+            return NULL;
+        }
+
+    }
+    else
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[trust] Dialect uri null.");
+        return NULL;
+    }
+
+    return claims_node;
+}
+
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+trust_util_create_requested_security_token_element(
+    const axutil_env_t * env,
+    int wst_version,
+    axiom_node_t * parent_node)
+{
+    axis2_char_t *wst_ns_uri = NULL;
+    axiom_node_t *requested_token_node = NULL;
+    axiom_element_t *requested_token_ele = NULL;
+    axiom_namespace_t *wst_ns = NULL;
+
+    wst_ns_uri = trust_util_get_wst_ns(env, wst_version);
+    wst_ns = axiom_namespace_create(env, wst_ns_uri, TRUST_WST);
+
+    requested_token_ele =
+        axiom_element_create(env, parent_node, TRUST_REQUESTED_SECURITY_TOKEN, 
wst_ns,
+                             &requested_token_node);
+    if (!requested_token_ele)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                        "[trust] RequestedSecurityToken Element creation 
failed!");
+        return NULL;
+    }
+
+    return requested_token_node;
+}
+
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+trust_util_create_requsted_proof_token_element(
+    const axutil_env_t * env,
+    int wst_version,
+    axiom_node_t * parent_node)
+{
+    axis2_char_t *wst_ns_uri = NULL;
+    axiom_namespace_t *wst_ns = NULL;
+    axiom_node_t *requested_prooft_node = NULL;
+    axiom_element_t *requested_prooft_ele = NULL;
+
+    wst_ns_uri = trust_util_get_wst_ns(env, wst_version);
+    wst_ns = axiom_namespace_create(env, wst_ns_uri, TRUST_WST);
+
+    requested_prooft_ele =
+        axiom_element_create(env, parent_node, TRUST_REQUESTED_PROOF_TOKEN, 
wst_ns,
+                             &requested_prooft_node);
+    if (!requested_prooft_ele)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                        "[trust] RequestedProofToken Element creation 
failed!");
+        return NULL;
+    }
+
+    return requested_prooft_node;
+}
+
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+trust_util_create_entropy_element(
+    const axutil_env_t * env,
+    int wst_version,
+    axiom_node_t * parent_node)
+{
+    axis2_char_t *wst_ns_uri = NULL;
+    axiom_namespace_t *wst_ns = NULL;
+    axiom_node_t *entropy_node = NULL;
+    axiom_element_t *entropy_ele = NULL;
+
+    wst_ns_uri = trust_util_get_wst_ns(env, wst_version);
+    wst_ns = axiom_namespace_create(env, wst_ns_uri, TRUST_WST);
+
+    entropy_ele = axiom_element_create(env, parent_node, TRUST_ENTROPY, 
wst_ns, &entropy_node);
+    if (!entropy_ele)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[trust] Entropy Element 
creation failed!");
+        return NULL;
+    }
+
+    return entropy_node;
+}
+
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+trust_util_computed_key_element(
+    const axutil_env_t * env,
+    int wst_version,
+    axiom_node_t * parent_node)
+{
+    axis2_char_t *wst_ns_uri = NULL;
+    axiom_namespace_t *wst_ns = NULL;
+    axiom_node_t *computed_key_node = NULL;
+    axiom_element_t *computed_key_ele = NULL;
+
+    wst_ns_uri = trust_util_get_wst_ns(env, wst_version);
+    wst_ns = axiom_namespace_create(env, wst_ns_uri, TRUST_WST);
+
+    computed_key_ele =
+        axiom_element_create(env, parent_node, TRUST_COMPUTED_KEY, wst_ns, 
&computed_key_node);
+    if (!computed_key_ele)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[trust] ComputedKey Element 
creation failed!");
+        return NULL;
+    }
+
+    return computed_key_node;
+}
+
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+trust_util_create_binary_secret_element(
+    const axutil_env_t * env,
+    int wst_version,
+    axiom_node_t * parent_node,
+    axis2_char_t * enc_secret,
+    axis2_char_t * bin_sec_type)
+{
+    axis2_char_t *wst_ns_uri = NULL;
+    axiom_node_t *bin_sec_node = NULL;
+    axiom_element_t *bin_sec_ele = NULL;
+    axiom_attribute_t *bin_sec_type_attr = NULL;
+    axiom_namespace_t *wst_ns = NULL;
+    axis2_char_t *type_str = NULL;
+    axis2_status_t status = AXIS2_SUCCESS;
+
+    wst_ns_uri = trust_util_get_wst_ns(env, wst_version);
+    wst_ns = axiom_namespace_create(env, wst_ns_uri, TRUST_WST);
+
+    bin_sec_ele =
+        axiom_element_create(env, parent_node, TRUST_BINARY_SECRET, wst_ns, 
&bin_sec_node);
+    if (!bin_sec_ele)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[trust] BinarySecret Element 
creation failed!");
+        return NULL;
+    }
+
+    if (enc_secret)
+    {
+        /* Setting up the encoeded secret */
+        status = axiom_element_set_text(bin_sec_ele, env, enc_secret, 
bin_sec_node);
+        if (status == AXIS2_FAILURE)
+        {
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                            "[trust] BinarySecret Element's setting text 
failed.");
+            return NULL;
+        }
+    }
+
+    if (bin_sec_type)
+    {
+        /* Setting up BS-Type attribute */
+        type_str = axutil_stracat(env, wst_ns_uri, bin_sec_type);
+        bin_sec_type_attr = axiom_attribute_create(env, ATTR_TYPE, type_str, 
NULL);
+        if (!bin_sec_type_attr)
+        {
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                            "[trust] BinarySecret Element's Type attribute 
creation failed.");
+            return NULL;
+        }
+
+        status = axiom_element_add_attribute(bin_sec_ele, env, 
bin_sec_type_attr, bin_sec_node);
+        if (status == AXIS2_FAILURE)
+        {
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                            "[trust] BinarySecret Element's attribute adding 
failed.");
+            return NULL;
+        }
+    }
+
+    return bin_sec_node;
+}
+
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+trust_util_create_computed_key_algo_element(
+    const axutil_env_t * env,
+    int wst_version,
+    axiom_node_t * parent_node,
+    axis2_char_t * algo_id)
+{
+    axis2_char_t *wst_ns_uri = NULL;
+    axiom_node_t *comp_key_algo_node = NULL;
+    axiom_element_t *comp_key_algo_ele = NULL;
+    axiom_namespace_t *wst_ns = NULL;
+    /*axis2_char_t *algo = NULL;*/
+    axis2_status_t status = AXIS2_SUCCESS;
+
+    wst_ns_uri = trust_util_get_wst_ns(env, wst_version);
+    wst_ns = axiom_namespace_create(env, wst_ns_uri, TRUST_WST);
+
+    if (algo_id)
+    {
+        comp_key_algo_ele =
+            axiom_element_create(env, parent_node, TRUST_COMPUTED_KEY_ALGO, 
wst_ns,
+                                 &comp_key_algo_node);
+        if (!comp_key_algo_ele)
+        {
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                            "[trust] ComputedKeyAlgorithm element creation 
failed.");
+            return NULL;
+        }
+
+        /*algo = axutil_strcat(env, wst_ns_uri, "/" ,algo_id);*/
+        status = axiom_element_set_text(comp_key_algo_ele, env, algo_id, 
comp_key_algo_node);
+        if (status == AXIS2_FAILURE)
+        {
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                            "[trust] ComputedKeyAlgorithm Element's setting 
text failed.");
+            return NULL;
+        }
+
+    }
+
+    return comp_key_algo_node;
+}
+
+/* KEY SIZE Element*/
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+trust_util_create_key_size_element(
+    const axutil_env_t * env,
+    int wst_version,
+    axiom_node_t * parent_node,
+    axis2_char_t * key_size)
+{
+    axis2_char_t *wst_ns_uri = NULL;
+    axiom_node_t *key_size_node = NULL;
+    axiom_element_t *key_size_ele = NULL;
+    axiom_namespace_t *wst_ns = NULL;
+    axis2_status_t status = AXIS2_SUCCESS;
+
+    wst_ns_uri = trust_util_get_wst_ns(env, wst_version);
+    wst_ns = axiom_namespace_create(env, wst_ns_uri, TRUST_WST);
+
+    key_size_ele = axiom_element_create(env, parent_node, TRUST_KEY_SIZE, 
wst_ns, &key_size_node);
+    if (!key_size_ele)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[trust] KeySize element 
creation failed.");
+        return NULL;
+    }
+
+    if (key_size)
+    {
+        status = axiom_element_set_text(key_size_ele, env, key_size, 
key_size_node);
+        if (status == AXIS2_FAILURE)
+        {
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                            "[trust] KeySize Element's setting text failed.");
+            return NULL;
+        }
+    }
+
+    return key_size_node;
+}
+
+/* KEY TYPE Element*/
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+trust_util_create_key_type_element(
+    const axutil_env_t * env,
+    int wst_version,
+    axiom_node_t * parent_node,
+    axis2_char_t * key_type)
+{
+    axis2_char_t *wst_ns_uri = NULL;
+    axiom_node_t *key_type_node = NULL;
+    axiom_element_t *key_type_ele = NULL;
+    axiom_namespace_t *wst_ns = NULL;
+    axis2_char_t *type = NULL;
+    axis2_status_t status = AXIS2_SUCCESS;
+
+    wst_ns_uri = trust_util_get_wst_ns(env, wst_version);
+    wst_ns = axiom_namespace_create(env, wst_ns_uri, TRUST_WST);
+
+    key_type_ele = axiom_element_create(env, parent_node, TRUST_KEY_TYPE, 
wst_ns, &key_type_node);
+    if (!key_type_ele)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[trust] KeyType element 
creation failed.");
+        return NULL;
+    }
+
+    if (key_type)
+    {
+        if (0 == axutil_strcmp(key_type, TRUST_KEY_TYPE_BEARER) ||
+            0 == axutil_strcmp(key_type, TRUST_KEY_TYPE_PUBLIC_KEY) ||
+            0 == axutil_strcmp(key_type, TRUST_KEY_TYPE_BEARER))
+        {
+            type = axutil_stracat(env, wst_ns_uri, key_type);
+            status = axiom_element_set_text(key_type_ele, env, type, 
key_type_node);
+            if (status == AXIS2_FAILURE)
+            {
+                AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                                "[trust] KeyType Element's setting text 
failed.");
+                return NULL;
+            }
+        }
+    }
+
+    return key_type_node;
+}
+
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+trust_util_create_life_time_element(
+    const axutil_env_t * env,
+    axiom_node_t * parent_node,
+    int wst_version,
+    int ttl)
+{
+    axis2_char_t *wst_ns_uri = NULL;
+    axiom_node_t *life_time_node = NULL;
+    axiom_node_t *created_node = NULL;
+    axiom_node_t *expires_node = NULL;
+    axiom_element_t *life_time_ele = NULL;
+    axiom_element_t *created_ele = NULL;
+    axiom_element_t *expires_ele = NULL;
+    axis2_char_t *created_val_str = NULL;
+    axis2_char_t *expires_val_str = NULL;
+    axiom_namespace_t *wsu_ns = NULL;
+    axiom_namespace_t *wst_ns = NULL;
+    axutil_date_time_t *dt = NULL;
+    axis2_status_t status = AXIS2_SUCCESS;
+
+    wst_ns_uri = trust_util_get_wst_ns(env, wst_version);
+    wst_ns = axiom_namespace_create(env, wst_ns_uri, TRUST_WSU);
+    wsu_ns = axiom_namespace_create(env, TRUST_WSU_XMLNS, TRUST_WSU);
+
+    life_time_ele =
+        axiom_element_create(env, parent_node, TRUST_LIFE_TIME, wst_ns, 
&life_time_node);
+
+    if (life_time_ele)
+    {
+        created_ele =
+            axiom_element_create(env, life_time_node, TRUST_LIFE_TIME_CREATED, 
wsu_ns,
+                                 &created_node);
+        if (created_ele)
+        {
+            dt = axutil_date_time_create_with_offset(env, 0);
+            created_val_str = axutil_date_time_serialize_date_time(dt, env);
+            status = axiom_element_set_text(created_ele, env, created_val_str, 
created_node);
+            if (status == AXIS2_FAILURE)
+            {
+                AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                                "[trust] Created Element's setting text 
failed.");
+                return NULL;
+            }
+
+            AXIS2_FREE(env->allocator, created_val_str);
+            axutil_date_time_free(dt, env);
+            created_val_str = NULL;
+        }
+        else
+        {
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[trust] Created element 
creation failed.");
+            return NULL;
+        }
+
+        /*if ttl <0 we dont build the expires element */
+        if (ttl < 0)
+        {
+            return life_time_node;
+        }
+
+        expires_ele =
+            axiom_element_create(env, life_time_node, TRUST_LIFE_TIME_EXPIRES, 
wsu_ns,
+                                 &expires_node);
+        if (expires_ele)
+        {
+            dt = axutil_date_time_create_with_offset(env, ttl);
+            expires_val_str = axutil_date_time_serialize_date_time(dt, env);
+            axiom_element_set_text(expires_ele, env, expires_val_str, 
expires_node);
+            if (status == AXIS2_FAILURE)
+            {
+                AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                                "[trust] Expires Element's setting text 
failed.");
+                return NULL;
+            }
+
+            AXIS2_FREE(env->allocator, expires_val_str);
+            axutil_date_time_free(dt, env);
+            expires_val_str = NULL;
+        }
+        else
+        {
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[trust] Expires element 
creation failed.");
+            return NULL;
+        }
+
+        return life_time_node;
+    }
+    else
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[trust] LifeTime element 
creation failed.");
+        return NULL;
+    }
+
+    return NULL;
+}
+
+/* RequstedAttachedReference */
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+trust_util_create_req_attached_reference_element(
+    const axutil_env_t * env,
+    int wst_version,
+    axiom_node_t * parent_node)
+{
+    axis2_char_t *wst_ns_uri = NULL;
+    axiom_node_t *attached_ref_node = NULL;
+    axiom_element_t *attached_ref_ele = NULL;
+    axiom_namespace_t *wst_ns = NULL;
+
+    wst_ns_uri = trust_util_get_wst_ns(env, wst_version);
+    wst_ns = axiom_namespace_create(env, wst_ns_uri, TRUST_WST);
+
+    attached_ref_ele =
+        axiom_element_create(env, parent_node, 
TRUST_REQUESTED_ATTACHED_REFERENCE, wst_ns,
+                             &attached_ref_node);
+    if (!attached_ref_ele)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                        "[trust] RequestedAttachedReference element creation 
failed.");
+        return NULL;
+    }
+
+    return attached_ref_node;
+}
+
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+trust_util_create_req_unattached_reference_element(
+    const axutil_env_t * env,
+    int wst_version,
+    axiom_node_t * parent_node)
+{
+    axis2_char_t *wst_ns_uri = NULL;
+    axiom_node_t *unattached_ref_node = NULL;
+    axiom_element_t *unattached_ref_ele = NULL;
+    axiom_namespace_t *wst_ns = NULL;
+
+    wst_ns_uri = trust_util_get_wst_ns(env, wst_version);
+    wst_ns = axiom_namespace_create(env, wst_ns_uri, TRUST_WST);
+
+    unattached_ref_ele =
+        axiom_element_create(env, parent_node, 
TRUST_REQUESTED_UNATTACHED_REFERENCE, wst_ns,
+                             &unattached_ref_node);
+    if (!unattached_ref_ele)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                        "[trust] RequestedUnAttachedReference element creation 
failed.");
+        return NULL;
+    }
+
+    return unattached_ref_node;
+}
+
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+trust_util_create_encrypted_data_element(
+    const axutil_env_t * env,
+    int wst_version,
+    axiom_node_t * parent_node,
+    axis2_char_t * enc_data)
+{
+    axiom_node_t *encrypted_node = NULL;
+    axiom_element_t *encrypted_ele = NULL;
+    axiom_namespace_t *xenc_ns = NULL;
+    axis2_status_t status = AXIS2_SUCCESS;
+
+    xenc_ns = axiom_namespace_create(env, TRUST_XENC_XMLNS, TRUST_XENC);
+    encrypted_ele =
+        axiom_element_create(env, parent_node, TRUST_ENCRYPTED_DATA, xenc_ns, 
&encrypted_node);
+    if (!encrypted_ele)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[trust] EncryptedData element 
creation failed.");
+        return NULL;
+    }
+    if (enc_data)
+    {
+        status = axiom_element_set_text(encrypted_ele, env, enc_data, 
encrypted_node);
+        if (status == AXIS2_FAILURE)
+        {
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                            "[trust] Encrypted Data Element's setting text 
failed.");
+            return NULL;
+        }
+    }
+
+    return encrypted_node;
+}
+
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+trust_util_create_renew_traget_element(
+    const axutil_env_t * env,
+    int wst_version,
+    axiom_node_t * parent_node,
+    axiom_node_t * renew_pending_node)
+{
+    axiom_node_t *renew_target_node = NULL;
+    axiom_element_t *renew_target_ele = NULL;
+    axis2_char_t *wst_ns_uri = NULL;
+    axiom_namespace_t *wst_ns = NULL;
+    axis2_status_t status = AXIS2_SUCCESS;
+
+    wst_ns_uri = trust_util_get_wst_ns(env, wst_version);
+    wst_ns = axiom_namespace_create(env, wst_ns_uri, TRUST_WST);
+
+    renew_target_ele =
+        axiom_element_create(env, parent_node, TRUST_RENEW_TARGET, wst_ns, 
&renew_target_node);
+    if (!renew_target_ele)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[trust] RenewTarget element 
creation failed.");
+        return NULL;
+    }
+    if (renew_pending_node)
+    {
+        /* Set up token as it is  for the request */
+        status = axiom_node_add_child(renew_target_node, env, 
renew_pending_node);
+        if (status == AXIS2_FAILURE)
+        {
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                            "[trust] token renew pending node adding as a 
child failed.");
+        }
+    }
+
+    /** Otherwise user has to create a STR as a child ot RenewTarget element 
and
+     *  add the token reference to it.
+     **/
+    return renew_target_node;
+
+}
+
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+trust_util_create_allow_postdating_element(
+    const axutil_env_t * env,
+    int wst_version,
+    axiom_node_t * parent_node)
+{
+    axis2_char_t *wst_ns_uri = NULL;
+    axiom_node_t *allow_postdating_node = NULL;
+    axiom_element_t *allow_postdating_ele = NULL;
+    axiom_namespace_t *wst_ns = NULL;
+
+    wst_ns_uri = trust_util_get_wst_ns(env, wst_version);
+    wst_ns = axiom_namespace_create(env, wst_ns_uri, TRUST_WST);
+
+    allow_postdating_ele =
+        axiom_element_create(env, parent_node, 
TRUST_REQUESTED_UNATTACHED_REFERENCE, wst_ns,
+                             &allow_postdating_node);
+    if (!allow_postdating_ele)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[trust] AllowPostdating 
element creation failed.");
+        return NULL;
+    }
+
+    return allow_postdating_node;
+}
+
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+trust_util_create_renewing_element(
+    const axutil_env_t * env,
+    int wst_version,
+    axiom_node_t * parent_node,
+    trust_allow_t allow_flag,
+    trust_ok_t ok_flag)
+{
+    axiom_node_t *renewing_node = NULL;
+    axiom_element_t *renewing_ele = NULL;
+    axis2_char_t *wst_ns_uri = NULL;
+    axiom_namespace_t *wst_ns = NULL;
+    axiom_attribute_t *allow_attr = NULL;
+    axiom_attribute_t *ok_attr = NULL;
+    axis2_status_t status = AXIS2_SUCCESS;
+    axis2_char_t *allow = NULL;
+    axis2_char_t *ok = NULL;
+
+    wst_ns_uri = trust_util_get_wst_ns(env, wst_version);
+    wst_ns = axiom_namespace_create(env, wst_ns_uri, TRUST_WST);
+
+    renewing_ele = axiom_element_create(env, parent_node, TRUST_RENEWING, 
wst_ns, &renewing_node);
+
+    sprintf(allow, "%d", allow_flag);
+    sprintf(ok, "%d", ok_flag);
+
+    allow_attr = axiom_attribute_create(env, TRUST_RENEW_ALLOW_ATTR, allow, 
wst_ns);
+    ok_attr = axiom_attribute_create(env, TRUST_RENEW_OK_ATTR, ok, wst_ns);
+
+    status = axiom_element_add_attribute(renewing_ele, env, allow_attr, 
renewing_node);
+    if (status == AXIS2_FAILURE)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[trust] Allow attribute 
setting failed.");
+    }
+    status = axiom_element_add_attribute(renewing_ele, env, ok_attr, 
renewing_node);
+    if (status == AXIS2_FAILURE)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[trust] Ok attribute setting 
failed.");
+    }
+
+    return renewing_node;
+}
+
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+trust_util_create_cancel_target_element(
+    const axutil_env_t * env,
+    int wst_version,
+    axiom_node_t * parent_node,
+    axiom_node_t * token_cancel_pending_node)
+{
+    axiom_node_t *cancel_target_node = NULL;
+    axiom_element_t *cancel_target_ele = NULL;
+    axis2_char_t *wst_ns_uri = NULL;
+    axiom_namespace_t *wst_ns = NULL;
+
+    wst_ns_uri = trust_util_get_wst_ns(env, wst_version);
+    wst_ns = axiom_namespace_create(env, wst_ns_uri, TRUST_WST);
+
+    cancel_target_ele =
+        axiom_element_create(env, parent_node, TRUST_CANCEL_TARGET, wst_ns, 
&cancel_target_node);
+    if (!cancel_target_ele)
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[trust] CancelTarget element 
creation failed.");
+        return NULL;
+    }
+
+    if (token_cancel_pending_node)
+    {
+        /* Set up token as it is  for the request */
+        axiom_node_add_child(cancel_target_node, env, 
token_cancel_pending_node);
+    }
+
+    /** Otherwise user has to create a STR as a child ot CancelTarget element 
and
+    *   add the token reference to it.
+    **/
+    return cancel_target_node;
+
+}
+
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL
+trust_util_create_validation_response_element(
+    const axutil_env_t * env,
+    axiom_node_t * parent_node,
+    int wst_version,
+    axis2_char_t * code,
+    axis2_char_t * reason)
+{
+    axis2_char_t *wst_ns_uri = NULL;
+    axiom_node_t *status_node = NULL;
+    axiom_node_t *code_node = NULL;
+    axiom_node_t *reason_node = NULL;
+    axiom_element_t *status_ele = NULL;
+    axiom_element_t *code_ele = NULL;
+    axiom_element_t *reason_ele = NULL;
+    axiom_namespace_t *wst_ns = NULL;
+    axis2_status_t status = AXIS2_SUCCESS;
+
+    wst_ns_uri = trust_util_get_wst_ns(env, wst_version);
+    wst_ns = axiom_namespace_create(env, wst_ns_uri, TRUST_WST);
+
+    status_ele =
+        axiom_element_create(env, parent_node, TRUST_VALIDATION_STATUS, 
wst_ns, &status_node);
+    if (status_ele)
+    {
+        if (code)
+        {
+            code_ele =
+                axiom_element_create(env, status_node, TRUST_VALIDATION_CODE, 
wst_ns, &code_node);
+            if (!code_ele)
+            {
+                AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[trust] Code element 
creation failed.");
+                return NULL;
+            }
+            status = axiom_element_set_text(code_ele, env, code, code_node);
+            if (status == AXIS2_FAILURE)
+            {
+                AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                                "[trust] Code element text setting failed.");
+                return NULL;
+            }
+        }
+        else
+        {
+            AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[trust] Code string 
null.");
+            return NULL;
+        }
+
+        if (reason)
+        {
+            reason_ele =
+                axiom_element_create(env, status_node, 
TRUST_VALIDATION_REASON, wst_ns,
+                                     &reason_node);
+            if (!reason_ele)
+            {
+                AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[trust] Reason 
element creation failed.");
+                return NULL;
+            }
+            status = axiom_element_set_text(reason_ele, env, reason, 
reason_node);
+            if (status == AXIS2_FAILURE)
+            {
+                AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI,
+                                "[trust] Reason element text setting failed.");
+                return status_node;
+            }
+        }
+    }
+    else
+    {
+        AXIS2_LOG_ERROR(env->log, AXIS2_LOG_SI, "[trust] Status element 
creation failed.");
+        return NULL;
+    }
+
+    return status_node;
+}
+
+axis2_char_t *AXIS2_CALL
+trust_util_get_wst_ns(
+    const axutil_env_t * env,
+    int wst_version)
+{
+    switch (wst_version)
+    {
+    case TRUST_VERSION_05_02:
+        return TRUST_WST_XMLNS_05_02;
+    case TRUST_VERSION_05_12:
+        return TRUST_WST_XMLNS_05_12;
+    default:
+        return NULL;
+    }
+}


Reply via email to