Revamped binding classes with security policy layer.
[shibboleth/cpp-opensaml.git] / saml / saml1 / core / Protocols.h
index 7d694c5..2201d09 100644 (file)
@@ -15,7 +15,7 @@
  */
 
 /**
- * @file Protocols.h
+ * @file saml/saml1/core/Protocols.h
  * 
  * XMLObjects representing the SAML 1.x Protocols schema
  */
 #ifndef __saml1_protocols_h__
 #define __saml1_protocols_h__
 
-#include <saml/saml1/core/Assertions.h>
+#include <saml/RootObject.h>
+#include <saml/util/SAMLConstants.h>
+
+#include <xmltooling/AttributeExtensibleXMLObject.h>
+#include <xmltooling/ElementProxy.h>
+#include <xmltooling/XMLObjectBuilder.h>
+#include <xmltooling/signature/KeyInfo.h>
+#include <xmltooling/signature/Signature.h>
+#include <xmltooling/util/DateTime.h>
 
 #define DECL_SAML1POBJECTBUILDER(cname) \
-    DECL_XMLOBJECTBUILDER(SAML_API,cname,opensaml::SAMLConstants::SAML1P_NS,opensaml::SAMLConstants::SAML1P_PREFIX)
+    DECL_XMLOBJECTBUILDER(SAML_API,cname,samlconstants::SAML1P_NS,samlconstants::SAML1P_PREFIX)
 
 namespace opensaml {
 
     namespace saml1 {
+        class SAML_API Action;
+        class SAML_API Assertion;
+        class SAML_API AssertionIDReference;
+        class SAML_API AttributeDesignator;
+        class SAML_API Evidence;
+        class SAML_API Subject;
+    };
+
+    /**
+     * @namespace opensaml::saml1p
+     * SAML 1.x protocol namespace
+     */
+    namespace saml1p {
         
         DECL_XMLOBJECT_SIMPLE(SAML_API,AssertionArtifact,Artifact,SAML 1.x AssertionArtifact element);
         DECL_XMLOBJECT_SIMPLE(SAML_API,StatusMessage,Message,SAML 1.x StatusMessage element);
@@ -46,7 +67,7 @@ namespace opensaml {
         END_XMLOBJECT;
 
         BEGIN_XMLOBJECT(SAML_API,SubjectQuery,Query,SAML 1.x SubjectQuery element);
-            DECL_TYPED_CHILD(Subject);
+            DECL_TYPED_FOREIGN_CHILD(Subject,saml1);
         END_XMLOBJECT;
 
         BEGIN_XMLOBJECT(SAML_API,AuthenticationQuery,SubjectQuery,SAML 1.x AuthenticationQuery element);
@@ -57,34 +78,36 @@ namespace opensaml {
 
         BEGIN_XMLOBJECT(SAML_API,AttributeQuery,SubjectQuery,SAML 1.x AttributeQuery element);
             DECL_STRING_ATTRIB(Resource,RESOURCE);
-            DECL_TYPED_CHILDREN(AttributeDesignator);
+            DECL_TYPED_FOREIGN_CHILDREN(AttributeDesignator,saml1);
             /** AttributeQueryType local name */
             static const XMLCh TYPE_NAME[];
         END_XMLOBJECT;
 
         BEGIN_XMLOBJECT(SAML_API,AuthorizationDecisionQuery,SubjectQuery,SAML 1.x AuthorizationDecisionQuery element);
             DECL_STRING_ATTRIB(Resource,RESOURCE);
-            DECL_TYPED_CHILDREN(Action);
-            DECL_TYPED_CHILD(Evidence);
+            DECL_TYPED_FOREIGN_CHILDREN(Action,saml1);
+            DECL_TYPED_FOREIGN_CHILD(Evidence,saml1);
             /** AuthorizationDecisionQueryType local name */
             static const XMLCh TYPE_NAME[];
         END_XMLOBJECT;
 
-        BEGIN_XMLOBJECT(SAML_API,AbstractRequest,SignableObject,SAML 1.x RequestAbstractType base type);
+        BEGIN_XMLOBJECT(SAML_API,RequestAbstractType,RootObject,SAML 1.x RequestAbstractType base type);
             DECL_INTEGER_ATTRIB(MinorVersion,MINORVERSION);
             DECL_STRING_ATTRIB(RequestID,REQUESTID);
-            DECL_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT);
+            DECL_INHERITED_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT);
             DECL_TYPED_CHILDREN(RespondWith);
-            DECL_TYPED_FOREIGN_CHILD(Signature,xmlsignature);
+            DECL_INHERITED_TYPED_FOREIGN_CHILD(Signature,xmlsignature);
+            /** RequestAbstractType local name */
+            static const XMLCh TYPE_NAME[];
         END_XMLOBJECT;
 
-        BEGIN_XMLOBJECT(SAML_API,Request,AbstractRequest,SAML 1.x Request element);
+        BEGIN_XMLOBJECT(SAML_API,Request,RequestAbstractType,SAML 1.x Request element);
             DECL_TYPED_CHILD(Query);
             DECL_TYPED_CHILD(SubjectQuery);
             DECL_TYPED_CHILD(AuthenticationQuery);
             DECL_TYPED_CHILD(AttributeQuery);
             DECL_TYPED_CHILD(AuthorizationDecisionQuery);
-            DECL_TYPED_CHILDREN(AssertionIDReference);
+            DECL_TYPED_FOREIGN_CHILDREN(AssertionIDReference,saml1);
             DECL_TYPED_CHILDREN(AssertionArtifact);
             /** RequestType local name */
             static const XMLCh TYPE_NAME[];
@@ -119,18 +142,20 @@ namespace opensaml {
             static const XMLCh TYPE_NAME[];
         END_XMLOBJECT;
 
-        BEGIN_XMLOBJECT(SAML_API,AbstractResponse,SignableObject,SAML 1.x ResponseAbstractType base type);
+        BEGIN_XMLOBJECT(SAML_API,ResponseAbstractType,RootObject,SAML 1.x ResponseAbstractType base type);
             DECL_INTEGER_ATTRIB(MinorVersion,MINORVERSION);
             DECL_STRING_ATTRIB(ResponseID,RESPONSEID);
             DECL_STRING_ATTRIB(InResponseTo,INRESPONSETO);
-            DECL_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT);
+            DECL_INHERITED_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT);
             DECL_STRING_ATTRIB(Recipient,RECIPIENT);
-            DECL_TYPED_FOREIGN_CHILD(Signature,xmlsignature);
+            DECL_INHERITED_TYPED_FOREIGN_CHILD(Signature,xmlsignature);
+            /** ResponseAbstractType local name */
+            static const XMLCh TYPE_NAME[];
         END_XMLOBJECT;
 
-        BEGIN_XMLOBJECT(SAML_API,Response,AbstractResponse,SAML 1.x Response element);
+        BEGIN_XMLOBJECT(SAML_API,Response,ResponseAbstractType,SAML 1.x Response element);
             DECL_TYPED_CHILD(Status);
-            DECL_TYPED_CHILDREN(Assertion);
+            DECL_TYPED_FOREIGN_CHILDREN(Assertion,saml1);
             /** ResponseType local name */
             static const XMLCh TYPE_NAME[];
         END_XMLOBJECT;
@@ -148,7 +173,7 @@ namespace opensaml {
         DECL_SAML1POBJECTBUILDER(StatusMessage);
         
         /**
-         * Registers builders and validators for Protocol classes into the runtime.
+         * Registers builders and validators for SAML 1.x Protocol classes into the runtime.
          */
         void SAML_API registerProtocolClasses();
     };