Cloning fixes, initial protocol check-in.
[shibboleth/cpp-opensaml.git] / saml / saml1 / core / Protocols.h
1 /*
2  *  Copyright 2001-2006 Internet2
3  * 
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 /**
18  * @file Protocols.h
19  * 
20  * XMLObjects representing the SAML 1.x Protocols schema
21  */
22
23 #ifndef __saml1_protocols_h__
24 #define __saml1_protocols_h__
25
26 #include <saml/saml1/core/Assertions.h>
27
28 #define DECL_SAML1POBJECTBUILDER(cname) \
29     DECL_XMLOBJECTBUILDER(SAML_API,cname,opensaml::SAMLConstants::SAML1P_NS,opensaml::SAMLConstants::SAML1P_PREFIX)
30
31 namespace opensaml {
32
33     namespace saml1 {
34         
35         DECL_XMLOBJECT_SIMPLE(SAML_API,AssertionArtifact,Artifact,SAML 1.x AssertionArtifact element);
36         DECL_XMLOBJECT_SIMPLE(SAML_API,StatusMessage,Message,SAML 1.x StatusMessage element);
37         
38         BEGIN_XMLOBJECT(SAML_API,RespondWith,xmltooling::XMLObject,SAML 1.x RespondWith element);
39             /** Gets the QName content of the element. */
40             virtual xmltooling::QName* getQName() const=0;
41             /** Sets the QName content of the element. */
42             virtual void setQName(const xmltooling::QName* qname)=0;
43         END_XMLOBJECT;
44
45         BEGIN_XMLOBJECT(SAML_API,Query,xmltooling::XMLObject,SAML 1.x Query element);
46         END_XMLOBJECT;
47
48         BEGIN_XMLOBJECT(SAML_API,SubjectQuery,Query,SAML 1.x SubjectQuery element);
49             DECL_TYPED_CHILD(Subject);
50         END_XMLOBJECT;
51
52         BEGIN_XMLOBJECT(SAML_API,AuthenticationQuery,SubjectQuery,SAML 1.x AuthenticationQuery element);
53             DECL_STRING_ATTRIB(AuthenticationMethod,AUTHENTICATIONMETHOD);
54             /** AuthenticationQueryType local name */
55             static const XMLCh TYPE_NAME[];
56         END_XMLOBJECT;
57
58         BEGIN_XMLOBJECT(SAML_API,AttributeQuery,SubjectQuery,SAML 1.x AttributeQuery element);
59             DECL_STRING_ATTRIB(Resource,RESOURCE);
60             DECL_TYPED_CHILDREN(AttributeDesignator);
61             /** AttributeQueryType local name */
62             static const XMLCh TYPE_NAME[];
63         END_XMLOBJECT;
64
65         BEGIN_XMLOBJECT(SAML_API,AuthorizationDecisionQuery,SubjectQuery,SAML 1.x AuthorizationDecisionQuery element);
66             DECL_STRING_ATTRIB(Resource,RESOURCE);
67             DECL_TYPED_CHILDREN(Action);
68             DECL_TYPED_CHILD(Evidence);
69             /** AuthorizationDecisionQueryType local name */
70             static const XMLCh TYPE_NAME[];
71         END_XMLOBJECT;
72
73         BEGIN_XMLOBJECT(SAML_API,AbstractRequest,xmltooling::XMLObject,SAML 1.x RequestAbstractType base type);
74             DECL_INTEGER_ATTRIB(MinorVersion,MINORVERSION);
75             DECL_STRING_ATTRIB(RequestID,REQUESTID);
76             DECL_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT);
77             DECL_TYPED_CHILDREN(RespondWith);
78             DECL_TYPED_FOREIGN_CHILD(Signature,xmlsignature);
79         END_XMLOBJECT;
80
81         BEGIN_XMLOBJECT(SAML_API,Request,AbstractRequest,SAML 1.x Request element);
82             DECL_TYPED_CHILD(Query);
83             DECL_TYPED_CHILD(SubjectQuery);
84             DECL_TYPED_CHILD(AuthenticationQuery);
85             DECL_TYPED_CHILD(AttributeQuery);
86             DECL_TYPED_CHILD(AuthorizationDecisionQuery);
87             DECL_TYPED_CHILDREN(AssertionIDReference);
88             DECL_TYPED_CHILDREN(AssertionArtifact);
89             /** RequestType local name */
90             static const XMLCh TYPE_NAME[];
91         END_XMLOBJECT;
92
93         BEGIN_XMLOBJECT(SAML_API,StatusCode,xmltooling::XMLObject,SAML 1.x StatusCode element);
94             DECL_XMLOBJECT_ATTRIB(Value,VALUE,xmltooling::QName);
95             DECL_TYPED_CHILD(StatusCode);
96             /** StatusCodeType local name */
97             static const XMLCh TYPE_NAME[];
98             /** Success Status Code */
99             static xmltooling::QName SUCCESS;
100             /** Requester Error Status Code */
101             static xmltooling::QName REQUESTER;
102             /** Responder Error Status Code */
103             static xmltooling::QName RESPONDER;
104             /** Version Mismatch Error Status Code */
105             static xmltooling::QName VERSIONMISMATCH;
106         END_XMLOBJECT;
107
108         BEGIN_XMLOBJECT(SAML_API,StatusDetail,xmltooling::XMLObject,SAML 1.x StatusDetail element);
109             DECL_XMLOBJECT_CHILDREN(Detail);
110             /** StatusDetailType local name */
111             static const XMLCh TYPE_NAME[];
112         END_XMLOBJECT;
113
114         DECL_SAML1POBJECTBUILDER(AssertionArtifact);
115         DECL_SAML1POBJECTBUILDER(AttributeQuery);
116         DECL_SAML1POBJECTBUILDER(AuthenticationQuery);
117         DECL_SAML1POBJECTBUILDER(AuthorizationDecisionQuery);
118         DECL_SAML1POBJECTBUILDER(Request);
119         DECL_SAML1POBJECTBUILDER(RespondWith);
120         DECL_SAML1POBJECTBUILDER(StatusCode);
121         DECL_SAML1POBJECTBUILDER(StatusDetail);
122         DECL_SAML1POBJECTBUILDER(StatusMessage);
123         
124         /**
125          * Registers builders and validators for Protocol classes into the runtime.
126          */
127         void SAML_API registerProtocolClasses();
128     };
129 };
130
131 #endif /* __saml1_protocols_h__ */