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/14 12:44:14 UTC

svn commit: r584526 - in /webservices/rampart/scratch/c/saml: include/SAML.h include/saml_req.h saml_test.vcproj src/auth_des_stmt.c src/auth_smt.c src/condition.c src/saml_request.c src/saml_responce.c src/stmt.c src/subject.c test/ test/test_main.c

Author: supun
Date: Sun Oct 14 03:44:13 2007
New Revision: 584526

URL: http://svn.apache.org/viewvc?rev=584526&view=rev
Log:
Applied the 3rd patch from Prasad and add API methods to the assertions

Added:
    webservices/rampart/scratch/c/saml/saml_test.vcproj
    webservices/rampart/scratch/c/saml/test/
    webservices/rampart/scratch/c/saml/test/test_main.c
Modified:
    webservices/rampart/scratch/c/saml/include/SAML.h
    webservices/rampart/scratch/c/saml/include/saml_req.h
    webservices/rampart/scratch/c/saml/src/auth_des_stmt.c
    webservices/rampart/scratch/c/saml/src/auth_smt.c
    webservices/rampart/scratch/c/saml/src/condition.c
    webservices/rampart/scratch/c/saml/src/saml_request.c
    webservices/rampart/scratch/c/saml/src/saml_responce.c
    webservices/rampart/scratch/c/saml/src/stmt.c
    webservices/rampart/scratch/c/saml/src/subject.c

Modified: webservices/rampart/scratch/c/saml/include/SAML.h
URL: http://svn.apache.org/viewvc/webservices/rampart/scratch/c/saml/include/SAML.h?rev=584526&r1=584525&r2=584526&view=diff
==============================================================================
--- webservices/rampart/scratch/c/saml/include/SAML.h (original)
+++ webservices/rampart/scratch/c/saml/include/SAML.h Sun Oct 14 03:44:13 2007
@@ -64,6 +64,7 @@
 
 #define SAML_AUDIENCE						"Audience"
 #define SAML_AUDIENCE_RESTRICTION_CONDITION_TYPE "AudienceRestrictionConditionType" 
+#define SAML_AUDIENCE_RESTRICTION_CONDITION "AudienceRestrictionCondition"
 
 #define SAML_AUTHENTICATION_METHOD			"AuthenticationMethod"
 #define SAML_AUTHENTICATION_INSTANT			"AuthenticationInstant"
@@ -118,7 +119,7 @@
 
 typedef struct saml_audi_restriction_cond_s
 {
-    axutil_array_list_t *audiences;    
+    axutil_array_list_t *audiences;	
 } saml_audi_restriction_cond_t;
 
 typedef struct saml_advise_s
@@ -355,7 +356,7 @@
 AXIS2_EXTERN saml_stmt_t * AXIS2_CALL saml_stmt_create(axutil_env_t *env);
 AXIS2_EXTERN void AXIS2_CALL saml_stmt_free(saml_stmt_t *stmt, axutil_env_t *env);
 AXIS2_EXTERN int AXIS2_CALL saml_stmt_build(saml_stmt_t *stmt, axiom_node_t *node, axutil_env_t *env);
-AXIS2_EXTERN int AXIS2_CALL saml_stmt_to_om(saml_stmt_t *stmt, axiom_node_t *parent, axutil_env_t *env);
+AXIS2_EXTERN axiom_node_t * AXIS2_CALL saml_stmt_to_om(saml_stmt_t *stmt, axiom_node_t *parent, axutil_env_t *env);
 
 AXIS2_EXTERN int AXIS2_CALL saml_id_init(saml_id_t *id, axutil_env_t *env);
 AXIS2_EXTERN int AXIS2_CALL saml_id_generate_random_bytes(saml_id_t *id, axutil_env_t *env);
@@ -400,4 +401,14 @@
 AXIS2_EXTERN void AXIS2_CALL saml_condition_free(saml_condition_t *cond, axutil_env_t *env);
 AXIS2_EXTERN int AXIS2_CALL saml_condition_build(saml_condition_t *cond, axiom_node_t *node, axutil_env_t *env);
 AXIS2_EXTERN axiom_node_t * AXIS2_CALL saml_condition_to_om(saml_condition_t *cond, axiom_node_t *parent, axutil_env_t * env);
+
+AXIS2_EXTERN int AXIS2_CALL saml_audi_restriction_cond_build(saml_audi_restriction_cond_t *arc, axiom_node_t *node, axutil_env_t *env);
+AXIS2_EXTERN axiom_node_t *AXIS2_CALL saml_audi_restriction_cond_to_om(saml_audi_restriction_cond_t *cond, axiom_node_t *parent, axutil_env_t * env);
+AXIS2_EXTERN void AXIS2_CALL saml_audi_restriction_cond_free(saml_audi_restriction_cond_t *arc, axutil_env_t * env);
+AXIS2_EXTERN saml_audi_restriction_cond_t * AXIS2_CALL saml_audi_restriction_cond_create(axutil_env_t *env);
+
+AXIS2_EXTERN saml_action_t * AXIS2_CALL saml_action_create(axutil_env_t *env);
+AXIS2_EXTERN void AXIS2_CALL saml_action_free(saml_action_t *action, axutil_env_t *env);
+AXIS2_EXTERN int AXIS2_CALL saml_action_build(saml_action_t *action, axiom_node_t *node, axutil_env_t *env);
+AXIS2_EXTERN axiom_node_t * AXIS2_CALL saml_action_to_om(saml_action_t *action, axiom_node_t *parent, axutil_env_t *env);
 #endif 

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=584526&r1=584525&r2=584526&view=diff
==============================================================================
--- webservices/rampart/scratch/c/saml/include/saml_req.h (original)
+++ webservices/rampart/scratch/c/saml/include/saml_req.h Sun Oct 14 03:44:13 2007
@@ -14,11 +14,16 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
+#ifndef SAML_REQ_H
+#define SAML_REQ_H
+
 #include <SAML.h>
 
 #define SAML_REQUEST_ID        "RequestID"
 #define SAML_SIGNATURE        "Signature"
 #define SAML_SUBJECT_QUERY    "SubjectQuery"
+#define SAML_ATTRIBUTE_QUERY  "AttributeQuery"
 #define SAML_AUTHENTICATION_QUERY    "AuthenticationQuery"
 #define SAML_AUTHORIZATION_DECISION_QUERY    "AuthorizationDecisionQuery"
 #define SAML_ASSERTION_ID_REF        "AssertionIDReference"
@@ -33,17 +38,27 @@
 #define SAML_STATUS_DETAIL        "StatusDetail"
 #define SAML_STATUS_VALUE        "Value"
 #define SAML_STATUS                "Status"
-
+#define SAML_PROTOCOL_NMSP			"urn:oasis:names:tc:SAML:1.0:protocol"
+#define SAML_PROTOCOL_PREFIX		"samlp"
+#define SAML_REQUEST				"Request"
+#define SAML_RESPONSE				"Response"
 /*A code representing the status of the corresponding request*/
 typedef struct saml_status
 {
     axutil_qname_t *status_value;
     axis2_char_t *status_code;
     axis2_char_t *status_msg;
-    axis2_char_t *status_detail;
+    axutil_array_list_t *status_detail;
+
 }saml_status_t;
 
 
+typedef struct saml_query
+{
+	axis2_char_t *type;
+	void *query;
+}saml_query_t;
+
 typedef struct saml_subject_query
 {
     saml_subject_t *subject;
@@ -96,19 +111,13 @@
     axutil_array_list_t *saml_asserion_id_ref;
     
     axutil_array_list_t *saml_artifacts;
-
-    saml_subject_query_t *subject_query;
-
-    saml_authentication_query_t *authentication_query;
-
-    saml_autho_decision_query_t *autho_decision_query;
-    
-    saml_attr_query_t *attribute_query;
+	
+	saml_query_t *query;
 }saml_request_t;
 
 typedef struct saml_response
 {
-    saml_id_t responce_id;
+    saml_id_t response_id;
 
     axis2_char_t *major_version;
 
@@ -116,7 +125,7 @@
     
     axis2_char_t *recepient;
 
-    saml_id_t request_responce_id;
+    axis2_char_t  *request_response_id;
 
     axutil_date_time_t *issue_instant;
 
@@ -125,38 +134,55 @@
     saml_status_t *status;
 
     axutil_array_list_t *saml_assertions;
-}saml_responce_t;
+}saml_response_t;
 
 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 int AXIS2_CALL saml_responce_init(saml_responce_t *responce, axutil_env_t *env);
-AXIS2_EXTERN int AXIS2_CALL saml_responce_uninit(saml_responce_t *responce, axutil_env_t *env);
-AXIS2_EXTERN int AXIS2_CALL saml_responce_build(saml_responce_t *responce, axiom_node_t *node, axutil_env_t *env);
-
+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 int AXIS2_CALL saml_query_init(saml_query_t *query, axutil_env_t *env);
+AXIS2_EXTERN int AXIS2_CALL saml_query_uninit(saml_query_t *query, axutil_env_t *env);
+AXIS2_EXTERN int AXIS2_CALL saml_query_build(saml_query_t *query, axiom_node_t *node, axutil_env_t *env);
+AXIS2_EXTERN saml_query_t* AXIS2_CALL saml_query_create(axutil_env_t *env);
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL saml_query_to_om(saml_query_t *query, axiom_node_t *parent, axutil_env_t *env);
 
 AXIS2_EXTERN saml_subject_query_t* AXIS2_CALL saml_subject_query_create(axutil_env_t *env);
-AXIS2_EXTERN saml_authentication_query_t* AXIS2_CALL saml_authentication_query_create(axutil_env_t *env);
-AXIS2_EXTERN saml_attr_query_t* AXIS2_CALL saml_attr_query_create(axutil_env_t *env);
-AXIS2_EXTERN saml_autho_decision_query_t* AXIS2_CALL saml_autho_decision_query_create(axutil_env_t *env);
-
 AXIS2_EXTERN int AXIS2_CALL saml_subject_query_init(saml_subject_query_t* subject_query, axutil_env_t *env);
 AXIS2_EXTERN int AXIS2_CALL saml_subject_query_build(saml_subject_query_t* subject_query, axiom_node_t *node, axutil_env_t *env);
 AXIS2_EXTERN int AXIS2_CALL saml_subject_query_uninit(axutil_env_t *env);
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL saml_subject_query_to_om(saml_subject_query_t *subject_query, 
+															   axiom_node_t *parent, 
+															   axutil_env_t *env);
 
+AXIS2_EXTERN saml_authentication_query_t* AXIS2_CALL saml_authentication_query_create(axutil_env_t *env);
 AXIS2_EXTERN int AXIS2_CALL saml_authentication_query_init(saml_authentication_query_t *authentication_query, axutil_env_t *env);
 AXIS2_EXTERN int AXIS2_CALL saml_authentication_query_build(saml_authentication_query_t* authentication_query, axiom_node_t *node, axutil_env_t *env);
 AXIS2_EXTERN int AXIS2_CALL saml_authentication_query_uninit(axutil_env_t *env);
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL saml_authentication_query_to_om(saml_authentication_query_t *authentication_query, 
+																	  axiom_node_t *parent, 
+																	  axutil_env_t *env);
 
+AXIS2_EXTERN saml_attr_query_t* AXIS2_CALL saml_attr_query_create(axutil_env_t *env);
 AXIS2_EXTERN int AXIS2_CALL saml_attr_query_init(saml_attr_query_t* attribute_query, axutil_env_t *env);
 AXIS2_EXTERN int AXIS2_CALL saml_attr_query_build(saml_attr_query_t* attribute_query, axiom_node_t *node, axutil_env_t *env);
 AXIS2_EXTERN int AXIS2_CALL saml_attr_query_uninit(axutil_env_t *env);
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL saml_attr_query_to_om(saml_attr_query_t *attribute_query, 
+															axiom_node_t *parent, 
+															axutil_env_t *env);
 
+AXIS2_EXTERN saml_autho_decision_query_t* AXIS2_CALL saml_autho_decision_query_create(axutil_env_t *env);
 AXIS2_EXTERN int AXIS2_CALL saml_autho_decision_query_init(saml_autho_decision_query_t* autho_decision_query, axutil_env_t *env);
 AXIS2_EXTERN int AXIS2_CALL saml_autho_decision_query_build(saml_autho_decision_query_t* autho_decision_query, axiom_node_t *node, axutil_env_t *env);
 AXIS2_EXTERN int AXIS2_CALL saml_autho_decision_query_uninit(axutil_env_t *env);
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL saml_autho_decision_query_to_om(saml_autho_decision_query_t *autho_decision_query, 
+																	  axiom_node_t *parent, 
+																	  axutil_env_t *env);
 
 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);
+#endif 

Added: webservices/rampart/scratch/c/saml/saml_test.vcproj
URL: http://svn.apache.org/viewvc/webservices/rampart/scratch/c/saml/saml_test.vcproj?rev=584526&view=auto
==============================================================================
--- webservices/rampart/scratch/c/saml/saml_test.vcproj (added)
+++ webservices/rampart/scratch/c/saml/saml_test.vcproj Sun Oct 14 03:44:13 2007
@@ -0,0 +1,197 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="saml_test"
+	ProjectGUID="{10D44647-66E0-4DCF-A465-4CD1923D9A47}"
+	RootNamespace="saml_test"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
+				MinimalRebuild="true"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="4"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="2"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="1"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath=".\test_main.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>

Modified: webservices/rampart/scratch/c/saml/src/auth_des_stmt.c
URL: http://svn.apache.org/viewvc/webservices/rampart/scratch/c/saml/src/auth_des_stmt.c?rev=584526&r1=584525&r2=584526&view=diff
==============================================================================
--- webservices/rampart/scratch/c/saml/src/auth_des_stmt.c (original)
+++ webservices/rampart/scratch/c/saml/src/auth_des_stmt.c Sun Oct 14 03:44:13 2007
@@ -18,14 +18,18 @@
 #include <SAML.h>
 
 
-AXIS2_EXTERN int AXIS2_CALL saml_action_init(saml_action_t *action, axutil_env_t *env)
+AXIS2_EXTERN saml_action_t * AXIS2_CALL saml_action_create(axutil_env_t *env)
 {
-	action->data = NULL;
-	action->name_space = NULL;
-	return AXIS2_SUCCESS;
+	saml_action_t *action = AXIS2_MALLOC(env->allocator, sizeof(saml_action_t));
+	if (action)
+	{
+		action->data = NULL;
+		action->name_space = NULL;
+	}
+	return action;
 }
 
-AXIS2_EXTERN int AXIS2_CALL saml_action_uninit(saml_action_t *action, axutil_env_t *env)
+AXIS2_EXTERN void AXIS2_CALL saml_action_free(saml_action_t *action, axutil_env_t *env)
 {
 	if (action->data)
 	{
@@ -35,7 +39,7 @@
 	{
 		AXIS2_FREE(env->allocator, action->name_space);
 	}
-	return AXIS2_SUCCESS;
+	AXIS2_FREE(env->allocator, action);	
 }
 
 AXIS2_EXTERN int AXIS2_CALL saml_action_build(saml_action_t *action, axiom_node_t *node, axutil_env_t *env)
@@ -233,7 +237,7 @@
 			 action = axutil_array_list_get(auth_des_stmt->action, env, i);
 			 if (action)
 			 {
-				saml_action_uninit(action, env);
+				saml_action_free(action, env);
 			 }
 		}
 		axutil_array_list_free(auth_des_stmt->action, env);
@@ -250,6 +254,7 @@
 	axiom_element_t *fce = NULL;
 	axiom_node_t *fcn = NULL;
 	axiom_child_element_iterator_t *ci = NULL;
+	saml_action_t *action = NULL;
 	if (axiom_node_get_node_type(node, env) != AXIOM_ELEMENT || (element = (axiom_element_t *)axiom_node_get_data_element(node, env)) == NULL)
 	{
 		return AXIS2_FAILURE;
@@ -287,7 +292,9 @@
 			}
 			else if (strcmp(axiom_element_get_localname(fce, env), SAML_ACTION) == 0)
 			{
-				axutil_array_list_add(auth_des_stmt->action, env, axiom_element_get_text(fce, env, fcn));									
+				action = saml_action_create(env);
+				saml_action_build(action, fcn, env);
+				axutil_array_list_add(auth_des_stmt->action, env, action);									
 			}
 			else if (strcmp(axiom_element_get_localname(fce, env), SAML_EVIDENCE) == 0)
 			{
@@ -350,4 +357,92 @@
 		}
 	}
 	return NULL;
+}
+
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL saml_auth_desicion_stmt_get_resource(saml_auth_desicion_stmt_t *auth_des_stmt, axutil_env_t *env)
+{
+	return auth_des_stmt->resource;
+}
+
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL saml_auth_desicion_stmt_get_desicion(saml_auth_desicion_stmt_t *auth_des_stmt, axutil_env_t *env)
+{
+	return auth_des_stmt->decision;
+}
+
+AXIS2_EXTERN axutil_array_list_t * AXIS2_CALL saml_auth_desicion_stmt_get_actions(saml_auth_desicion_stmt_t *auth_des_stmt, axutil_env_t *env)
+{
+	return auth_des_stmt->action;
+}
+
+AXIS2_EXTERN saml_evidence_t * AXIS2_CALL saml_auth_desicion_stmt_get_evidence(saml_auth_desicion_stmt_t *auth_des_stmt, axutil_env_t *env)
+{
+	return auth_des_stmt->evidence;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_auth_desicion_stmt_set_resource(saml_auth_desicion_stmt_t *auth_des_stmt, axutil_env_t *env, axis2_char_t *resource)
+{
+	if (auth_des_stmt->resource)
+	{
+		AXIS2_FREE(env->allocator, auth_des_stmt->resource);
+	}
+	auth_des_stmt->resource = resource;
+	return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_auth_desicion_stmt_set_desicion(saml_auth_desicion_stmt_t *auth_des_stmt, axutil_env_t *env, axis2_char_t *desicion)
+{
+	if (auth_des_stmt->decision)
+	{
+		AXIS2_FREE(env->allocator, auth_des_stmt->decision);
+	}
+	auth_des_stmt->decision = desicion;
+	return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_auth_desicion_stmt_set_actions(saml_auth_desicion_stmt_t *auth_des_stmt, axutil_env_t * env, axutil_array_list_t *list)
+{
+	int i = 0, size = 0;
+	saml_action_t *action = NULL;
+	if (auth_des_stmt->action)
+	{
+		size = axutil_array_list_size(auth_des_stmt->action, env);
+		for (i = 0; i <size; i++)
+		{
+			action = axutil_array_list_get(auth_des_stmt->action, env, i);
+			if (action)
+			{
+				AXIS2_FREE(env->allocator, action);
+			}
+		}
+	}
+	auth_des_stmt->action = list;
+	return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_auth_desicion_stmt_remove_action(saml_auth_desicion_stmt_t *auth_des_stmt, axutil_env_t * env, int index)
+{
+	saml_action_t *action = NULL;
+	if (auth_des_stmt->action && axutil_array_list_size(auth_des_stmt->action, env) > index)
+	{
+		action = axutil_array_list_remove(auth_des_stmt->action, env, index);			
+		if (action)
+		{
+			AXIS2_FREE(env->allocator, action);
+		}
+		return AXIS2_SUCCESS;		
+	}
+	else
+	{
+		return AXIS2_FAILURE;
+	}
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_auth_desicion_stmt_add_action(saml_auth_desicion_stmt_t *auth_des_stmt, axutil_env_t * env, saml_action_t *action)
+{
+	if (!auth_des_stmt->action)
+	{
+		auth_des_stmt->action = axutil_array_list_create(env, SAML_ARRAY_LIST_DEF);
+	}
+	axutil_array_list_add(auth_des_stmt->action, env, action);
+	return AXIS2_SUCCESS;
 }

Modified: webservices/rampart/scratch/c/saml/src/auth_smt.c
URL: http://svn.apache.org/viewvc/webservices/rampart/scratch/c/saml/src/auth_smt.c?rev=584526&r1=584525&r2=584526&view=diff
==============================================================================
--- webservices/rampart/scratch/c/saml/src/auth_smt.c (original)
+++ webservices/rampart/scratch/c/saml/src/auth_smt.c Sun Oct 14 03:44:13 2007
@@ -181,6 +181,127 @@
 	return n;
 }
 
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL saml_subject_stmt_get_auth_method(saml_auth_stmt_t *auth_stmt, axutil_env_t *env)
+{
+	return auth_stmt->auth_method;
+}
+
+AXIS2_EXTERN axutil_date_time_t * AXIS2_CALL saml_subject_stmt_get_auth_instant(saml_auth_stmt_t *auth_stmt, axutil_env_t *env)
+{
+	return auth_stmt->auth_instanse;
+}
+
+AXIS2_EXTERN axutil_array_list_t * AXIS2_CALL saml_subject_stmt_get_auth_bindings(saml_auth_stmt_t *auth_stmt, axutil_env_t *env)
+{
+	return auth_stmt->auth_binding;
+}
+
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL saml_subject_stmt_get_subject_ip(saml_auth_stmt_t *auth_stmt, axutil_env_t *env)
+{
+	if (auth_stmt->sub_locality)
+	{
+		return auth_stmt->sub_locality->ip;
+	}
+	return NULL;
+}
+
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL saml_subject_stmt_get_subject_dns(saml_auth_stmt_t *auth_stmt, axutil_env_t *env)
+{
+	if (auth_stmt->sub_locality)
+	{
+		return auth_stmt->sub_locality->dns;
+	}
+	return NULL;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_subject_stmt_set_auth_method(saml_auth_stmt_t *auth_stmt, axutil_env_t *env, axis2_char_t *method)
+{
+	if (auth_stmt->auth_method)
+	{
+		AXIS2_FREE(env->allocator, auth_stmt->auth_method);
+	}
+	auth_stmt->auth_method = method;
+	return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_subject_stmt_set_auth_instant(saml_auth_stmt_t *auth_stmt, axutil_env_t *env, axutil_date_time_t *dt)
+{
+	if (auth_stmt->auth_instanse)
+	{
+		axutil_date_time_free(auth_stmt->auth_instanse, env);
+	}
+	auth_stmt->auth_instanse = dt;
+	return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_subject_stmt_set_auth_bindings(saml_auth_stmt_t *auth_stmt, axutil_env_t *env, axutil_array_list_t *list)
+{
+	int i = 0, size = 0;
+	saml_auth_binding_t *bind = NULL;
+	if (auth_stmt->auth_binding)
+	{
+		size = axutil_array_list_size(auth_stmt->auth_binding, env);
+		for (i = 0; i <size; i++)
+		{
+			bind = axutil_array_list_get(auth_stmt->auth_binding, env, i);
+			if (bind)
+			{
+				saml_auth_binding_free(bind, env);
+			}
+		}
+	}
+	auth_stmt->auth_binding = list;
+	return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_subject_stmt_add_auth_binding(saml_auth_stmt_t *auth_stmt, axutil_env_t *env, saml_auth_binding_t *bind)
+{
+	if (!auth_stmt->auth_binding)
+	{
+		auth_stmt->auth_binding = axutil_array_list_create(env, SAML_ARRAY_LIST_DEF);
+	}
+	axutil_array_list_add(auth_stmt->auth_binding, env, bind);
+	return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_subject_stmt_remove_auth_binding(saml_auth_stmt_t *auth_stmt, axutil_env_t *env, int index)
+{
+	saml_auth_binding_t *bind = NULL;
+	if (auth_stmt->auth_binding && axutil_array_list_size(auth_stmt->auth_binding, env) > index)
+	{
+		bind = axutil_array_list_remove(auth_stmt->auth_binding, env, index);			
+		if (bind)
+		{
+			saml_auth_binding_free(bind, env);	
+		}
+		return AXIS2_SUCCESS;		
+	}
+	else
+	{
+		return AXIS2_FAILURE;
+	}
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_subject_stmt_set_subject_ip(saml_auth_stmt_t *auth_stmt, axutil_env_t *env, axis2_char_t *ip)
+{
+	if (auth_stmt->sub_locality && auth_stmt->sub_locality->ip)
+	{
+		AXIS2_FREE(env->allocator, auth_stmt->sub_locality->ip);
+	}
+	auth_stmt->sub_locality->ip = ip;
+	return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_subject_stmt_set_subject_dns(saml_auth_stmt_t *auth_stmt, axutil_env_t *env, axis2_char_t *dns)
+{
+	if (auth_stmt->sub_locality && auth_stmt->sub_locality->dns)
+	{
+		AXIS2_FREE(env->allocator, auth_stmt->sub_locality->dns);
+	}
+	auth_stmt->sub_locality->dns = dns;
+	return AXIS2_SUCCESS;
+}
+
 
 AXIS2_EXTERN saml_subject_locality_t * AXIS2_CALL saml_subject_locality_create(axutil_env_t *env)
 {
@@ -203,8 +324,7 @@
 	if (sub_locality->ip)
 	{
 		AXIS2_FREE(env->allocator, sub_locality->ip);
-	}
-	
+	}	
 	AXIS2_FREE(env->allocator, sub_locality);	
 }
 
@@ -266,11 +386,6 @@
 			attr = axiom_attribute_create(env, SAML_IP_ADDRESS, sub_locality->ip, NULL);
 			axiom_element_add_attribute(e, env, attr, n);						
 		}
-		else
-		{
-			axiom_element_free(e, env);
-			return NULL;
-		}
 	}	
 	return n;
 }
@@ -350,4 +465,49 @@
 		}
 	}	
 	return n;
+}
+
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL saml_auth_binding_get_authoity_kind(saml_auth_binding_t *auth_binding, axutil_env_t *env)
+{
+	return auth_binding->auth_kind;
+}
+
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL saml_auth_binding_get_binding(saml_auth_binding_t *auth_binding, axutil_env_t *env)
+{
+	return auth_binding->binding;
+}
+
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL saml_auth_binding_get_location(saml_auth_binding_t *auth_binding, axutil_env_t *env)
+{
+	return auth_binding->location;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_auth_binding_set_authority_kind(saml_auth_binding_t *auth_binding, axutil_env_t *env, axis2_char_t *auth_kind)
+{
+	if (auth_binding->auth_kind)
+	{
+		AXIS2_FREE(env->allocator, auth_binding->auth_kind);
+	}
+	auth_binding->auth_kind = auth_kind;
+	return AXIS2_SUCCESS;	
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_auth_binding_set_binding(saml_auth_binding_t *auth_binding, axutil_env_t *env, axis2_char_t *binding)
+{
+	if (auth_binding->binding)
+	{
+		AXIS2_FREE(env->allocator, auth_binding->binding);
+	}
+	auth_binding->binding = binding;
+	return AXIS2_SUCCESS;	
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_auth_binding_set_location(saml_auth_binding_t *auth_binding, axutil_env_t *env, axis2_char_t *location)
+{
+	if (auth_binding->location)
+	{
+		AXIS2_FREE(env->allocator, auth_binding->location);
+	}
+	auth_binding->location = location;
+	return AXIS2_SUCCESS;	
 }

Modified: webservices/rampart/scratch/c/saml/src/condition.c
URL: http://svn.apache.org/viewvc/webservices/rampart/scratch/c/saml/src/condition.c?rev=584526&r1=584525&r2=584526&view=diff
==============================================================================
--- webservices/rampart/scratch/c/saml/src/condition.c (original)
+++ webservices/rampart/scratch/c/saml/src/condition.c Sun Oct 14 03:44:13 2007
@@ -52,7 +52,7 @@
 }
 
 
-AXIS2_EXTERN int AXIS2_CALL saml_audi_restriction_build(saml_audi_restriction_cond_t *arc, axiom_node_t *node, axutil_env_t *env)
+AXIS2_EXTERN int AXIS2_CALL saml_audi_restriction_cond_build(saml_audi_restriction_cond_t *arc, axiom_node_t *node, axutil_env_t *env)
 {	
 	axiom_element_t *element = NULL;
 	axiom_child_element_iterator_t *ci = NULL;
@@ -104,6 +104,59 @@
 	return n;
 }
 
+AXIS2_EXTERN axutil_array_list_t * AXIS2_CALL saml_audi_restriction_cond_get_audiences(saml_audi_restriction_cond_t *cond, axutil_env_t * env)
+{
+	return cond->audiences;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_audi_restriction_cond_set_audiences(saml_audi_restriction_cond_t *cond, axutil_env_t * env, axutil_array_list_t *list)
+{
+	int i = 0, size = 0;
+	char *val = NULL;
+	if (cond->audiences)
+	{
+		size = axutil_array_list_size(cond->audiences, env);
+		for (i = 0; i <size; i++)
+		{
+			val = axutil_array_list_get(cond->audiences, env, i);
+			if (val)
+			{
+				AXIS2_FREE(env->allocator, val);
+			}
+		}
+	}
+	cond->audiences = list;
+	return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_audi_restriction_cond_remove_audiences(saml_audi_restriction_cond_t *cond, axutil_env_t * env, int index)
+{
+	axis2_char_t *val = NULL;
+	if (cond->audiences && axutil_array_list_size(cond->audiences, env) > index)
+	{
+		val = axutil_array_list_remove(cond->audiences, env, index);			
+		if (cond)
+		{
+			AXIS2_FREE(env->allocator, val);
+		}
+		return AXIS2_SUCCESS;		
+	}
+	else
+	{
+		return AXIS2_FAILURE;
+	}
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_audi_restriction_cond_add_audience(saml_audi_restriction_cond_t *cond, axutil_env_t * env, axis2_char_t *audience)
+{
+	if (!cond->audiences)
+	{
+		cond->audiences = axutil_array_list_create(env, SAML_ARRAY_LIST_DEF);
+	}
+	axutil_array_list_add(cond->audiences, env, audience);
+	return AXIS2_SUCCESS;
+}
+
 AXIS2_EXTERN saml_condition_t * AXIS2_CALL saml_condition_create(axutil_env_t *env)
 {
 	saml_condition_t *cond = AXIS2_MALLOC(env->allocator, sizeof(saml_condition_t));
@@ -124,24 +177,20 @@
 	AXIS2_FREE(env->allocator, cond);	
 }
 
-AXIS2_EXTERN int AXIS2_CALL saml_condition_get_type(saml_condition_t *cond, axiom_node_t *node, axutil_env_t *env)
-{
-	return cond->type;
-}
-
 AXIS2_EXTERN int AXIS2_CALL saml_condition_build(saml_condition_t *cond, axiom_node_t *node, axutil_env_t *env)
 {
-	axiom_element_t *element = NULL;
-	axiom_child_element_iterator_t *ci = NULL;
-	axis2_char_t *type_val = NULL;
-	axutil_qname_t *type = NULL;
+	axiom_element_t *element = NULL;	
+	axis2_char_t *locname = NULL;
 	if (axiom_node_get_node_type(node, env) != AXIOM_ELEMENT || (element = (axiom_element_t *)axiom_node_get_data_element(node, env)) == NULL)
 	{
 		return AXIS2_FAILURE;
 	}
-	type = axutil_qname_create(env, SAML_XML_TYPE, SAML_XSI_NS, SAML_XSI);
-	type_val = axiom_element_get_attribute_value(element, env, type);
-	return AXIS2_SUCCESS;
+	locname = axiom_element_get_localname(element, env);
+	if (axutil_strcmp(locname, SAML_AUDIENCE_RESTRICTION_CONDITION))
+	{
+		return saml_audi_restriction_cond_build(cond->cond, node, env);
+	}
+	return AXIS2_FAILURE;
 }
 
 AXIS2_EXTERN axiom_node_t * AXIS2_CALL saml_condition_to_om(saml_condition_t *cond, axiom_node_t *parent, axutil_env_t * env)
@@ -151,4 +200,31 @@
 		return saml_audi_restriction_cond_to_om(cond->cond, parent, env);		
 	}
 	return NULL;
+}
+
+AXIS2_EXTERN saml_cond_type_t AXIS2_CALL saml_condition_get_type(saml_condition_t *cond, axutil_env_t *env)
+{
+	return cond->type;
+}
+
+AXIS2_EXTERN void * AXIS2_CALL saml_condition_get_condition(saml_condition_t *cond, axutil_env_t *env)
+{
+	return cond->cond;
+}
+
+AXIS2_EXTERN int saml_condition_set_type(saml_condition_t *cond, axutil_env_t *env, saml_cond_type_t type)
+{
+	cond->type = type;
+	return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int saml_condition_set_condition(saml_condition_t *cond, axutil_env_t *env, void * condition, saml_cond_type_t type)
+{
+	if (cond->type == SAML_COND_AUDI_RESTRICTION)
+	{
+		saml_audi_restriction_cond_free(cond->cond, env);		
+	}
+	cond->type = type;
+	cond->cond = condition;
+	return AXIS2_SUCCESS;
 }

Modified: webservices/rampart/scratch/c/saml/src/saml_request.c
URL: http://svn.apache.org/viewvc/webservices/rampart/scratch/c/saml/src/saml_request.c?rev=584526&r1=584525&r2=584526&view=diff
==============================================================================
--- webservices/rampart/scratch/c/saml/src/saml_request.c (original)
+++ webservices/rampart/scratch/c/saml/src/saml_request.c Sun Oct 14 03:44:13 2007
@@ -31,8 +31,8 @@
 
 AXIS2_EXTERN int AXIS2_CALL saml_subject_query_init(saml_subject_query_t *subject_query, axutil_env_t *env)
 {
-	subject_query->subject = NULL:
-	return AXIS2_SUCESS;
+	subject_query->subject = NULL;
+	return AXIS2_SUCCESS;
 }
 
 
@@ -68,7 +68,7 @@
 															sizeof(saml_subject_t));
 		saml_subject_init(attribute_query->subject, env);
 		
-		attribute_query->attr_desigs = axutil_array_list_create(env, ARRAY_DEF);
+		attribute_query->attr_desigs = axutil_array_list_create(env, AXIS2_ARRAY_LIST_DEFAULT_CAPACITY);
 		
 	}
 	return attribute_query;
@@ -94,12 +94,9 @@
 		saml_subject_init(autho_decision_query->subject, env);
 		autho_decision_query->resource = NULL;
 
-		autho_decision_query->saml_actions = axutil_array_list_create(env, ARRAY_DEF);
-
-		autho_decision_query->evidence = (saml_evidence_t*)AXIS2_MALLOC(env->allocator,
-															sizeof(saml_evidence_t));
+		autho_decision_query->saml_actions = axutil_array_list_create(env, AXIS2_ARRAY_LIST_DEFAULT_CAPACITY);
 
-		saml_evidence_init(autho_decision_query->evidence, env);
+		autho_decision_query->evidence = saml_evidence_create(env);
 	}
 
 	return autho_decision_query;
@@ -148,7 +145,7 @@
 			if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env), 
 																		SAML_SUBJECT)))
 			{
-				return 	saml_subject_build(subject_query->subject, element, env);
+				return 	saml_subject_build(subject_query->subject, child_node, env);
 			}
 		}
 	}
@@ -157,6 +154,27 @@
 	
 }
 
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL saml_subject_query_to_om(saml_subject_query_t *subject_query, 
+															   axiom_node_t *parent, 
+															   axutil_env_t *env)
+{
+
+	axiom_element_t *e = NULL;
+	axiom_node_t *n = NULL;	
+	axiom_namespace_t *ns = NULL;
+	axiom_attribute_t *attr = NULL;
+	saml_assertion_t *assertion = NULL;
+
+		ns = axiom_namespace_create(env, SAML_PROTOCOL_NMSP, SAML_PROTOCOL_PREFIX);
+		e = axiom_element_create(env, parent, SAML_SUBJECT_QUERY, ns, &n);
+
+		if(e)
+		{
+			saml_subject_to_om(subject_query->subject, n, env);
+		}
+	return n;
+}
+
 AXIS2_EXTERN int AXIS2_CALL saml_authentication_query_build(saml_authentication_query_t* authentication_query, 
 															axiom_node_t *node, 
 															axutil_env_t *env)
@@ -210,7 +228,7 @@
 			if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env), 
 																	SAML_SUBJECT)))
 			{
-				saml_subject_build(authentication_query->subject, element, env);
+				saml_subject_build(authentication_query->subject, child_node, env);
 			}
 		}
 	 
@@ -221,6 +239,33 @@
 
 }
 
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL saml_authentication_query_to_om(saml_authentication_query_t *authentication_query, 
+																	  axiom_node_t *parent, 
+																	  axutil_env_t *env)
+{
+	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_attribute_t *attr = NULL;
+		
+	ns = axiom_namespace_create(env, SAML_PROTOCOL_NMSP, SAML_PROTOCOL_PREFIX);
+	e = axiom_element_create(env, parent, SAML_AUTHENTICATION_QUERY, ns, &n);
+
+		if(e)
+		{
+			saml_subject_to_om(authentication_query->subject, n, env);
+
+			if(authentication_query->auth_method)
+			{
+				attr = axiom_attribute_create(env, SAML_AUTHENTICATION_METHOD, authentication_query->auth_method, NULL);
+				axiom_element_add_attribute(e, env, attr, n);
+			}
+		}
+	return n;
+
+}
+
 AXIS2_EXTERN int AXIS2_CALL saml_autho_decision_query_build(saml_autho_decision_query_t* autho_decision_query, 
 															axiom_node_t *node, 
 															axutil_env_t *env)
@@ -274,7 +319,7 @@
 			if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env), 
 																		SAML_SUBJECT)))
 			{
-				saml_subject_build(autho_decision_query->subject, element, env);
+				saml_subject_build(autho_decision_query->subject, child_node, env);
 			}
 			
 			else if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env), 
@@ -282,13 +327,13 @@
 			{
 				action = (saml_action_t*)AXIS2_MALLOC(env->allocator, sizeof(saml_action_t));
 				saml_action_init(action, env);
-				saml_action_build(action, element, env);
+				saml_action_build(action, child_node, env);
 				axutil_array_list_add(autho_decision_query->saml_actions, env, action);
 			}
 			else if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env), 
 																		SAML_EVIDENCE)))
 			{
-				saml_evidence_build(autho_decision_query->evidence, element, env);
+				saml_evidence_build(autho_decision_query->evidence, child_node, env);
 			}
 		}
 	}
@@ -300,6 +345,50 @@
 	
 }
 
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL saml_autho_decision_query_to_om(saml_autho_decision_query_t *autho_decision_query, 
+																	  axiom_node_t *parent, 
+																	  axutil_env_t *env)
+{
+	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_attribute_t *attr = NULL;
+	saml_action_t *action;
+
+	ns = axiom_namespace_create(env, SAML_PROTOCOL_NMSP, SAML_PROTOCOL_PREFIX);
+	e = axiom_element_create(env, parent, SAML_AUTHORIZATION_DECISION_QUERY, ns, &n);
+
+		if(e)
+		{
+			saml_subject_to_om(autho_decision_query->subject, n, env);
+
+			if(autho_decision_query->resource)
+			{
+				attr = axiom_attribute_create(env, SAML_RESOURCE, autho_decision_query->resource, NULL);
+				axiom_element_add_attribute(e, env, attr, n);
+			}
+			if(autho_decision_query->saml_actions)
+			{
+				size = axutil_array_list_size(autho_decision_query->saml_actions, env);
+
+				for( i ; i < size ; i++)
+				{
+					action = (saml_action_t*)axutil_array_list_get(autho_decision_query->saml_actions, env, i);
+					saml_action_to_om(action, n, env);
+				}
+			}
+			if(autho_decision_query->evidence)
+			{
+				saml_evidence_to_om(autho_decision_query->evidence, n, env);
+			}
+		}
+	return n;
+
+
+
+}
+
 AXIS2_EXTERN int AXIS2_CALL saml_attr_query_build(saml_attr_query_t* attribute_query, 
 												  axiom_node_t *node, 
 												  axutil_env_t *env)
@@ -310,7 +399,7 @@
 	axiom_child_element_iterator_t *iterator = NULL;
 	axiom_node_t *child_node;
 	axutil_qname_t *qname;
-
+	saml_attr_desig_t *attr_desig = NULL;
 	if (axiom_node_get_node_type(node, env) != AXIOM_ELEMENT)
 	{
 		return AXIS2_FAILURE;
@@ -354,7 +443,7 @@
 			if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env), 
 																	SAML_SUBJECT)))
 			{
-				saml_subject_build(attribute_query->subject, element, env);
+				saml_subject_build(attribute_query->subject, child_node, env);
 			}
 			
 			else if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env), 
@@ -363,7 +452,7 @@
 				saml_attr_desig_t *attr_desig = (saml_attr_desig_t*)AXIS2_MALLOC(env->allocator,
 																			sizeof(saml_attr_desig_t));
 				saml_attr_desig_init(attr_desig, env);
-				if( AXIS2_SUCCESS == saml_attr_desig_build(attr_desig, element, env))
+				if( AXIS2_SUCCESS == saml_attr_desig_build(attr_desig, child_node, env))
 				{
 					axutil_array_list_add(attribute_query->attr_desigs,env, attr_desig);
 				}
@@ -377,12 +466,155 @@
 	
 }
 
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL saml_attr_query_to_om(saml_attr_query_t *attribute_query, 
+															axiom_node_t *parent, 
+															axutil_env_t *env)
+{
+	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_attribute_t *attr = NULL;
+	saml_attr_desig_t *attr_desig = NULL;
+
+	ns = axiom_namespace_create(env, SAML_PROTOCOL_NMSP, SAML_PROTOCOL_PREFIX);
+	e = axiom_element_create(env, parent, SAML_ATTRIBUTE_QUERY, ns, &n);
+
+		if(e)
+		{
+			saml_subject_to_om(attribute_query->subject, n, env);
+
+			if(attribute_query->resource)
+			{
+				attr = axiom_attribute_create(env, SAML_RESOURCE, attribute_query->resource, NULL);
+				axiom_element_add_attribute(e, env, attr, n);
+			}
+			if(attribute_query->attr_desigs)
+			{
+				size = axutil_array_list_size(attribute_query->attr_desigs, env);
+
+				for( i ; i < size ; i++)
+				{
+					attr_desig = (saml_attr_desig_t*)axutil_array_list_get(attribute_query->attr_desigs, env, i);
+					saml_attr_desig_to_om(attr_desig, n, env);
+				}
+			}
+		}
+	return n;
+
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_query_init(saml_query_t *query, axutil_env_t *env)
+{
+	if(query)
+	{
+		query->query  = NULL;
+		query->type = NULL;
+		return AXIS2_SUCCESS;
+	}
+	return AXIS2_FAILURE;
+	
+}
+AXIS2_EXTERN int AXIS2_CALL saml_query_uninit(saml_query_t *query, axutil_env_t *env)
+{
+	if(query->query)
+	{
+		AXIS2_FREE(env->allocator, query->query);
+	}
+	if(query->type)
+	{
+		AXIS2_FREE(env->allocator, query->type);
+	}
+	return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_query_build(saml_query_t *query, axiom_node_t *node, axutil_env_t *env)
+{
+	if(!axutil_strcmp(query->type,SAML_SUBJECT_QUERY))
+	{
+		query->query = saml_subject_query_create(env);
+		if(query->query)
+		{
+			saml_subject_query_build((saml_subject_query_t*)query->query, node, env);
+			return AXIS2_SUCCESS;
+		}
+		else 
+			return AXIS2_FAILURE;
+	}
+	if(!axutil_strcmp(query->type, SAML_AUTHENTICATION_QUERY))
+	{
+		query->query = saml_authentication_query_create(env);
+		if(query->query)
+		{	
+			saml_authentication_query_build((saml_authentication_query_t*)query->query, node, env);
+			return AXIS2_SUCCESS;
+		}
+		else 
+			return AXIS2_FAILURE;
+	}
+	if(!axutil_strcmp(query->type, SAML_ATTRIBUTE_QUERY))
+	{
+		query->query = saml_attr_query_create(env);
+		if(query->query)
+		{
+			saml_attr_query_build((saml_attr_query_t*)query->query, node, env);
+			return AXIS2_SUCCESS;
+		}
+		else
+			return AXIS2_FAILURE;
+	}
+	if(!axutil_strcmp(query->type, SAML_AUTHORIZATION_DECISION_QUERY))
+	{
+		query->query = saml_autho_decision_query_create(env);
+		if(query->query)
+		{
+			saml_autho_decision_query_build((saml_autho_decision_query_t*)query->query, node, env);
+			return AXIS2_SUCCESS;
+		}
+		else 
+			return AXIS2_FAILURE;
+	}
+}
+
+AXIS2_EXTERN saml_query_t* AXIS2_CALL saml_query_create(axutil_env_t *env)
+{
+	saml_query_t* query = NULL;
+	AXIS2_MALLOC(env->allocator, sizeof(saml_query_t));
+	return query;
+}
+
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL saml_query_to_om(saml_query_t *query, axiom_node_t *parent, axutil_env_t *env)
+{
+	axiom_node_t *node;
+
+	if(!axutil_strcmp(query->type,SAML_SUBJECT_QUERY))
+	{
+		node = saml_subject_query_to_om((saml_subject_query_t*)query->query, parent, env);
+		return node;
+	}
+	if(!axutil_strcmp(query->type, SAML_AUTHENTICATION_QUERY))
+	{
+		node = saml_authentication_query_to_om((saml_authentication_query_t*)query->query, parent, env);
+		return node;
+
+	}
+	if(!axutil_strcmp(query->type, SAML_ATTRIBUTE_QUERY))
+	{
+		node = saml_attr_query_to_om((saml_attr_query_t*)query->query, parent, env);
+		return node;
+		
+	}
+	if(!axutil_strcmp(query->type, SAML_AUTHORIZATION_DECISION_QUERY))
+	{
+		node = saml_autho_decision_query_to_om((saml_autho_decision_query_t*)query->query, parent, env);
+		return node;
+	}
+
+}
+
 AXIS2_EXTERN int AXIS2_CALL saml_request_init(saml_request_t *request, axutil_env_t *env)
 {
-	request->attribute_query = NULL;
-	request->authentication_query = NULL;
-	request->autho_decision_query = NULL;
-	request->subject_query = NULL;
+	request->query = NULL;
 	request->issue_instant = NULL;
 	request->major_version = NULL;
 	request->minor_version = NULL;
@@ -396,23 +628,9 @@
 
 AXIS2_EXTERN int AXIS2_CALL saml_request_uninit(saml_request_t *request, axutil_env_t *env)
 {
-	if(request->attribute_query)
-	{
-		AXIS2_FREE(env->allocator, request->attribute_query);
-	}
-	if(request->authentication_query)
-	{
-		AXIS2_FREE(env->allocator, request->authentication_query);
-
-	}
-	if(request->autho_decision_query)
-	{
-		AXIS2_FREE(env->allocator, request->autho_decision_query);
-
-	}
-	if(request->subject_query)
+	if(request->query)
 	{
-		AXIS2_FREE(env->allocator, request->subject_query);
+		AXIS2_FREE(env->allocator, request->query);
 	}
 	if(request->issue_instant)
 	{
@@ -438,7 +656,7 @@
 	{
 		axutil_array_list_free(request->saml_asserion_id_ref, env);
 	}
-
+	return AXIS2_SUCCESS;
 }
 
 AXIS2_EXTERN int AXIS2_CALL saml_request_build(saml_request_t *request, 
@@ -451,6 +669,7 @@
 	axiom_child_element_iterator_t *iterator = NULL;
 	axiom_node_t *child_node;
 	axutil_qname_t *qname;
+	axis2_char_t *element_local_name = NULL;
 	if (axiom_node_get_node_type(node, env) != AXIOM_ELEMENT)
 	{
 		return AXIS2_FAILURE;
@@ -500,10 +719,7 @@
 		
 		}
 	}
-
-
 	// Request elements
-
 	iterator = axiom_element_get_child_elements(element, env, node);
 	
 	if(iterator)
@@ -513,9 +729,8 @@
 		
 			child_node = axiom_child_element_iterator_next(iterator, env);
 			element = (axiom_element_t *)axiom_node_get_data_element(child_node, env);
-
-			if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env), 
-																		SAML_RESPOND_WITH)))
+			element_local_name = axiom_element_get_localname(element, env);
+			if(element != NULL && !(axutil_strcmp(element_local_name, SAML_RESPOND_WITH)))
 			{
 				
 				axutil_array_list_add(request->saml_responds, 
@@ -523,38 +738,55 @@
 					axiom_element_get_qname(element, env, child_node));
 
 			}
-			else if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env), 
-																		SAML_SIGNATURE)))
+			else if(element != NULL && !(axutil_strcmp(element_local_name,SAML_SIGNATURE)))
 			{
 				//To do
 			}
-			else if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env), 
-																		SAML_SUBJECT_QUERY)))
+			else if(element != NULL && !(axutil_strcmp(element_local_name, SAML_SUBJECT_QUERY)))
 			{
-				request->subject_query = saml_subject_query_create(env);
-				saml_subject_query_build(request->subject_query, child_node, env);
+				request->query = saml_query_create(env);
+				if(request->query)
+				{
+					request->query->type = element_local_name;
+					saml_query_build(request->query, child_node, env);
+
+				}
 			}
-			else if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env), 
-																		SAML_AUTHENTICATION_QUERY)))
+			else if(element != NULL && !(axutil_strcmp(element_local_name,SAML_AUTHENTICATION_QUERY)))
 			{
-				request->authentication_query = saml_authentication_query_create(env);
-				saml_authentication_query_build(request->authentication_query, child_node, env);
+				request->query = saml_query_create(env);
+				if(request->query)
+				{
+					request->query->type = element_local_name;
+					saml_query_build(request->query, child_node, env);
+				}
 			}
-			else if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env), 
-																		SAML_AUTHORIZATION_DECISION_QUERY)))
+			else if(element != NULL && !(axutil_strcmp(element_local_name,SAML_AUTHORIZATION_DECISION_QUERY)))
 			{
-				request->autho_decision_query = saml_autho_decision_query_create(env);
-				saml_autho_decision_query_build(request->autho_decision_query, child_node, env);
+				request->query = saml_query_create(env);
+				if(request->query)
+				{
+					request->query->type = element_local_name;
+					saml_query_build(request->query, child_node, env);
+				}
 			}
-			else if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env), 
-																		SAML_ASSERTION_ID_REF)))
+			else if(element != NULL && !(axutil_strcmp(element_local_name, SAML_ATTRIBUTE_QUERY)))
 			{
-				//To do
+				request->query = saml_query_create(env);
+				if(request->query)
+				{
+					request->query->type = element_local_name;
+					saml_query_build(request->query, child_node, env);
+				}
 			}
-			else if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env), 
-																		SAML_ASSERTION_ARTIFACT)))
+			else if(element != NULL && !(axutil_strcmp(element_local_name,SAML_ASSERTION_ID_REFERENCE)))
+			{
+				axutil_array_list_add(request->saml_asserion_id_ref, 
+					env, 
+					axiom_element_get_text(element, env, child_node));
+			}
+			else if(element != NULL && !(axutil_strcmp(element_local_name, SAML_ASSERTION_ARTIFACT)))
 			{
-				//To do
 				axutil_array_list_add(request->saml_artifacts, 
 					env, 
 					axiom_element_get_text(element, env, child_node));
@@ -565,6 +797,103 @@
 
 	return AXIS2_SUCCESS;
 
+
+}
+
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL saml_request_to_om(saml_request_t *request, 
+														 axiom_node_t *parent, 
+														 axutil_env_t *env)
+{
+	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_attribute_t *attr = NULL;
+	saml_assertion_t *assertion = NULL;
+	axutil_qname_t *qname;
+	axis2_char_t *artifact;
+
+		ns = axiom_namespace_create(env, SAML_PROTOCOL_NMSP, SAML_PROTOCOL_PREFIX);
+		e = axiom_element_create(env, parent, SAML_REQUEST, ns, &n);
+
+		if(e)
+		{
+			if(request->request_id.id && request->major_version && request->minor_version && request->issue_instant)
+			{
+				attr = axiom_attribute_create(env, SAML_REQUEST_ID, request->request_id.id, NULL);
+				axiom_element_add_attribute(e, env, attr, n);
+			
+				attr = axiom_attribute_create(env, SAML_MAJORVERSION, request->major_version, NULL);
+				axiom_element_add_attribute(e, env, attr, n);
+			
+				attr = axiom_attribute_create(env, SAML_MINORVERSION, request->major_version, NULL);
+				axiom_element_add_attribute(e, env, attr, n);
+
+				attr = axiom_attribute_create(env, SAML_ISSUE_INSTANT, axutil_date_time_serialize_date_time(request->issue_instant, env), NULL);
+				axiom_element_add_attribute(e, env, attr, n);
+			}
+			else
+			{
+				axiom_element_free(e, env);
+				return NULL;
+			}
+
+			if(request->saml_responds)
+			{
+				size = axutil_array_list_size(request->saml_responds, env);
+
+				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);
+					if(ce)
+					{
+						axiom_element_set_text(ce, env, axutil_qname_to_string(qname, env), cn);
+					}
+				}
+			}
+			if(request->signature)
+			{
+				//To do
+			}
+			if(request->query)
+			{
+				saml_query_to_om(request->query, n, env);
+			}
+			if(request->saml_artifacts)
+			{
+				size = axutil_array_list_size(request->saml_artifacts, env);
+
+				for(i = 0; i < size ; i++)
+				{
+					artifact = (axis2_char_t*) axutil_array_list_get(request->saml_artifacts, env, i);
+
+					ce = axiom_element_create(env, n, SAML_ASSERTION_ARTIFACT, NULL, &cn);
+					if(ce)
+					{
+						axiom_element_set_text(ce, env, artifact, cn);
+					}
+				}
+			}
+			if(request->saml_asserion_id_ref)
+			{
+				size = axutil_array_list_size(request->saml_asserion_id_ref, env);
+
+				for(i = 0; i < size ; i++)
+				{
+					artifact = (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);
+					if(ce)
+					{
+						axiom_element_set_text(ce, env, artifact, cn);
+					}
+				}
+			}
+
+		}
+	return n;
 
 }
 

Modified: webservices/rampart/scratch/c/saml/src/saml_responce.c
URL: http://svn.apache.org/viewvc/webservices/rampart/scratch/c/saml/src/saml_responce.c?rev=584526&r1=584525&r2=584526&view=diff
==============================================================================
--- webservices/rampart/scratch/c/saml/src/saml_responce.c (original)
+++ webservices/rampart/scratch/c/saml/src/saml_responce.c Sun Oct 14 03:44:13 2007
@@ -65,8 +65,7 @@
 			else if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env), 
 																		SAML_STATUS_DETAIL)))
 			{
-				/////
-				status->status_detail = 	axiom_element_get_text(element, env, child_node);
+				axutil_array_list_add(status->status_detail, env, axiom_element_get_text(element, env, child_node));
 			}
 		}
 	}
@@ -74,9 +73,59 @@
 
 }
 
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL saml_status_to_om(saml_status_t *status, 
+														axiom_node_t *parent, 
+														axutil_env_t *env)
+{	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_attribute_t *attr = NULL;
+	saml_assertion_t *assertion = NULL;
+	axutil_qname_t *qname;
+	axis2_char_t *artifact;
 
+	ns = axiom_namespace_create(env, SAML_PROTOCOL_NMSP, SAML_PROTOCOL_PREFIX);
+	e = axiom_element_create(env, parent, SAML_STATUS, ns, &n);
+	
+	if(e)
+	{
+		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);
+				}
+			}
+		}
+		if(status->status_msg)
+		{
+			ce = axiom_element_create(env, n, SAML_STATUS_MESSAGE, ns, &cn);
+			if(ce)
+			{
+				axiom_element_set_text(ce, env, status->status_msg, cn);
+			}
+		}
+		if(status->status_code)
+		{
+			ce = axiom_element_create(env, n, SAML_STATUS_CODE, ns, &cn);
+			if(ce)
+			{
+				axiom_element_set_text(ce, env, status->status_code, cn);
+				attr = axiom_attribute_create(env, SAML_STATUS_VALUE,axutil_qname_to_string(status->status_value, env), ns);
+				axiom_element_add_attribute(ce, env, attr, cn);
+			}
+		}
+	}
+	return n;
+	
+}
 
-AXIS2_EXTERN int AXIS2_CALL saml_responce_build(saml_responce_t *responce,
+AXIS2_EXTERN int AXIS2_CALL saml_response_build(saml_response_t *response,
 												axiom_node_t *node, 
 												axutil_env_t *env)
 {
@@ -113,29 +162,29 @@
 			if(!axutil_strcmp(axiom_attribute_get_localname(attr, env), SAML_RESPONCE_ID))
 			{
 				//to do
-				responce->responce_id.id =  attr_val;
+				response->response_id.id =  attr_val;
 			}
 			if(!axutil_strcmp(axiom_attribute_get_localname(attr, env), SAML_IN_RESPONSE_TO))
 			{
 				//to do
-				responce->request_responce_id.id =  attr_val;
+				response->request_response_id =  attr_val;
 			}
 			else if(!axutil_strcmp(axiom_attribute_get_localname(attr, env), SAML_MAJORVERSION))
 			{
-				responce->major_version = attr_val;
+				response->major_version = attr_val;
 			}
 			else if(!axutil_strcmp(axiom_attribute_get_localname(attr, env), SAML_MINORVERSION))
 			{
-				responce->minor_version = attr_val;
+				response->minor_version = attr_val;
 			}
 			else if(!axutil_strcmp(axiom_attribute_get_localname(attr, env), SAML_ISSUE_INSTANT))
 			{
-				responce->issue_instant = axutil_date_time_create(env);
-				axutil_date_time_deserialize_date(responce->issue_instant, env, attr_val);
+				response->issue_instant = axutil_date_time_create(env);
+				axutil_date_time_deserialize_date(response->issue_instant, env, attr_val);
 			}
 			else if(!axutil_strcmp(axiom_attribute_get_localname(attr, env), SAML_RECEPIENT))
 			{
-				responce->recepient = attr_val;
+				response->recepient = attr_val;
 			}
 			else
 			{
@@ -166,11 +215,11 @@
 			else if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env), 
 																		SAML_STATUS)))
 			{
-				responce->status = (saml_status_t*)AXIS2_MALLOC(env->allocator,
+				response->status = (saml_status_t*)AXIS2_MALLOC(env->allocator,
 															sizeof(saml_status_t));
-				if(responce->status)
+				if(response->status)
 				{
-					saml_status_build(responce->status, child_node, env);
+					saml_status_build(response->status, child_node, env);
 				}
 			}
 			else if(element != NULL && !(axutil_strcmp(axiom_element_get_localname(element, env), 
@@ -180,7 +229,7 @@
 														sizeof(saml_assertion_t));
 				saml_assertion_init(assertion, env);
 				saml_assertion_build(assertion, child_node, env);
-				axutil_array_list_add(responce->saml_assertions, env, assertion);
+				axutil_array_list_add(response->saml_assertions, env, assertion);
 			}
 		
 		}
@@ -191,4 +240,74 @@
 
 
 
-}
\ No newline at end of file
+}
+
+AXIS2_EXTERN axiom_node_t* AXIS2_CALL saml_response_to_om(saml_response_t *response, 
+														  axiom_node_t *parent, 
+														  axutil_env_t *env)
+{
+	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_attribute_t *attr = NULL;
+	saml_assertion_t *assertion = NULL;
+	axutil_qname_t *qname;
+	axis2_char_t *artifact;
+
+	ns = axiom_namespace_create(env, SAML_PROTOCOL_NMSP, SAML_PROTOCOL_PREFIX);
+	e = axiom_element_create(env, parent, SAML_RESPONSE, ns, &n);
+	
+	if(e)
+	{
+		if(response->request_response_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);
+			
+			attr = axiom_attribute_create(env, SAML_MAJORVERSION, response->major_version, NULL);
+			axiom_element_add_attribute(e, env, attr, n);
+			
+			attr = axiom_attribute_create(env, SAML_MINORVERSION, response->major_version, NULL);
+			axiom_element_add_attribute(e, env, attr, n);
+
+			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)
+		{
+			attr = axiom_attribute_create(env, SAML_IN_RESPONSE_TO, response->request_response_id, NULL);
+			axiom_element_add_attribute(e, env, attr, n);
+			attr = axiom_attribute_create(env, SAML_RECEPIENT, response->recepient, NULL);
+			axiom_element_add_attribute(e, env, attr, n);
+		
+		}
+		if(response->saml_assertions)
+		{
+			size = axutil_array_list_size(response->saml_assertions, env);
+
+			for(i = 0 ; i < size ; i++)
+			{
+				saml_assertion_to_om((saml_assertion_t*)axutil_array_list_get(response->saml_assertions, env, i), n, env);
+
+			}
+		}
+		if(response->status)
+		{
+			saml_status_to_om(response->status, n, env);
+		}
+
+
+	}
+	return n;
+
+
+}
+
+

Modified: webservices/rampart/scratch/c/saml/src/stmt.c
URL: http://svn.apache.org/viewvc/webservices/rampart/scratch/c/saml/src/stmt.c?rev=584526&r1=584525&r2=584526&view=diff
==============================================================================
--- webservices/rampart/scratch/c/saml/src/stmt.c (original)
+++ webservices/rampart/scratch/c/saml/src/stmt.c Sun Oct 14 03:44:13 2007
@@ -50,14 +50,94 @@
 		saml_subject_stmt_free(stmt->stmt, env);
 		stmt->type = SAML_STMT_UNSPECIFED;
 	}	
+	AXIS2_FREE(env->allocator, stmt);
 }
 
 AXIS2_EXTERN int AXIS2_CALL saml_stmt_build(saml_stmt_t *stmt, axiom_node_t *node, axutil_env_t *env)
 {
+	axis2_char_t *locname = NULL;
+	axiom_element_t *element = NULL;	
+	axiom_child_element_iterator_t *ci = NULL;
+	if (axiom_node_get_node_type(node, env) != AXIOM_ELEMENT || (element = (axiom_element_t *)axiom_node_get_data_element(node, env)) == NULL)
+	{
+		return AXIS2_FAILURE;
+	}
+	locname = axiom_element_get_localname(element, env);
+	if (strcmp(locname, SAML_AUTHENTICATION_STATEMENT))
+	{
+		return saml_auth_stmt_build(stmt->stmt, node, env);		
+	}
+	else if (strcmp(locname, SAML_AUTHORIZATION_DECISION_STATEMENT))
+	{
+		return saml_auth_desicion_stmt_build(stmt->stmt, node,env);		
+	}
+	else if (strcmp(locname, SAML_ATTRIBUTE_STATEMENT))
+	{
+		return saml_attr_stmt_build(stmt->stmt, node, env);		
+	}
+	else if (strcmp(locname, SAML_SUBJECT_STATEMENT))
+	{
+		return saml_subject_stmt_build(stmt->stmt, node, env);		
+	}
 	return AXIS2_SUCCESS;	
 }
 
-AXIS2_EXTERN int AXIS2_CALL saml_stmt_to_om(saml_stmt_t *stmt, axiom_node_t *parent, axutil_env_t *env)
+AXIS2_EXTERN axiom_node_t * AXIS2_CALL saml_stmt_to_om(saml_stmt_t *stmt, axiom_node_t *parent, axutil_env_t *env)
 {
+	if (stmt->type == SAML_STMT_AUTHENTICATIONSTATEMENT)
+	{
+		return saml_auth_stmt_to_om(stmt->stmt, parent, env);		
+	}
+	else if (stmt->type == SAML_STMT_AUTHORIZATIONDECISIONSTATEMENT)
+	{
+		return saml_auth_desicion_stmt_to_om(stmt->stmt, parent,env);		
+	}
+	else if (stmt->type == SAML_STMT_ATTRIBUTESTATEMENT)
+	{
+		return saml_attr_stmt_to_om(stmt->stmt, parent, env);		
+	}
+	else if (stmt->type == SAML_STMT_SUBJECTSTATEMENT)
+	{
+		saml_subject_stmt_to_om(stmt->stmt, parent, env);		
+	}
+	return NULL;
+}
+
+AXIS2_EXTERN saml_stmt_type_t AXIS2_CALL saml_stmt_get_type(saml_stmt_t *stmt, axutil_env_t *env)
+{
+	return stmt->type;
+}
+
+AXIS2_EXTERN saml_stmt_t * AXIS2_CALL saml_stmt_get_stmt(saml_stmt_t *stmt, axutil_env_t *env)
+{
+	return stmt->stmt;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_stmt_set_type(saml_stmt_t *stmt, axutil_env_t *env, saml_stmt_type_t type)
+{
+	stmt->type = type;
 	return AXIS2_SUCCESS;
 }
+
+AXIS2_EXTERN int AXIS2_CALL saml_stmt_set_stmt(saml_stmt_t *stmt, axutil_env_t *env, void *st, saml_stmt_type_t type)
+{
+	if (stmt->type == SAML_STMT_AUTHENTICATIONSTATEMENT)
+	{
+		saml_auth_stmt_free(stmt->stmt, env);
+	}
+	else if (stmt->type == SAML_STMT_AUTHORIZATIONDECISIONSTATEMENT)
+	{
+		saml_auth_desicion_stmt_free(stmt->stmt, env);
+	}
+	else if (stmt->type == SAML_STMT_ATTRIBUTESTATEMENT)
+	{
+		saml_attr_stmt_free(stmt->stmt, env);
+	}
+	else if (stmt->type == SAML_STMT_SUBJECTSTATEMENT)
+	{
+		saml_subject_stmt_free(stmt->stmt, env);
+	}		
+	stmt->stmt = st;
+	stmt->type = type;
+	return AXIS2_SUCCESS;
+}
\ No newline at end of file

Modified: webservices/rampart/scratch/c/saml/src/subject.c
URL: http://svn.apache.org/viewvc/webservices/rampart/scratch/c/saml/src/subject.c?rev=584526&r1=584525&r2=584526&view=diff
==============================================================================
--- webservices/rampart/scratch/c/saml/src/subject.c (original)
+++ webservices/rampart/scratch/c/saml/src/subject.c Sun Oct 14 03:44:13 2007
@@ -88,6 +88,7 @@
 	return AXIS2_SUCCESS;
 }
 
+
 AXIS2_EXTERN axiom_node_t * AXIS2_CALL saml_named_id_to_om(saml_named_id_t *id, axiom_node_t *parent, axutil_env_t *env)
 {
 	axiom_element_t *e = NULL;
@@ -117,8 +118,55 @@
 	return n;
 }
 
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL saml_named_id_get_name(saml_named_id_t *id, axutil_env_t *env)
+{
+	return id->name;
+}
+
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL saml_named_id_get_format(saml_named_id_t *id, axutil_env_t *env)
+{
+	return id->format;
+}
+
+AXIS2_EXTERN axis2_char_t * AXIS2_CALL saml_named_id_get_name_qualifier(saml_named_id_t *id, axutil_env_t *env)
+{
+	return id->name_qualifier;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_named_id_set_name(saml_named_id_t *id, axutil_env_t *env, axis2_char_t *name)
+{
+	if (id->name)
+	{
+		AXIS2_FREE(env->allocator, id->name);
+	}
+	id->name = name;
+	return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_named_id_set_format(saml_named_id_t *id, axutil_env_t *env, axis2_char_t *format)
+{
+	if (id->format)
+	{
+		AXIS2_FREE(env->allocator, id->format);
+	}
+	id->format = format;
+	return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_named_id_set_name_qualifier(saml_named_id_t *id, axutil_env_t *env, axis2_char_t *qualifier)
+{
+	if (id->name_qualifier)
+	{
+		AXIS2_FREE(env->allocator, id->name_qualifier);
+	}
+	id->name_qualifier = qualifier;
+	return AXIS2_SUCCESS;
+}
+
+
 AXIS2_EXTERN int AXIS2_CALL saml_subject_init(saml_subject_t *subject, axutil_env_t *env)
 {
+	saml_named_id_init(&subject->named_id, env);
 	subject->confirmation_data = NULL;
 	subject->confirmation_methods = NULL;
 	subject->key_info = NULL;
@@ -266,6 +314,97 @@
 	return n;
 }
 
+AXIS2_EXTERN saml_named_id_t * AXIS2_CALL saml_subject_get_named_id(saml_subject_t *subject, axutil_env_t *env)
+{
+	return &subject->named_id;
+}
+
+AXIS2_EXTERN axutil_array_list_t * AXIS2_CALL saml_subject_get_confirmation_methods(saml_subject_t *subject, axutil_env_t *env)
+{
+	return subject->confirmation_methods;
+}
+
+AXIS2_EXTERN axiom_node_t * AXIS2_CALL saml_subject_get_confirmation_data(saml_subject_t *subject, axutil_env_t *env)
+{
+	return subject->confirmation_data;
+}
+
+AXIS2_EXTERN axiom_node_t * AXIS2_CALL saml_subject_get_key_info(saml_subject_t *subject, axutil_env_t *env)
+{
+	return subject->key_info;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_subject_set_named_id(saml_subject_t *subject, axutil_env_t *env, saml_named_id_t *named_id)
+{
+	saml_named_id_uninit(&subject->named_id, env);
+	subject->named_id = *named_id;
+	return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_subject_set_confirmation_methods(saml_subject_t *subject, axutil_env_t *env, axutil_array_list_t *list)
+{
+	int i = 0, size = 0;
+	axis2_char_t *val = NULL;
+	if (subject->confirmation_methods)
+	{
+		size = axutil_array_list_size(subject->confirmation_methods, env);
+		for (i = 0; i < size; i++)
+		{
+			val =  axutil_array_list_get(subject->confirmation_methods, env, i);
+			if (val)
+			{
+				AXIS2_FREE(env->allocator, env);
+			}
+		}
+		axutil_array_list_free(subject->confirmation_methods, env);
+		subject->confirmation_methods = list;
+	}
+	else
+	{
+		subject->confirmation_methods = list;
+	}
+	return AXIS2_SUCCESS;
+}
+
+
+AXIS2_EXTERN int AXIS2_CALL saml_subject_add_confirmation(saml_subject_t *subject, axutil_env_t *env, axis2_char_t *sub_confirmation)
+{
+	if (!subject->confirmation_methods)
+	{
+		subject->confirmation_methods = axutil_array_list_create(env, SAML_ARRAY_LIST_DEF * 2);
+	}
+	axutil_array_list_add(subject->confirmation_methods, env, sub_confirmation);
+	return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_subject_remove_subject_confiirmation(saml_subject_t *subject, axutil_env_t *env, int index)
+{
+	axis2_char_t *val = NULL;
+	if (subject->confirmation_methods && axutil_array_list_size(subject->confirmation_methods, env) > index)
+	{
+		val = axutil_array_list_remove(subject->confirmation_methods, env, index);			
+		if (val)
+		{
+			AXIS2_FREE(env->allocator, val);
+		}
+		return AXIS2_SUCCESS;		
+	}
+	else
+	{
+		return AXIS2_FAILURE;
+	}
+}
+
+AXIS2_EXTERN int AXIS2_CALL saml_subject_set_key_info(saml_subject_t *subject, axutil_env_t *env, axiom_node_t *node)
+{
+	if (subject->key_info)
+	{
+		axiom_node_free_tree(subject->key_info, env);
+	}
+	subject->key_info = node;
+	return AXIS2_SUCCESS;
+}
+
 AXIS2_EXTERN saml_subject_stmt_t * AXIS2_CALL saml_subject_stmt_create(axutil_env_t *env)
 {
 	saml_subject_stmt_t *stmt = AXIS2_MALLOC(env->allocator, sizeof(saml_subject_stmt_t));
@@ -316,3 +455,15 @@
 	}
 	return n;
 }
+
+AXIS2_EXTERN int AXIS2_CALL saml_subject_stmt_set_subject(saml_subject_stmt_t *subject_stmt, axutil_env_t *env, saml_subject_t *subject)
+{
+	saml_subject_uninit(&subject_stmt->subject, env);
+	subject_stmt->subject = *subject;
+	return AXIS2_SUCCESS;
+}
+
+AXIS2_EXTERN saml_subject_t * AXIS2_CALL saml_subject_stmt_get_subject(saml_subject_stmt_t *subject_stmt, axutil_env_t *env)
+{
+	return &subject_stmt->subject;	
+}
\ No newline at end of file

Added: webservices/rampart/scratch/c/saml/test/test_main.c
URL: http://svn.apache.org/viewvc/webservices/rampart/scratch/c/saml/test/test_main.c?rev=584526&view=auto
==============================================================================
--- webservices/rampart/scratch/c/saml/test/test_main.c (added)
+++ webservices/rampart/scratch/c/saml/test/test_main.c Sun Oct 14 03:44:13 2007
@@ -0,0 +1,6 @@
+
+int main()
+{
+
+	return 0;
+}
\ No newline at end of file