You are viewing a plain text version of this content. The canonical link for it is here.
Posted to rampart-dev@ws.apache.org by su...@apache.org on 2007/10/16 08:57:20 UTC

svn commit: r585061 - in /webservices/rampart/scratch/c/saml: SAML.sln include/saml_req.h saml_test.vcproj src/query.c src/request.c src/response.c

Author: supun
Date: Mon Oct 15 23:57:16 2007
New Revision: 585061

URL: http://svn.apache.org/viewvc?rev=585061&view=rev
Log:
Prasad's 5th patch applied.

Modified:
    webservices/rampart/scratch/c/saml/SAML.sln
    webservices/rampart/scratch/c/saml/include/saml_req.h
    webservices/rampart/scratch/c/saml/saml_test.vcproj
    webservices/rampart/scratch/c/saml/src/query.c
    webservices/rampart/scratch/c/saml/src/request.c
    webservices/rampart/scratch/c/saml/src/response.c

Modified: webservices/rampart/scratch/c/saml/SAML.sln
URL: http://svn.apache.org/viewvc/webservices/rampart/scratch/c/saml/SAML.sln?rev=585061&r1=585060&r2=585061&view=diff
==============================================================================
--- webservices/rampart/scratch/c/saml/SAML.sln (original)
+++ webservices/rampart/scratch/c/saml/SAML.sln Mon Oct 15 23:57:16 2007
@@ -3,6 +3,11 @@
 # Visual Studio 2005
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SAML", "SAML.vcproj", "{1A433831-8D6F-4A45-8792-8BAE219B44A3}"
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "saml_test", "saml_test.vcproj", "{10D44647-66E0-4DCF-A465-4CD1923D9A47}"
+	ProjectSection(ProjectDependencies) = postProject
+		{1A433831-8D6F-4A45-8792-8BAE219B44A3} = {1A433831-8D6F-4A45-8792-8BAE219B44A3}
+	EndProjectSection
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Win32 = Debug|Win32
@@ -13,6 +18,10 @@
 		{1A433831-8D6F-4A45-8792-8BAE219B44A3}.Debug|Win32.Build.0 = Debug|Win32
 		{1A433831-8D6F-4A45-8792-8BAE219B44A3}.Release|Win32.ActiveCfg = Release|Win32
 		{1A433831-8D6F-4A45-8792-8BAE219B44A3}.Release|Win32.Build.0 = Release|Win32
+		{10D44647-66E0-4DCF-A465-4CD1923D9A47}.Debug|Win32.ActiveCfg = Debug|Win32
+		{10D44647-66E0-4DCF-A465-4CD1923D9A47}.Debug|Win32.Build.0 = Debug|Win32
+		{10D44647-66E0-4DCF-A465-4CD1923D9A47}.Release|Win32.ActiveCfg = Release|Win32
+		{10D44647-66E0-4DCF-A465-4CD1923D9A47}.Release|Win32.Build.0 = Release|Win32
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

Modified: webservices/rampart/scratch/c/saml/include/saml_req.h
URL: http://svn.apache.org/viewvc/webservices/rampart/scratch/c/saml/include/saml_req.h?rev=585061&r1=585060&r2=585061&view=diff
==============================================================================
--- webservices/rampart/scratch/c/saml/include/saml_req.h (original)
+++ webservices/rampart/scratch/c/saml/include/saml_req.h Mon Oct 15 23:57:16 2007
@@ -55,7 +55,7 @@
     axutil_qname_t *status_value;
     axis2_char_t *status_code;
     axis2_char_t *status_msg;
-    axutil_array_list_t *status_detail;
+    axiom_node_t *status_detail;
 
 }saml_status_t;
 
@@ -109,7 +109,7 @@
     /* time instant of the issue */
     axutil_date_time_t *issue_instant;
     /*optional*/
-    saml_signature_t *signature;
+    axiom_node_t *signature;
 
     /* An array for QNames	
 	 * specifies the type of statement the SAML relying party wants from the
@@ -139,7 +139,7 @@
 
     axutil_date_time_t *issue_instant;
 
-    saml_signature_t *signature;
+    axiom_node_t *signature;
 
     saml_status_t *status;
 
@@ -149,7 +149,9 @@
 AXIS2_EXTERN int AXIS2_CALL saml_request_init(saml_request_t *request, axutil_env_t *env);
 AXIS2_EXTERN int AXIS2_CALL saml_request_uninit(saml_request_t *request, axutil_env_t *env);
 AXIS2_EXTERN int AXIS2_CALL saml_request_build(saml_request_t *request, axiom_node_t *node, axutil_env_t *env);
-
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL saml_request_to_om(saml_request_t *request, 
+														 axiom_node_t *parent, 
+														 axutil_env_t *env);
 //To do
 AXIS2_EXTERN void AXIS2_CALL saml_request_insert_signature();
 //
@@ -181,6 +183,9 @@
 AXIS2_EXTERN int AXIS2_CALL saml_response_init(saml_response_t *response, axutil_env_t *env);
 AXIS2_EXTERN int AXIS2_CALL saml_response_uninit(saml_response_t *response, axutil_env_t *env);
 AXIS2_EXTERN int AXIS2_CALL saml_response_build(saml_response_t *response, axiom_node_t *node, axutil_env_t *env);
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL saml_response_to_om(saml_response_t *response, 
+														  axiom_node_t *parent, 
+														  axutil_env_t *env);
 //To do
 AXIS2_EXTERN void AXIS2_CALL saml_response_insert_signature();
 //
@@ -292,10 +297,22 @@
 AXIS2_EXTERN int AXIS2_CALL saml_status_init(saml_status_t *status, axutil_env_t *env);
 AXIS2_EXTERN int AXIS2_CALL saml_status_uninit(saml_status_t *status, axutil_env_t *env);
 AXIS2_EXTERN int AXIS2_CALL saml_status_build(saml_status_t *status, axiom_node_t *node, axutil_env_t *env);
-AXIS2_EXTERN saml_status_t* saml_status_create(axutil_env_t *env);
+AXIS2_EXTERN saml_status_t* AXIS2_CALL saml_status_create(axutil_env_t *env);
 AXIS2_EXTERN void saml_status_free(saml_status_t *status, axutil_env_t *env);
+AXIS2_EXTERN int AXIS2_CALL saml_status_set_status_value(saml_status_t *status, axutil_qname_t *qname, axutil_env_t *env);
+AXIS2_EXTERN axutil_qname_t* AXIS2_CALL saml_status_get_status_value(saml_status_t *status, axutil_env_t *env);
+AXIS2_EXTERN int AXIS2_CALL saml_status_set_status_msg(saml_status_t *status, axis2_char_t *msg, axutil_env_t *env);
+AXIS2_EXTERN axis2_char_t* AXIS2_CALL saml_status_get_status_msg(saml_status_t *status, axutil_env_t *env);
+AXIS2_EXTERN int AXIS2_CALL saml_status_set_status_detail(saml_status_t *status, axiom_node_t *det, axutil_env_t *env);
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL saml_status_get_status_detail(saml_status_t *status, axutil_env_t *env);
+
+
+
+
 AXIS2_EXTERN saml_artifact_t* AXIS2_CALL saml_artifact_create(axutil_env_t *env);
 AXIS2_EXTERN int AXIS2_CALL saml_artifact_init(saml_artifact_t *artifact, axutil_env_t *env);
 AXIS2_EXTERN int AXIS2_CALL saml_artifact_uninit(saml_artifact_t *artifact, axutil_env_t *env);
+AXIS2_EXTERN axis2_char_t* AXIS2_CALL saml_artifact_get_data(saml_artifact_t *artifact, axutil_env_t *env);
+AXIS2_EXTERN int AXIS2_CALL saml_artifact_set_data(saml_artifact_t *artifact, axutil_env_t *env, axis2_char_t *data);
 
 #endif 

Modified: webservices/rampart/scratch/c/saml/saml_test.vcproj
URL: http://svn.apache.org/viewvc/webservices/rampart/scratch/c/saml/saml_test.vcproj?rev=585061&r1=585060&r2=585061&view=diff
==============================================================================
--- webservices/rampart/scratch/c/saml/saml_test.vcproj (original)
+++ webservices/rampart/scratch/c/saml/saml_test.vcproj Mon Oct 15 23:57:16 2007
@@ -40,6 +40,7 @@
 			<Tool
 				Name="VCCLCompilerTool"
 				Optimization="0"
+				AdditionalIncludeDirectories="./include;E:\axis2c\util\include;E:\axis2c\axiom\include;"
 				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
 				MinimalRebuild="true"
 				BasicRuntimeChecks="3"
@@ -60,7 +61,9 @@
 			/>
 			<Tool
 				Name="VCLinkerTool"
+				AdditionalDependencies="saml.lib axutil.lib axiom.lib"
 				LinkIncremental="2"
+				AdditionalLibraryDirectories="./debug;E:\axis2c\build\deploy\lib"
 				GenerateDebugInformation="true"
 				SubSystem="1"
 				TargetMachine="1"
@@ -175,7 +178,7 @@
 			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
 			>
 			<File
-				RelativePath=".\test_main.c"
+				RelativePath=".\src\test.c"
 				>
 			</File>
 		</Filter>

Modified: webservices/rampart/scratch/c/saml/src/query.c
URL: http://svn.apache.org/viewvc/webservices/rampart/scratch/c/saml/src/query.c?rev=585061&r1=585060&r2=585061&view=diff
==============================================================================
--- webservices/rampart/scratch/c/saml/src/query.c (original)
+++ webservices/rampart/scratch/c/saml/src/query.c Mon Oct 15 23:57:16 2007
@@ -107,12 +107,25 @@
 														axutil_env_t *env)
 {
 	int i = 0, size = 0;
+	saml_attr_desig_t *attr_desig = NULL;
+
 	if(attribute_query->resource)
 	{
 		AXIS2_FREE(env->allocator, attribute_query->resource);
 	}
 	if(attribute_query->attr_desigs)
 	{
+		size = axutil_array_list_size(attribute_query->attr_desigs, env);
+		for(i = 0; i< size ; i++)
+		{
+			attr_desig = (saml_attr_desig_t*)axutil_array_list_get(attribute_query->attr_desigs, env, i);
+
+			if(attr_desig)
+			{
+				saml_attr_desig_uninit(attr_desig, env);
+				AXIS2_FREE(env->allocator,attribute_query);
+			}
+		}
 		axutil_array_list_free(attribute_query->attr_desigs, env);
 	}
 	if (attribute_query->subject)
@@ -139,7 +152,7 @@
 		
 		autho_decision_query->resource = NULL;
 		autho_decision_query->saml_actions = axutil_array_list_create(env, 
-												AXIS2_ARRAY_LIST_DEFAULT_CAPACITY);
+												SAML_ARRAY_LIST_DEF);
 		autho_decision_query->evidence = saml_evidence_create(env);
 	}
 	return autho_decision_query;
@@ -774,6 +787,17 @@
 	return AXIS2_SUCCESS;
 }
 
+AXIS2_EXTERN int AXIS2_CALL saml_attr_query_set_resource(saml_attr_query_t *attr_query, axutil_env_t *env, axis2_char_t *resource)
+{
+	if(attr_query->resource)
+	{
+		AXIS2_FREE(env->allocator, attr_query->resource);
+	}
+	attr_query->resource = resource;
+
+	return AXIS2_SUCCESS;
+}
+
 AXIS2_EXTERN axis2_char_t* AXIS2_CALL saml_auth_query_get_authentication_method(saml_authentication_query_t *authentication_query,
 															axutil_env_t *env)
 {
@@ -818,7 +842,7 @@
 {
 	if(!attr_query->attr_desigs)
 	{
-		axutil_array_list_create(env, AXIS2_ARRAY_LIST_DEFAULT_CAPACITY);
+		axutil_array_list_create(env, SAML_ARRAY_LIST_DEF);
 	}
 	axutil_array_list_add(attr_query->attr_desigs, env, desig);
 	return AXIS2_SUCCESS;
@@ -889,7 +913,7 @@
 {
 	if(!autho_dec_query->saml_actions)
 	{
-		axutil_array_list_create(env, AXIS2_ARRAY_LIST_DEFAULT_CAPACITY);
+		axutil_array_list_create(env, SAML_ARRAY_LIST_DEF);
 	}
 	if(autho_dec_query->saml_actions)
 	{

Modified: webservices/rampart/scratch/c/saml/src/request.c
URL: http://svn.apache.org/viewvc/webservices/rampart/scratch/c/saml/src/request.c?rev=585061&r1=585060&r2=585061&view=diff
==============================================================================
--- webservices/rampart/scratch/c/saml/src/request.c (original)
+++ webservices/rampart/scratch/c/saml/src/request.c Mon Oct 15 23:57:16 2007
@@ -43,6 +43,24 @@
 	return AXIS2_SUCCESS;
 }
 
+AXIS2_EXTERN axis2_char_t* AXIS2_CALL saml_artifact_get_data(saml_artifact_t *artifact, axutil_env_t *env)
+{
+	if(artifact)
+		return artifact->artifact;
+	else
+		return NULL;
+}
+AXIS2_EXTERN int AXIS2_CALL saml_artifact_set_data(saml_artifact_t *artifact, axutil_env_t *env, axis2_char_t *data)
+{
+	if(artifact->artifact)
+	{
+		AXIS2_FREE(env->allocator, artifact->artifact);
+	}
+	artifact->artifact = data;
+
+	return AXIS2_SUCCESS;
+}
+
 
 AXIS2_EXTERN int AXIS2_CALL saml_request_init(saml_request_t *request, axutil_env_t *env)
 {
@@ -51,9 +69,9 @@
 	request->issue_instant = NULL;
 	request->major_version = NULL;
 	request->minor_version = NULL;
-	request->saml_artifacts = NULL;
-	request->saml_asserion_id_ref = NULL;
-	request->saml_responds = NULL;
+	request->saml_artifacts =axutil_array_list_create(env, SAML_ARRAY_LIST_DEF);
+	request->saml_asserion_id_ref = axutil_array_list_create(env, SAML_ARRAY_LIST_DEF);
+	request->saml_responds = axutil_array_list_create(env, SAML_ARRAY_LIST_DEF);
 	request->signature = NULL;
 
 	return AXIS2_SUCCESS;
@@ -61,6 +79,9 @@
 
 AXIS2_EXTERN int AXIS2_CALL saml_request_uninit(saml_request_t *request, axutil_env_t *env)
 {
+	int size = 0, i = 0;
+	saml_artifact_t *artifact = NULL;
+	axis2_char_t *id_ref = NULL;
 	if(request->request_id.id)
 	{
 		AXIS2_FREE(env->allocator, request->request_id.id);
@@ -83,6 +104,16 @@
 	}
 	if(request->saml_artifacts)
 	{
+		size = axutil_array_list_size(request->saml_artifacts, env);
+		for(i = 0; i < size; i++)
+		{
+			artifact = (saml_artifact_t*)axutil_array_list_get(request->saml_artifacts, env ,i);
+			if(artifact)
+			{
+				saml_artifact_uninit(artifact, env);
+				AXIS2_FREE(env->allocator, artifact);
+			}
+		}
 		axutil_array_list_free(request->saml_artifacts, env);
 	}
 	if(request->signature)
@@ -91,7 +122,29 @@
 	}
 	if(request->saml_asserion_id_ref)
 	{
-		axutil_array_list_free(request->saml_asserion_id_ref, env);
+		size = axutil_array_list_size(request->saml_artifacts, env);
+		for(i = 0; i < size; i++)
+		{
+			id_ref = (axis2_char_t*)axutil_array_list_get(request->saml_asserion_id_ref, env ,i);
+			if(id_ref)
+			{
+				AXIS2_FREE(env->allocator, id_ref);
+			}
+		}
+		axutil_array_list_free(request->saml_artifacts, env);
+	}
+	if(request->saml_responds)
+	{
+		size = axutil_array_list_size(request->saml_responds, env);
+		for(i = 0; i < size; i++)
+		{
+			id_ref = (axis2_char_t*)axutil_array_list_get(request->saml_responds, env ,i);
+			if(id_ref)
+			{
+				AXIS2_FREE(env->allocator, id_ref);
+			}
+		}
+		axutil_array_list_free(request->saml_responds, env);
 	}
 	return AXIS2_SUCCESS;
 }
@@ -174,7 +227,7 @@
 			}
 			else if(element != NULL && !(axutil_strcmp(element_local_name,SAML_SIGNATURE)))
 			{
-				//To do
+				request->signature = child_node;
 			}
 			else if(element != NULL && !(axutil_strcmp(element_local_name, SAML_SUBJECT_QUERY)))
 			{
@@ -245,14 +298,16 @@
 	int size = 0, i = 0;
 	axiom_element_t *e = NULL, *ce = NULL;
 	axiom_node_t *n = NULL, *cn = NULL;	
-	axiom_namespace_t *ns = NULL;
+	axiom_namespace_t *ns1 = NULL, *ns2 = NULL;
 	axiom_attribute_t *attr = NULL;
 	saml_assertion_t *assertion = NULL;
 	axutil_qname_t *qname;
 	saml_artifact_t *artifact;
 	axis2_char_t *id_reference;
-		ns = axiom_namespace_create(env, SAML_PROTOCOL_NMSP, SAML_PROTOCOL_PREFIX);
-		e = axiom_element_create(env, parent, SAML_REQUEST, ns, &n);
+	ns1 = axiom_namespace_create(env, SAML_PROTOCOL_NMSP, SAML_PROTOCOL_PREFIX);
+	ns2 = axiom_namespace_create(env, SAML_NMSP_URI, SAML_PREFIX);
+	e = axiom_element_create(env, parent, SAML_REQUEST, ns1, &n);
+	axiom_element_declare_namespace(e, env, n, ns2);
 
 		if(e)
 		{
@@ -283,17 +338,18 @@
 				for (i = 0 ; i < size ; i++)
 				{
 					qname = (axutil_qname_t*) axutil_array_list_get(request->saml_responds, env, i);
-					/////////
-					ce = axiom_element_create(env, n, SAML_RESPOND_WITH, NULL, &cn);
+				
+					ce = axiom_element_create(env, n, SAML_RESPOND_WITH, ns1, &cn);
 					if(ce)
 					{
 						axiom_element_set_text(ce, env, axutil_qname_to_string(qname, env), cn);
 					}
+				/*	axiom_element_create_with_qname(env, n, qname, &cn);*/
 				}
 			}
 			if(request->signature)
 			{
-				//To do
+				axiom_node_add_child(n, env, request->signature);
 			}
 			if(request->query || request->saml_artifacts || request->saml_asserion_id_ref)
 			{
@@ -310,7 +366,7 @@
 						artifact = (saml_artifact_t*) axutil_array_list_get(request->saml_artifacts, env, i);
 						if(artifact)
 						{
-							ce = axiom_element_create(env, n, SAML_ASSERTION_ARTIFACT, NULL, &cn);
+							ce = axiom_element_create(env, n, SAML_ASSERTION_ARTIFACT, ns1, &cn);
 							if(ce)
 							{
 								axiom_element_set_text(ce, env, artifact->artifact, cn);
@@ -327,7 +383,7 @@
 					{
 						id_reference = (axis2_char_t*) axutil_array_list_get(request->saml_asserion_id_ref, env, i);
 
-						ce = axiom_element_create(env, n, SAML_ASSERTION_ID_REFERENCE, NULL, &cn);
+						ce = axiom_element_create(env, n, SAML_ASSERTION_ID_REFERENCE, ns1, &cn);
 						if(ce)
 						{
 							axiom_element_set_text(ce, env, id_reference, cn);
@@ -346,13 +402,15 @@
 
 }
 
-AXIS2_EXTERN void AXIS2_CALL saml_request_set_version(saml_request_t *request, int version, axutil_env_t *env)
+AXIS2_EXTERN int AXIS2_CALL saml_request_set_minor_version(saml_request_t *request, int version, axutil_env_t *env)
 {
 	if(request->major_version)
 	{
 		AXIS2_FREE(env->allocator, request->minor_version);
 	}
+	request->minor_version = AXIS2_MALLOC(env->allocator, sizeof(char));
 	sprintf(request->minor_version, "%d", version);
+	return AXIS2_SUCCESS;
 }
 AXIS2_EXTERN int AXIS2_CALL saml_request_set_issue_instant(saml_request_t *request, axutil_date_time_t *date_time, axutil_env_t *env)
 {
@@ -393,7 +451,7 @@
 {
 	if(!request->saml_responds)
 	{
-		request->saml_responds = axutil_array_list_create(env,AXIS2_ARRAY_LIST_DEFAULT_CAPACITY);
+		request->saml_responds = axutil_array_list_create(env, SAML_ARRAY_LIST_DEF);
 	}
 	if(request->saml_responds)
 	{
@@ -455,7 +513,7 @@
 {
 	if(!request->saml_asserion_id_ref)
 	{
-		axutil_array_list_create(env,AXIS2_ARRAY_LIST_DEFAULT_CAPACITY);
+		axutil_array_list_create(env, SAML_ARRAY_LIST_DEF);
 	}
 	if(request->saml_asserion_id_ref)
 	{
@@ -499,7 +557,7 @@
 {
 	if(!request->saml_artifacts)
 	{
-		request->saml_artifacts = axutil_array_list_create(env, AXIS2_ARRAY_LIST_DEFAULT_CAPACITY);
+		request->saml_artifacts = axutil_array_list_create(env, SAML_ARRAY_LIST_DEF);
 	}
 	if(request->saml_artifacts)
 	{

Modified: webservices/rampart/scratch/c/saml/src/response.c
URL: http://svn.apache.org/viewvc/webservices/rampart/scratch/c/saml/src/response.c?rev=585061&r1=585060&r2=585061&view=diff
==============================================================================
--- webservices/rampart/scratch/c/saml/src/response.c (original)
+++ webservices/rampart/scratch/c/saml/src/response.c Mon Oct 15 23:57:16 2007
@@ -42,7 +42,7 @@
 	}
 	if(status->status_detail)
 	{
-		axutil_array_list_free(status->status_detail, env);
+		axiom_node_free_tree(status->status_detail, env);
 	}
 	if(status->status_msg)
 	{
@@ -51,7 +51,7 @@
 	return AXIS2_SUCCESS;
 }
 
-AXIS2_EXTERN saml_status_t* saml_status_create(axutil_env_t *env)
+AXIS2_EXTERN saml_status_t* AXIS2_CALL saml_status_create(axutil_env_t *env)
 {
 	saml_status_t *status = NULL;
 	status = (saml_status_t*)AXIS2_MALLOC(env->allocator, sizeof(saml_status_t));
@@ -62,7 +62,7 @@
 		status->status_msg = NULL;
 		status->status_code = NULL;
 
-		status->status_detail = axutil_array_list_create(env, AXIS2_ARRAY_LIST_DEFAULT_CAPACITY);
+		status->status_detail = NULL;
 	}
 	return status;
 }
@@ -78,7 +78,7 @@
 	}
 	if(status->status_detail)
 	{
-		axutil_array_list_free(status->status_detail, env);
+		axiom_node_free_tree(status->status_detail, env);
 	}
 	if(status->status_msg)
 	{
@@ -120,7 +120,6 @@
 			if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env), 
 																		SAML_STATUS_CODE)))
 			{
-				///
 				qname = axiom_element_get_attribute_value_by_name(element, env, SAML_STATUS_VALUE);
 				if(qname)
 					status->status_value = axutil_qname_create_from_string(env, qname); 
@@ -134,7 +133,7 @@
 			else if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env), 
 																		SAML_STATUS_DETAIL)))
 			{
-				axutil_array_list_add(status->status_detail, env, axiom_element_get_text(element, env, child_node));
+				status->status_detail = child_node;
 			}
 		}
 		return AXIS2_SUCCESS;
@@ -160,15 +159,7 @@
 	{
 		if(status->status_detail)
 		{
-			size = axutil_array_list_size(status->status_detail, env);
-			for(i = 0 ; i < size ; i++)
-			{
-				ce = axiom_element_create(env, n, SAML_STATUS_DETAIL, ns, &cn);
-				if(ce)
-				{
-					axiom_element_set_text(ce, env, (axis2_char_t*)axutil_array_list_get(status->status_detail, env, i), cn);
-				}
-			}
+			axiom_node_add_child(n, env, status->status_detail);
 		}
 		if(status->status_msg)
 		{
@@ -193,6 +184,127 @@
 	
 }
 
+AXIS2_EXTERN int AXIS2_CALL saml_status_set_status_value(saml_status_t *status, axutil_qname_t *qname, axutil_env_t *env)
+{
+	if(status->status_value)
+	{
+		axutil_qname_free(status->status_value, env);
+	}
+	status->status_value = qname;
+	return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN axutil_qname_t* AXIS2_CALL saml_status_get_status_value(saml_status_t *status, axutil_env_t *env)
+{
+	if(status)
+		return status->status_value;
+	else
+		return NULL;
+}
+AXIS2_EXTERN int AXIS2_CALL saml_status_set_status_msg(saml_status_t *status, axis2_char_t *msg, axutil_env_t *env)
+{
+	if(status)
+	{
+		AXIS2_FREE(env->allocator, status->status_msg);
+	}
+	status->status_msg = msg;
+	return AXIS2_SUCCESS;
+}
+AXIS2_EXTERN axis2_char_t* AXIS2_CALL saml_status_get_status_msg(saml_status_t *status, axutil_env_t *env)
+{
+	if(status)
+		return status->status_msg;
+	else
+		return NULL;
+}
+AXIS2_EXTERN int AXIS2_CALL saml_status_set_status_detail(saml_status_t *status, axiom_node_t *det, axutil_env_t *env)
+{
+	if(status)
+	{
+		axiom_node_free_tree(det, env);
+	}
+	status->status_detail = det;
+	return AXIS2_SUCCESS;
+}
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL saml_status_get_status_detail(saml_status_t *status, axutil_env_t *env)
+{
+	if(status)
+		return status->status_detail;
+	else
+		return NULL;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_response_init(saml_response_t *response, axutil_env_t *env)
+{
+	if(response)
+	{
+		response->response_id.id = NULL;
+		response->issue_instant = NULL;
+		response->major_version = NULL;
+		response->minor_version = NULL;
+		response->recepient = NULL;
+		response->request_response_id = NULL;
+		response->signature = NULL;
+		response->status = NULL;
+		response->saml_assertions = axutil_array_list_create(env, SAML_ARRAY_LIST_DEF);
+	}
+	return AXIS2_SUCCESS;
+}
+AXIS2_EXTERN int AXIS2_CALL saml_response_uninit(saml_response_t *response, axutil_env_t *env)
+{
+	int size =0, i = 0;
+	saml_assertion_t *assertion = NULL;
+	if(response->major_version)
+	{
+		AXIS2_FREE(env->allocator, response->major_version);
+	}
+	if(response->minor_version)
+	{
+		AXIS2_FREE(env->allocator, response->minor_version);
+	}
+	if(response->issue_instant)
+	{
+		axutil_date_time_free(response->issue_instant, env);
+	}
+	if(response->recepient)
+	{
+		AXIS2_FREE(env->allocator, response->recepient);
+	}
+	if(response->response_id.id)
+	{
+		AXIS2_FREE(env->allocator, response->response_id.id);
+	}
+	if(response->signature)
+	{
+		axiom_node_free_tree(response->signature, env);
+	}
+	if(response->status)
+	{
+		saml_status_uninit(response->status, env);
+		AXIS2_FREE(env->allocator, response->status);
+	}
+	if(response->request_response_id)
+	{
+		AXIS2_FREE(env->allocator, response->request_response_id);
+	}
+	if(response->saml_assertions)
+	{
+		size = axutil_array_list_size(response->saml_assertions, env);
+		for(i = 0; i < size ; i++)
+		{
+			assertion = (saml_assertion_t*)axutil_array_list_get(response->saml_assertions, env, i);
+			if(assertion)
+			{
+				saml_assertion_uninit(assertion, env);
+				AXIS2_FREE(env->allocator, assertion);
+			}
+		}
+		axutil_array_list_free(response->saml_assertions, env);
+	}
+
+	return AXIS2_SUCCESS;
+}
+
 AXIS2_EXTERN int AXIS2_CALL saml_response_build(saml_response_t *response,
 												axiom_node_t *node, 
 												axutil_env_t *env)
@@ -229,12 +341,10 @@
 
 			if(!axutil_strcmp(axiom_attribute_get_localname(attr, env), SAML_RESPONCE_ID))
 			{
-				//to do
 				response->response_id.id =  attr_val;
 			}
 			if(!axutil_strcmp(axiom_attribute_get_localname(attr, env), SAML_IN_RESPONSE_TO))
 			{
-				//to do
 				response->request_response_id =  attr_val;
 			}
 			else if(!axutil_strcmp(axiom_attribute_get_localname(attr, env), SAML_MAJORVERSION))
@@ -274,7 +384,7 @@
 			if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env), 
 																		SAML_SIGNATURE)))
 			{
-				//To do
+				response->signature = child_node;
 			}
 			else if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env), 
 																		SAML_STATUS)))
@@ -325,7 +435,7 @@
 	
 	if(e)
 	{
-		if(response->request_response_id && response->major_version && response->minor_version && response->issue_instant)
+		if(response->response_id.id && response->major_version && response->minor_version && response->issue_instant)
 		{
 			attr = axiom_attribute_create(env, SAML_RESPONCE_ID, response->request_response_id, NULL);
 			axiom_element_add_attribute(e, env, attr, n);
@@ -338,11 +448,9 @@
 
 			attr = axiom_attribute_create(env, SAML_ISSUE_INSTANT, axutil_date_time_serialize_date_time(response->issue_instant, env), NULL);
 			axiom_element_add_attribute(e, env, attr, n);
-
 		}
 		else
 		{
-			axiom_element_free(e, env);
 			return NULL;
 		}
 		if(response->request_response_id && response->recepient)
@@ -384,6 +492,8 @@
 	{
 		AXIS2_FREE(env->allocator,response->minor_version);
 	}
+	response->minor_version = AXIS2_MALLOC(env->allocator, sizeof(char));
+	sprintf(response->minor_version, "%d", version);	
 	return AXIS2_SUCCESS;
 }
 AXIS2_EXTERN int AXIS2_CALL saml_response_set_issue_instant(saml_response_t *response, axutil_date_time_t *date_time, axutil_env_t *env)
@@ -458,7 +568,7 @@
 {
 	if(!response->saml_assertions)
 	{
-		axutil_array_list_create(env, AXIS2_ARRAY_LIST_DEFAULT_CAPACITY);
+		axutil_array_list_create(env, SAML_ARRAY_LIST_DEF);
 	}
 	axutil_array_list_add(response->saml_assertions, env, assertion);
 	return AXIS2_SUCCESS;