X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=saml%2Fsaml2%2Fcore%2Fimpl%2FProtocols20Impl.cpp;h=6ce1c3a9b11c7dfe78dfa7343d2be6163806daaa;hb=ecc9f2def78a53386e33f330147b80f3316a4b35;hp=4db1cba7d8125ec61bbcd13aec61e17c8b80d598;hpb=66136f386ddbdd855e1a078e13e19ddbf64a01e2;p=shibboleth%2Fcpp-opensaml.git diff --git a/saml/saml2/core/impl/Protocols20Impl.cpp b/saml/saml2/core/impl/Protocols20Impl.cpp index 4db1cba..6ce1c3a 100644 --- a/saml/saml2/core/impl/Protocols20Impl.cpp +++ b/saml/saml2/core/impl/Protocols20Impl.cpp @@ -1,46 +1,51 @@ -/* - * Copyright 2001-2006 Internet2 - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at +/** + * Licensed to the University Corporation for Advanced Internet + * Development, Inc. (UCAID) under one or more contributor license + * agreements. See the NOTICE file distributed with this work for + * additional information regarding copyright ownership. * - * http://www.apache.org/licenses/LICENSE-2.0 + * UCAID licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the + * License at * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the License. */ /** * Protocols20Impl.cpp * - * Implementation classes for SAML 2.0 Protocols schema + * Implementation classes for SAML 2.0 Protocols schema. */ #include "internal.h" #include "exceptions.h" -#include "saml/encryption/EncryptedKeyResolver.h" #include "saml2/core/Protocols.h" +#include "signature/ContentReference.h" #include #include -#include +#include #include #include #include +#include +#include #include #include +#include +#include +#include #include using namespace opensaml::saml2p; -using namespace opensaml::saml2; -using namespace opensaml; -using namespace xmlsignature; -using namespace xmlencryption; using namespace xmltooling; using namespace std; using xmlconstants::XMLSIG_NS; @@ -76,15 +81,12 @@ namespace opensaml { public: virtual ~ExtensionsImpl() {} - ExtensionsImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType) { - } + ExtensionsImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} ExtensionsImpl(const ExtensionsImpl& src) : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { - VectorOf(XMLObject) v=getUnknownXMLObjects(); - for (vector::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i) - v.push_back((*i)->clone()); + IMPL_CLONE_XMLOBJECT_CHILDREN(UnknownXMLObject); } IMPL_XMLOBJECT_CLONE(Extensions); @@ -110,75 +112,73 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_Value=NULL; - m_StatusCode=NULL; - m_children.push_back(NULL); + m_Value=nullptr; + m_StatusCode=nullptr; + m_children.push_back(nullptr); m_pos_StatusCode=m_children.begin(); } - public: - virtual ~StatusCodeImpl() {} - StatusCodeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType) - { - init(); - } + public: + virtual ~StatusCodeImpl() { + XMLString::release(&m_Value); + } - StatusCodeImpl(const StatusCodeImpl& src) - : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { - init(); - setValue(src.getValue()); - if (src.getStatusCode()) - setStatusCode(src.getStatusCode()->cloneStatusCode()); - } + StatusCodeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) { + init(); + } - IMPL_XMLOBJECT_CLONE(StatusCode); - IMPL_STRING_ATTRIB(Value); - IMPL_TYPED_CHILD(StatusCode); + StatusCodeImpl(const StatusCodeImpl& src) + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { + init(); + IMPL_CLONE_ATTRIB(Value); + IMPL_CLONE_TYPED_CHILD(StatusCode); + } - protected: - void marshallAttributes(DOMElement* domElement) const { - MARSHALL_STRING_ATTRIB(Value,VALUE,NULL); - } + IMPL_XMLOBJECT_CLONE(StatusCode); + IMPL_STRING_ATTRIB(Value); + IMPL_TYPED_CHILD(StatusCode); - void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - PROC_TYPED_CHILD(StatusCode,SAML20P_NS,false); - AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); - } + protected: + void marshallAttributes(DOMElement* domElement) const { + MARSHALL_STRING_ATTRIB(Value,VALUE,nullptr); + } - void processAttribute(const DOMAttr* attribute) { - PROC_STRING_ATTRIB(Value,VALUE,NULL); - AbstractXMLObjectUnmarshaller::processAttribute(attribute); - } + void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { + PROC_TYPED_CHILD(StatusCode,SAML20P_NS,false); + AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); + } + + void processAttribute(const DOMAttr* attribute) { + PROC_STRING_ATTRIB(Value,VALUE,nullptr); + AbstractXMLObjectUnmarshaller::processAttribute(attribute); + } }; - //TODO need unit tests for non-SAML namespace children class SAML_DLLLOCAL StatusDetailImpl : public virtual StatusDetail, public AbstractComplexElement, public AbstractDOMCachingXMLObject, public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { - public: - virtual ~StatusDetailImpl() {} + public: + virtual ~StatusDetailImpl() {} - StatusDetailImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType) { } + StatusDetailImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} - StatusDetailImpl(const StatusDetailImpl& src) - : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { - VectorOf(XMLObject) v=getUnknownXMLObjects(); - for (vector::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i) - v.push_back((*i)->clone()); - } + StatusDetailImpl(const StatusDetailImpl& src) + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { + IMPL_CLONE_XMLOBJECT_CHILDREN(UnknownXMLObject); + } - IMPL_XMLOBJECT_CLONE(StatusDetail); - IMPL_XMLOBJECT_CHILDREN(UnknownXMLObject,m_children.end()); + IMPL_XMLOBJECT_CLONE(StatusDetail); + IMPL_XMLOBJECT_CHILDREN(UnknownXMLObject,m_children.end()); - protected: - void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { - getUnknownXMLObjects().push_back(childXMLObject); - } + protected: + void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { + getUnknownXMLObjects().push_back(childXMLObject); + } }; @@ -189,35 +189,32 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_StatusCode=NULL; - m_StatusMessage=NULL; - m_StatusDetail=NULL; - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); + m_StatusCode=nullptr; + m_StatusMessage=nullptr; + m_StatusDetail=nullptr; + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); m_pos_StatusCode=m_children.begin(); m_pos_StatusMessage=m_pos_StatusCode; ++m_pos_StatusMessage; m_pos_StatusDetail=m_pos_StatusMessage; ++m_pos_StatusDetail; } + public: - virtual ~StatusImpl() { } + virtual ~StatusImpl() {} - StatusImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + StatusImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } - StatusImpl(const StatusImpl& src) - : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { + StatusImpl(const StatusImpl& src) : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); - if (src.getStatusCode()) - setStatusCode(src.getStatusCode()->cloneStatusCode()); - if (src.getStatusMessage()) - setStatusMessage(src.getStatusMessage()->cloneStatusMessage()); - if (src.getStatusDetail()) - setStatusDetail(src.getStatusDetail()->cloneStatusDetail()); + IMPL_CLONE_TYPED_CHILD(StatusCode); + IMPL_CLONE_TYPED_CHILD(StatusMessage); + IMPL_CLONE_TYPED_CHILD(StatusDetail); } IMPL_XMLOBJECT_CLONE(Status); @@ -226,14 +223,12 @@ namespace opensaml { IMPL_TYPED_CHILD(StatusDetail); protected: - void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { PROC_TYPED_CHILD(StatusCode,SAML20P_NS,false); PROC_TYPED_CHILD(StatusMessage,SAML20P_NS,false); PROC_TYPED_CHILD(StatusDetail,SAML20P_NS,false); AbstractXMLObjectUnmarshaller::processChildElement(childXMLObject,root); } - }; @@ -244,27 +239,29 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_ID=NULL; - m_Version=NULL; - m_IssueInstant=NULL; - m_Destination=NULL; - m_Consent=NULL; - m_Issuer=NULL; - m_Signature=NULL; - m_Extensions=NULL; - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); + m_ID=nullptr; + m_Version=nullptr; + m_IssueInstant=nullptr; + m_Destination=nullptr; + m_Consent=nullptr; + m_Issuer=nullptr; + m_Signature=nullptr; + m_Extensions=nullptr; + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); m_pos_Issuer=m_children.begin(); m_pos_Signature=m_pos_Issuer; ++m_pos_Signature; m_pos_Extensions=m_pos_Signature; ++m_pos_Extensions; } + protected: RequestAbstractTypeImpl() { init(); } + public: virtual ~RequestAbstractTypeImpl() { XMLString::release(&m_ID); @@ -274,7 +271,7 @@ namespace opensaml { delete m_IssueInstant; } - RequestAbstractTypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + RequestAbstractTypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } @@ -282,39 +279,43 @@ namespace opensaml { RequestAbstractTypeImpl(const RequestAbstractTypeImpl& src) : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); - setID(src.getID()); - setVersion(src.getVersion()); - setIssueInstant(src.getIssueInstant()); - setDestination(src.getDestination()); - setConsent(src.getConsent()); - if (src.getIssuer()) - setIssuer(src.getIssuer()->cloneIssuer()); - if (src.getSignature()) - setSignature(src.getSignature()->cloneSignature()); - if (src.getExtensions()) - setExtensions(src.getExtensions()->cloneExtensions()); + } + + void _clone(const RequestAbstractTypeImpl& src) { + IMPL_CLONE_ATTRIB(ID); + IMPL_CLONE_ATTRIB(Version); + IMPL_CLONE_ATTRIB(IssueInstant); + IMPL_CLONE_ATTRIB(Destination); + IMPL_CLONE_ATTRIB(Consent); + IMPL_CLONE_TYPED_CHILD(Issuer); + IMPL_CLONE_TYPED_CHILD(Signature); + IMPL_CLONE_TYPED_CHILD(Extensions); } //IMPL_TYPED_CHILD(Signature); // Need customized setter. protected: - Signature* m_Signature; + xmlsignature::Signature* m_Signature; list::iterator m_pos_Signature; public: - Signature* getSignature() const { + xmlsignature::Signature* getSignature() const { return m_Signature; } - void setSignature(Signature* sig) { + void setSignature(xmlsignature::Signature* sig) { prepareForAssignment(m_Signature,sig); *m_pos_Signature=m_Signature=sig; // Sync content reference back up. if (m_Signature) m_Signature->setContentReference(new opensaml::ContentReference(*this)); } + + RequestAbstractType* cloneRequestAbstractType() const { + return dynamic_cast(clone()); + } IMPL_STRING_ATTRIB(Version); - IMPL_ID_ATTRIB(ID); + IMPL_ID_ATTRIB_EX(ID,ID,nullptr); IMPL_DATETIME_ATTRIB(IssueInstant,0); IMPL_STRING_ATTRIB(Destination); IMPL_STRING_ATTRIB(Consent); @@ -322,20 +323,25 @@ namespace opensaml { IMPL_TYPED_CHILD(Extensions); protected: + void prepareForMarshalling() const { + if (m_Signature) + declareNonVisibleNamespaces(); + } + void marshallAttributes(DOMElement* domElement) const { if (!m_Version) const_cast(this)->m_Version=XMLString::transcode("2.0"); - MARSHALL_STRING_ATTRIB(Version,VER,NULL); + MARSHALL_STRING_ATTRIB(Version,VER,nullptr); if (!m_ID) const_cast(this)->m_ID=SAMLConfig::getConfig().generateIdentifier(); - MARSHALL_ID_ATTRIB(ID,ID,NULL); + MARSHALL_ID_ATTRIB(ID,ID,nullptr); if (!m_IssueInstant) { - const_cast(this)->m_IssueInstantEpoch=time(NULL); + const_cast(this)->m_IssueInstantEpoch=time(nullptr); const_cast(this)->m_IssueInstant=new DateTime(m_IssueInstantEpoch); } - MARSHALL_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT,NULL); - MARSHALL_STRING_ATTRIB(Destination,DESTINATION,NULL); - MARSHALL_STRING_ATTRIB(Consent,CONSENT,NULL); + MARSHALL_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT,nullptr); + MARSHALL_STRING_ATTRIB(Destination,DESTINATION,nullptr); + MARSHALL_STRING_ATTRIB(Consent,CONSENT,nullptr); } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { @@ -346,11 +352,11 @@ namespace opensaml { } void processAttribute(const DOMAttr* attribute) { - PROC_ID_ATTRIB(ID,ID,NULL); - PROC_STRING_ATTRIB(Version,VER,NULL); - PROC_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT,NULL); - PROC_STRING_ATTRIB(Destination,DESTINATION,NULL); - PROC_STRING_ATTRIB(Consent,CONSENT,NULL); + PROC_ID_ATTRIB(ID,ID,nullptr); + PROC_STRING_ATTRIB(Version,VER,nullptr); + PROC_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT,nullptr); + PROC_STRING_ATTRIB(Destination,DESTINATION,nullptr); + PROC_STRING_ATTRIB(Consent,CONSENT,nullptr); AbstractXMLObjectUnmarshaller::processAttribute(attribute); } }; @@ -359,26 +365,19 @@ namespace opensaml { class SAML_DLLLOCAL AssertionIDRequestImpl : public virtual AssertionIDRequest, public RequestAbstractTypeImpl { public: - virtual ~AssertionIDRequestImpl() { } + virtual ~AssertionIDRequestImpl() {} - AssertionIDRequestImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType) { } + AssertionIDRequestImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} - AssertionIDRequestImpl(const AssertionIDRequestImpl& src) : AbstractXMLObject(src), RequestAbstractTypeImpl(src) { - VectorOf(AssertionIDRef) v=getAssertionIDRefs(); - for (vector::const_iterator i=src.m_AssertionIDRefs.begin(); i!=src.m_AssertionIDRefs.end(); i++) { - if (*i) { - v.push_back((*i)->cloneAssertionIDRef()); - } - } + AssertionIDRequestImpl(const AssertionIDRequestImpl& src) : AbstractXMLObject(src), RequestAbstractTypeImpl(src) {} + void _clone(const AssertionIDRequestImpl& src) { + RequestAbstractTypeImpl::_clone(src); + IMPL_CLONE_TYPED_FOREIGN_CHILDREN(AssertionIDRef,saml2); } - IMPL_XMLOBJECT_CLONE(AssertionIDRequest); - RequestAbstractType* cloneRequestAbstractType() const { - return cloneAssertionIDRequest(); - } - + IMPL_XMLOBJECT_CLONE_EX(AssertionIDRequest); IMPL_TYPED_FOREIGN_CHILDREN(AssertionIDRef,saml2,m_children.end()); protected: @@ -390,32 +389,39 @@ namespace opensaml { class SAML_DLLLOCAL SubjectQueryImpl : public virtual SubjectQuery, public RequestAbstractTypeImpl { - void init() - { - m_Subject = NULL; - m_children.push_back(NULL); + void init() { + m_Subject = nullptr; + m_children.push_back(nullptr); m_pos_Subject = m_pos_Extensions; ++m_pos_Subject; } + protected: SubjectQueryImpl() { init(); } + public: - virtual ~SubjectQueryImpl() { } + virtual ~SubjectQueryImpl() {} - SubjectQueryImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType) - { + SubjectQueryImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } SubjectQueryImpl(const SubjectQueryImpl& src) : AbstractXMLObject(src), RequestAbstractTypeImpl(src) { init(); - if (src.getSubject()) - setSubject(src.getSubject()->cloneSubject()); + } + + void _clone(const SubjectQueryImpl& src) { + RequestAbstractTypeImpl::_clone(src); + IMPL_CLONE_TYPED_CHILD(Subject); } + SubjectQuery* cloneSubjectQuery() const { + return dynamic_cast(clone()); + } + IMPL_TYPED_FOREIGN_CHILD(Subject,saml2); protected: @@ -425,7 +431,6 @@ namespace opensaml { } }; - class SAML_DLLLOCAL RequestedAuthnContextImpl : public virtual RequestedAuthnContext, public AbstractComplexElement, public AbstractDOMCachingXMLObject, @@ -433,14 +438,15 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_Comparison=NULL; + m_Comparison=nullptr; } + public: virtual ~RequestedAuthnContextImpl() { XMLString::release(&m_Comparison); } - RequestedAuthnContextImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + RequestedAuthnContextImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } @@ -448,22 +454,11 @@ namespace opensaml { RequestedAuthnContextImpl(const RequestedAuthnContextImpl& src) : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); - setComparison(src.getComparison()); - for (list::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) { - if (*i) { - AuthnContextClassRef* classref=dynamic_cast(*i); - if (classref) { - getAuthnContextClassRefs().push_back(classref->cloneAuthnContextClassRef()); - continue; - } - - AuthnContextDeclRef* declref=dynamic_cast(*i); - if (declref) { - getAuthnContextDeclRefs().push_back(declref->cloneAuthnContextDeclRef()); - continue; - } - } - } + IMPL_CLONE_ATTRIB(Comparison); + IMPL_CLONE_CHILDBAG_BEGIN; + IMPL_CLONE_TYPED_FOREIGN_CHILD_IN_BAG(AuthnContextClassRef,saml2); + IMPL_CLONE_TYPED_FOREIGN_CHILD_IN_BAG(AuthnContextDeclRef,saml2); + IMPL_CLONE_CHILDBAG_END; } IMPL_XMLOBJECT_CLONE(RequestedAuthnContext); @@ -473,7 +468,7 @@ namespace opensaml { protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_STRING_ATTRIB(Comparison,COMPARISON,NULL); + MARSHALL_STRING_ATTRIB(Comparison,COMPARISON,nullptr); } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { @@ -483,54 +478,49 @@ namespace opensaml { } void processAttribute(const DOMAttr* attribute) { - PROC_STRING_ATTRIB(Comparison,COMPARISON,NULL); + PROC_STRING_ATTRIB(Comparison,COMPARISON,nullptr); AbstractXMLObjectUnmarshaller::processAttribute(attribute); } }; - class SAML_DLLLOCAL AuthnQueryImpl : public virtual AuthnQuery, public SubjectQueryImpl { void init() { - m_SessionIndex=NULL; - m_RequestedAuthnContext=NULL; - m_children.push_back(NULL); + m_SessionIndex=nullptr; + m_RequestedAuthnContext=nullptr; + m_children.push_back(nullptr); m_pos_RequestedAuthnContext = m_pos_Subject; ++m_pos_RequestedAuthnContext; } + public: virtual ~AuthnQueryImpl() { XMLString::release(&m_SessionIndex); } - AuthnQueryImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType) - { + AuthnQueryImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } AuthnQueryImpl(const AuthnQueryImpl& src) : AbstractXMLObject(src), SubjectQueryImpl(src) { init(); - setSessionIndex(src.getSessionIndex()); - if (src.getRequestedAuthnContext()) - setRequestedAuthnContext(src.getRequestedAuthnContext()->cloneRequestedAuthnContext()); - } - - IMPL_XMLOBJECT_CLONE(AuthnQuery); - SubjectQuery* cloneSubjectQuery() const { - return cloneAuthnQuery(); - } - RequestAbstractType* cloneRequestAbstractType() const { - return cloneAuthnQuery(); } + void _clone(const AuthnQueryImpl& src) { + SubjectQueryImpl::_clone(src); + IMPL_CLONE_ATTRIB(SessionIndex); + IMPL_CLONE_TYPED_CHILD(RequestedAuthnContext); + } + + IMPL_XMLOBJECT_CLONE_EX(AuthnQuery); IMPL_STRING_ATTRIB(SessionIndex); IMPL_TYPED_CHILD(RequestedAuthnContext); protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_STRING_ATTRIB(SessionIndex,SESSIONINDEX,NULL); + MARSHALL_STRING_ATTRIB(SessionIndex,SESSIONINDEX,nullptr); SubjectQueryImpl::marshallAttributes(domElement); } @@ -539,7 +529,7 @@ namespace opensaml { SubjectQueryImpl::processChildElement(childXMLObject,root); } void processAttribute(const DOMAttr* attribute) { - PROC_STRING_ATTRIB(SessionIndex,SESSIONINDEX,NULL); + PROC_STRING_ATTRIB(SessionIndex,SESSIONINDEX,nullptr); SubjectQueryImpl::processAttribute(attribute); } }; @@ -547,32 +537,19 @@ namespace opensaml { class SAML_DLLLOCAL AttributeQueryImpl : public virtual AttributeQuery, public SubjectQueryImpl { public: - virtual ~AttributeQueryImpl() { } + virtual ~AttributeQueryImpl() {} - AttributeQueryImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType) { } + AttributeQueryImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} - AttributeQueryImpl(const AttributeQueryImpl& src) : AbstractXMLObject(src), SubjectQueryImpl(src) { - for (list::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) { - if (*i) { - Attribute* attrib=dynamic_cast(*i); - if (attrib) { - getAttributes().push_back(attrib->cloneAttribute()); - continue; - } - } - } + AttributeQueryImpl(const AttributeQueryImpl& src) : AbstractXMLObject(src), SubjectQueryImpl(src) {} + void _clone(const AttributeQueryImpl& src) { + SubjectQueryImpl::_clone(src); + IMPL_CLONE_TYPED_FOREIGN_CHILDREN(Attribute,saml2); } - IMPL_XMLOBJECT_CLONE(AttributeQuery); - SubjectQuery* cloneSubjectQuery() const { - return cloneAttributeQuery(); - } - RequestAbstractType* cloneRequestAbstractType() const { - return cloneAttributeQuery(); - } - + IMPL_XMLOBJECT_CLONE_EX(AttributeQuery); IMPL_TYPED_FOREIGN_CHILDREN(Attribute,saml2,m_children.end()); protected: @@ -585,54 +562,42 @@ namespace opensaml { class SAML_DLLLOCAL AuthzDecisionQueryImpl : public virtual AuthzDecisionQuery, public SubjectQueryImpl { void init() { - m_Resource=NULL; - m_Evidence=NULL; - m_children.push_back(NULL); + m_Resource=nullptr; + m_Evidence=nullptr; + m_children.push_back(nullptr); m_pos_Evidence=m_pos_Subject; - ++m_pos_Evidence; - + ++m_pos_Evidence; } + public: virtual ~AuthzDecisionQueryImpl() { XMLString::release(&m_Resource); } - AuthzDecisionQueryImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) + AuthzDecisionQueryImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } AuthzDecisionQueryImpl(const AuthzDecisionQueryImpl& src) : AbstractXMLObject(src), SubjectQueryImpl(src) { init(); - setResource(src.getResource()); - if (src.getEvidence()) - setEvidence(src.getEvidence()->cloneEvidence()); - for (list::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) { - if (*i) { - Action* action=dynamic_cast(*i); - if (action) { - getActions().push_back(action->cloneAction()); - continue; - } - } - } - } - - IMPL_XMLOBJECT_CLONE(AuthzDecisionQuery); - SubjectQuery* cloneSubjectQuery() const { - return cloneAuthzDecisionQuery(); - } - RequestAbstractType* cloneRequestAbstractType() const { - return cloneAuthzDecisionQuery(); } + void _clone(const AuthzDecisionQueryImpl& src) { + SubjectQueryImpl::_clone(src); + IMPL_CLONE_ATTRIB(Resource); + IMPL_CLONE_TYPED_CHILD(Evidence); + IMPL_CLONE_TYPED_FOREIGN_CHILDREN(Action,saml2); + } + + IMPL_XMLOBJECT_CLONE_EX(AuthzDecisionQuery); IMPL_STRING_ATTRIB(Resource); IMPL_TYPED_FOREIGN_CHILDREN(Action,saml2,m_pos_Evidence); IMPL_TYPED_FOREIGN_CHILD(Evidence,saml2); protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_STRING_ATTRIB(Resource,RESOURCE,NULL); + MARSHALL_STRING_ATTRIB(Resource,RESOURCE,nullptr); SubjectQueryImpl::marshallAttributes(domElement); } @@ -642,7 +607,7 @@ namespace opensaml { SubjectQueryImpl::processChildElement(childXMLObject,root); } void processAttribute(const DOMAttr* attribute) { - PROC_STRING_ATTRIB(Resource,RESOURCE,NULL); + PROC_STRING_ATTRIB(Resource,RESOURCE,nullptr); SubjectQueryImpl::processAttribute(attribute); } }; @@ -654,49 +619,48 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_Format=NULL; - m_SPNameQualifier=NULL; + m_Format=nullptr; + m_SPNameQualifier=nullptr; m_AllowCreate=XML_BOOL_NULL; } - public: - virtual ~NameIDPolicyImpl() - { - XMLString::release(&m_Format); - XMLString::release(&m_SPNameQualifier); - } - NameIDPolicyImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType) - { - init(); - } + public: + virtual ~NameIDPolicyImpl() { + XMLString::release(&m_Format); + XMLString::release(&m_SPNameQualifier); + } - NameIDPolicyImpl(const NameIDPolicyImpl& src) - : AbstractXMLObject(src), AbstractSimpleElement(src), AbstractDOMCachingXMLObject(src) { - init(); - setFormat(src.getFormat()); - setSPNameQualifier(src.getSPNameQualifier()); - AllowCreate(m_AllowCreate); - } + NameIDPolicyImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) { + init(); + } + + NameIDPolicyImpl(const NameIDPolicyImpl& src) + : AbstractXMLObject(src), AbstractSimpleElement(src), AbstractDOMCachingXMLObject(src) { + init(); + IMPL_CLONE_ATTRIB(Format); + IMPL_CLONE_ATTRIB(SPNameQualifier); + IMPL_CLONE_BOOLEAN_ATTRIB(AllowCreate); + } - IMPL_XMLOBJECT_CLONE(NameIDPolicy); - IMPL_STRING_ATTRIB(Format); - IMPL_STRING_ATTRIB(SPNameQualifier); - IMPL_BOOLEAN_ATTRIB(AllowCreate); + IMPL_XMLOBJECT_CLONE(NameIDPolicy); + IMPL_STRING_ATTRIB(Format); + IMPL_STRING_ATTRIB(SPNameQualifier); + IMPL_BOOLEAN_ATTRIB(AllowCreate); - protected: - void marshallAttributes(DOMElement* domElement) const { - MARSHALL_STRING_ATTRIB(Format,FORMAT,NULL); - MARSHALL_STRING_ATTRIB(SPNameQualifier,SPNAMEQUALIFIER,NULL); - MARSHALL_BOOLEAN_ATTRIB(AllowCreate,ALLOWCREATE,NULL); - } + protected: + void marshallAttributes(DOMElement* domElement) const { + MARSHALL_STRING_ATTRIB(Format,FORMAT,nullptr); + MARSHALL_STRING_ATTRIB(SPNameQualifier,SPNAMEQUALIFIER,nullptr); + MARSHALL_BOOLEAN_ATTRIB(AllowCreate,ALLOWCREATE,nullptr); + } - void processAttribute(const DOMAttr* attribute) { - PROC_STRING_ATTRIB(Format,FORMAT,NULL); - PROC_STRING_ATTRIB(SPNameQualifier,SPNAMEQUALIFIER,NULL); - PROC_BOOLEAN_ATTRIB(AllowCreate,ALLOWCREATE,NULL); - AbstractXMLObjectUnmarshaller::processAttribute(attribute); - } + void processAttribute(const DOMAttr* attribute) { + PROC_STRING_ATTRIB(Format,FORMAT,nullptr); + PROC_STRING_ATTRIB(SPNameQualifier,SPNAMEQUALIFIER,nullptr); + PROC_BOOLEAN_ATTRIB(AllowCreate,ALLOWCREATE,nullptr); + AbstractXMLObjectUnmarshaller::processAttribute(attribute); + } }; class SAML_DLLLOCAL IDPEntryImpl : public virtual IDPEntry, @@ -706,50 +670,48 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_ProviderID=NULL; - m_Name=NULL; - m_Loc=NULL; - } - public: - virtual ~IDPEntryImpl() - { - XMLString::release(&m_ProviderID); - XMLString::release(&m_Name); - XMLString::release(&m_Loc); - } + m_ProviderID=nullptr; + m_Name=nullptr; + m_Loc=nullptr; + } - IDPEntryImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType) - { - init(); - } + public: + virtual ~IDPEntryImpl() { + XMLString::release(&m_ProviderID); + XMLString::release(&m_Name); + XMLString::release(&m_Loc); + } - IDPEntryImpl(const IDPEntryImpl& src) - : AbstractXMLObject(src), AbstractSimpleElement(src), AbstractDOMCachingXMLObject(src) { - init(); - setProviderID(src.getProviderID()); - setName(src.getName()); - setLoc(src.getLoc()); - } + IDPEntryImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) { + init(); + } + + IDPEntryImpl(const IDPEntryImpl& src) : AbstractXMLObject(src), AbstractSimpleElement(src), AbstractDOMCachingXMLObject(src) { + init(); + IMPL_CLONE_ATTRIB(ProviderID); + IMPL_CLONE_ATTRIB(Name); + IMPL_CLONE_ATTRIB(Loc); + } - IMPL_XMLOBJECT_CLONE(IDPEntry); - IMPL_STRING_ATTRIB(ProviderID); - IMPL_STRING_ATTRIB(Name); - IMPL_STRING_ATTRIB(Loc); + IMPL_XMLOBJECT_CLONE(IDPEntry); + IMPL_STRING_ATTRIB(ProviderID); + IMPL_STRING_ATTRIB(Name); + IMPL_STRING_ATTRIB(Loc); - protected: - void marshallAttributes(DOMElement* domElement) const { - MARSHALL_STRING_ATTRIB(ProviderID,PROVIDERID,NULL); - MARSHALL_STRING_ATTRIB(Name,NAME,NULL); - MARSHALL_STRING_ATTRIB(Loc,LOC,NULL); - } + protected: + void marshallAttributes(DOMElement* domElement) const { + MARSHALL_STRING_ATTRIB(ProviderID,PROVIDERID,nullptr); + MARSHALL_STRING_ATTRIB(Name,NAME,nullptr); + MARSHALL_STRING_ATTRIB(Loc,LOC,nullptr); + } - void processAttribute(const DOMAttr* attribute) { - PROC_STRING_ATTRIB(ProviderID,PROVIDERID,NULL); - PROC_STRING_ATTRIB(Name,NAME,NULL); - PROC_STRING_ATTRIB(Loc,LOC,NULL); - AbstractXMLObjectUnmarshaller::processAttribute(attribute); - } + void processAttribute(const DOMAttr* attribute) { + PROC_STRING_ATTRIB(ProviderID,PROVIDERID,nullptr); + PROC_STRING_ATTRIB(Name,NAME,nullptr); + PROC_STRING_ATTRIB(Loc,LOC,nullptr); + AbstractXMLObjectUnmarshaller::processAttribute(attribute); + } }; class SAML_DLLLOCAL IDPListImpl : public virtual IDPList, @@ -759,34 +721,24 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_GetComplete=NULL; - m_children.push_back(NULL); + m_GetComplete=nullptr; + m_children.push_back(nullptr); m_pos_GetComplete=m_children.begin(); - } + public: - virtual ~IDPListImpl() { } + virtual ~IDPListImpl() {} - IDPListImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType) - { + IDPListImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } IDPListImpl(const IDPListImpl& src) : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); - if (src.getGetComplete()) - setGetComplete(src.getGetComplete()->cloneGetComplete()); - for (list::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) { - if (*i) { - IDPEntry* entry=dynamic_cast(*i); - if (entry) { - getIDPEntrys().push_back(entry->cloneIDPEntry()); - continue; - } - } - } + IMPL_CLONE_TYPED_CHILD(GetComplete); + IMPL_CLONE_TYPED_CHILDREN(IDPEntry); } IMPL_XMLOBJECT_CLONE(IDPList); @@ -809,38 +761,28 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_ProxyCount=NULL; - m_IDPList=NULL; - m_children.push_back(NULL); + m_ProxyCount=nullptr; + m_IDPList=nullptr; + m_children.push_back(nullptr); m_pos_IDPList=m_children.begin(); - } + public: virtual ~ScopingImpl() { XMLString::release(&m_ProxyCount); } - ScopingImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType) - { + ScopingImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } ScopingImpl(const ScopingImpl& src) : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); - setProxyCount(m_ProxyCount); - if (src.getIDPList()) - setIDPList(src.getIDPList()->cloneIDPList()); - for (list::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) { - if (*i) { - RequesterID* reqid =dynamic_cast(*i); - if (reqid) { - getRequesterIDs().push_back(reqid->cloneRequesterID()); - continue; - } - } - } + IMPL_CLONE_INTEGER_ATTRIB(ProxyCount); + IMPL_CLONE_TYPED_CHILD(IDPList); + IMPL_CLONE_TYPED_CHILDREN(RequesterID); } IMPL_XMLOBJECT_CLONE(Scoping); @@ -850,7 +792,7 @@ namespace opensaml { protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_INTEGER_ATTRIB(ProxyCount,PROXYCOUNT,NULL); + MARSHALL_INTEGER_ATTRIB(ProxyCount,PROXYCOUNT,nullptr); } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { @@ -860,7 +802,7 @@ namespace opensaml { } void processAttribute(const DOMAttr* attribute) { - PROC_INTEGER_ATTRIB(ProxyCount,PROXYCOUNT,NULL); + PROC_INTEGER_ATTRIB(ProxyCount,PROXYCOUNT,nullptr); AbstractXMLObjectUnmarshaller::processAttribute(attribute); } }; @@ -870,22 +812,22 @@ namespace opensaml { void init() { m_ForceAuthn=XML_BOOL_NULL; m_IsPassive=XML_BOOL_NULL; - m_ProtocolBinding=NULL; - m_AssertionConsumerServiceIndex=NULL; - m_AssertionConsumerServiceURL=NULL; - m_AttributeConsumingServiceIndex=NULL; - m_ProviderName=NULL; - - m_Subject=NULL; - m_NameIDPolicy=NULL; - m_Conditions=NULL; - m_RequestedAuthnContext=NULL; - m_Scoping=NULL; - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); + m_ProtocolBinding=nullptr; + m_AssertionConsumerServiceIndex=nullptr; + m_AssertionConsumerServiceURL=nullptr; + m_AttributeConsumingServiceIndex=nullptr; + m_ProviderName=nullptr; + + m_Subject=nullptr; + m_NameIDPolicy=nullptr; + m_Conditions=nullptr; + m_RequestedAuthnContext=nullptr; + m_Scoping=nullptr; + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); m_pos_Subject=m_pos_Extensions; ++m_pos_Subject; m_pos_NameIDPolicy=m_pos_Subject; @@ -896,8 +838,8 @@ namespace opensaml { ++m_pos_RequestedAuthnContext; m_pos_Scoping=m_pos_RequestedAuthnContext; ++m_pos_Scoping; - } + public: virtual ~AuthnRequestImpl() { XMLString::release(&m_ProtocolBinding); @@ -907,39 +849,32 @@ namespace opensaml { XMLString::release(&m_AttributeConsumingServiceIndex); } - AuthnRequestImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType) - { + AuthnRequestImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } AuthnRequestImpl(const AuthnRequestImpl& src) : AbstractXMLObject(src), RequestAbstractTypeImpl(src) { init(); + } - ForceAuthn(m_ForceAuthn); - IsPassive(m_IsPassive); - setProtocolBinding(src.getProtocolBinding()); - setAssertionConsumerServiceIndex(m_AssertionConsumerServiceIndex); - setAssertionConsumerServiceURL(src.getAssertionConsumerServiceURL()); - setAttributeConsumingServiceIndex(m_AttributeConsumingServiceIndex); - setProviderName(src.getProviderName()); - - if (src.getSubject()) - setSubject(src.getSubject()->cloneSubject()); - if (src.getNameIDPolicy()) - setNameIDPolicy(src.getNameIDPolicy()->cloneNameIDPolicy()); - if (src.getConditions()) - setConditions(src.getConditions()->cloneConditions()); - if (src.getRequestedAuthnContext()) - setRequestedAuthnContext(src.getRequestedAuthnContext()->cloneRequestedAuthnContext()); - if (src.getScoping()) - setScoping(src.getScoping()->cloneScoping()); + void _clone(const AuthnRequestImpl& src) { + RequestAbstractTypeImpl::_clone(src); + IMPL_CLONE_BOOLEAN_ATTRIB(ForceAuthn); + IMPL_CLONE_BOOLEAN_ATTRIB(IsPassive); + IMPL_CLONE_ATTRIB(ProtocolBinding); + IMPL_CLONE_INTEGER_ATTRIB(AssertionConsumerServiceIndex); + IMPL_CLONE_ATTRIB(AssertionConsumerServiceURL); + IMPL_CLONE_INTEGER_ATTRIB(AttributeConsumingServiceIndex); + IMPL_CLONE_ATTRIB(ProviderName); + IMPL_CLONE_TYPED_CHILD(Subject); + IMPL_CLONE_TYPED_CHILD(NameIDPolicy); + IMPL_CLONE_TYPED_CHILD(Conditions); + IMPL_CLONE_TYPED_CHILD(RequestedAuthnContext); + IMPL_CLONE_TYPED_CHILD(Scoping); } - IMPL_XMLOBJECT_CLONE(AuthnRequest); - RequestAbstractType* cloneRequestAbstractType() const { - return cloneAuthnRequest(); - } + IMPL_XMLOBJECT_CLONE_EX(AuthnRequest); IMPL_BOOLEAN_ATTRIB(ForceAuthn); IMPL_BOOLEAN_ATTRIB(IsPassive); @@ -957,13 +892,13 @@ namespace opensaml { protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_BOOLEAN_ATTRIB(ForceAuthn,FORCEAUTHN,NULL); - MARSHALL_BOOLEAN_ATTRIB(IsPassive,ISPASSIVE,NULL); - MARSHALL_STRING_ATTRIB(ProtocolBinding,PROTOCOLBINDING,NULL); - MARSHALL_INTEGER_ATTRIB(AssertionConsumerServiceIndex,ASSERTIONCONSUMERSERVICEINDEX,NULL); - MARSHALL_STRING_ATTRIB(AssertionConsumerServiceURL,ASSERTIONCONSUMERSERVICEURL,NULL); - MARSHALL_INTEGER_ATTRIB(AttributeConsumingServiceIndex,ATTRIBUTECONSUMINGSERVICEINDEX,NULL); - MARSHALL_STRING_ATTRIB(ProviderName,PROVIDERNAME,NULL); + MARSHALL_BOOLEAN_ATTRIB(ForceAuthn,FORCEAUTHN,nullptr); + MARSHALL_BOOLEAN_ATTRIB(IsPassive,ISPASSIVE,nullptr); + MARSHALL_STRING_ATTRIB(ProtocolBinding,PROTOCOLBINDING,nullptr); + MARSHALL_INTEGER_ATTRIB(AssertionConsumerServiceIndex,ASSERTIONCONSUMERSERVICEINDEX,nullptr); + MARSHALL_STRING_ATTRIB(AssertionConsumerServiceURL,ASSERTIONCONSUMERSERVICEURL,nullptr); + MARSHALL_INTEGER_ATTRIB(AttributeConsumingServiceIndex,ATTRIBUTECONSUMINGSERVICEINDEX,nullptr); + MARSHALL_STRING_ATTRIB(ProviderName,PROVIDERNAME,nullptr); RequestAbstractTypeImpl::marshallAttributes(domElement); } @@ -976,13 +911,13 @@ namespace opensaml { RequestAbstractTypeImpl::processChildElement(childXMLObject,root); } void processAttribute(const DOMAttr* attribute) { - PROC_BOOLEAN_ATTRIB(ForceAuthn,FORCEAUTHN,NULL); - PROC_BOOLEAN_ATTRIB(IsPassive,ISPASSIVE,NULL); - PROC_STRING_ATTRIB(ProtocolBinding,PROTOCOLBINDING,NULL); - PROC_INTEGER_ATTRIB(AssertionConsumerServiceIndex,ASSERTIONCONSUMERSERVICEINDEX,NULL); - PROC_STRING_ATTRIB(AssertionConsumerServiceURL,ASSERTIONCONSUMERSERVICEURL,NULL); - PROC_INTEGER_ATTRIB(AttributeConsumingServiceIndex,ATTRIBUTECONSUMINGSERVICEINDEX,NULL); - PROC_STRING_ATTRIB(ProviderName,PROVIDERNAME,NULL); + PROC_BOOLEAN_ATTRIB(ForceAuthn,FORCEAUTHN,nullptr); + PROC_BOOLEAN_ATTRIB(IsPassive,ISPASSIVE,nullptr); + PROC_STRING_ATTRIB(ProtocolBinding,PROTOCOLBINDING,nullptr); + PROC_INTEGER_ATTRIB(AssertionConsumerServiceIndex,ASSERTIONCONSUMERSERVICEINDEX,nullptr); + PROC_STRING_ATTRIB(AssertionConsumerServiceURL,ASSERTIONCONSUMERSERVICEURL,nullptr); + PROC_INTEGER_ATTRIB(AttributeConsumingServiceIndex,ATTRIBUTECONSUMINGSERVICEINDEX,nullptr); + PROC_STRING_ATTRIB(ProviderName,PROVIDERNAME,nullptr); RequestAbstractTypeImpl::processAttribute(attribute); } }; @@ -994,20 +929,20 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_ID=NULL; - m_InResponseTo=NULL; - m_Version=NULL; - m_IssueInstant=NULL; - m_Destination=NULL; - m_Consent=NULL; - m_Issuer=NULL; - m_Signature=NULL; - m_Extensions=NULL; - m_Status=NULL; - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); + m_ID=nullptr; + m_InResponseTo=nullptr; + m_Version=nullptr; + m_IssueInstant=nullptr; + m_Destination=nullptr; + m_Consent=nullptr; + m_Issuer=nullptr; + m_Signature=nullptr; + m_Extensions=nullptr; + m_Status=nullptr; + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); m_pos_Issuer=m_children.begin(); m_pos_Signature=m_pos_Issuer; ++m_pos_Signature; @@ -1016,10 +951,12 @@ namespace opensaml { m_pos_Status=m_pos_Extensions; ++m_pos_Status; } + protected: StatusResponseTypeImpl() { init(); } + public: virtual ~StatusResponseTypeImpl() { XMLString::release(&m_ID); @@ -1030,42 +967,40 @@ namespace opensaml { delete m_IssueInstant; } - StatusResponseTypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType) - { + StatusResponseTypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } StatusResponseTypeImpl(const StatusResponseTypeImpl& src) : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); - setID(src.getID()); - setInResponseTo(src.getInResponseTo()); - setVersion(src.getVersion()); - setIssueInstant(src.getIssueInstant()); - setDestination(src.getDestination()); - setConsent(src.getConsent()); - if (src.getIssuer()) - setIssuer(src.getIssuer()->cloneIssuer()); - if (src.getSignature()) - setSignature(src.getSignature()->cloneSignature()); - if (src.getExtensions()) - setExtensions(src.getExtensions()->cloneExtensions()); - if (src.getStatus()) - setStatus(src.getStatus()->cloneStatus()); + } + + void _clone(const StatusResponseTypeImpl& src) { + IMPL_CLONE_ATTRIB(ID); + IMPL_CLONE_ATTRIB(InResponseTo); + IMPL_CLONE_ATTRIB(Version); + IMPL_CLONE_ATTRIB(IssueInstant); + IMPL_CLONE_ATTRIB(Destination); + IMPL_CLONE_ATTRIB(Consent); + IMPL_CLONE_TYPED_CHILD(Issuer); + IMPL_CLONE_TYPED_CHILD(Signature); + IMPL_CLONE_TYPED_CHILD(Extensions); + IMPL_CLONE_TYPED_CHILD(Status); } //IMPL_TYPED_CHILD(Signature); // Need customized setter. protected: - Signature* m_Signature; + xmlsignature::Signature* m_Signature; list::iterator m_pos_Signature; public: - Signature* getSignature() const { + xmlsignature::Signature* getSignature() const { return m_Signature; } - void setSignature(Signature* sig) { + void setSignature(xmlsignature::Signature* sig) { prepareForAssignment(m_Signature,sig); *m_pos_Signature=m_Signature=sig; // Sync content reference back up. @@ -1073,8 +1008,12 @@ namespace opensaml { m_Signature->setContentReference(new opensaml::ContentReference(*this)); } + StatusResponseType* cloneStatusResponseType() const { + return dynamic_cast(clone()); + } + IMPL_STRING_ATTRIB(Version); - IMPL_ID_ATTRIB(ID); + IMPL_ID_ATTRIB_EX(ID,ID,nullptr); IMPL_STRING_ATTRIB(InResponseTo); IMPL_DATETIME_ATTRIB(IssueInstant,0); IMPL_STRING_ATTRIB(Destination); @@ -1084,21 +1023,26 @@ namespace opensaml { IMPL_TYPED_CHILD(Status); protected: + void prepareForMarshalling() const { + if (m_Signature) + declareNonVisibleNamespaces(); + } + void marshallAttributes(DOMElement* domElement) const { if (!m_Version) const_cast(this)->m_Version=XMLString::transcode("2.0"); - MARSHALL_STRING_ATTRIB(Version,VER,NULL); + MARSHALL_STRING_ATTRIB(Version,VER,nullptr); if (!m_ID) const_cast(this)->m_ID=SAMLConfig::getConfig().generateIdentifier(); - MARSHALL_ID_ATTRIB(ID,ID,NULL); + MARSHALL_ID_ATTRIB(ID,ID,nullptr); if (!m_IssueInstant) { - const_cast(this)->m_IssueInstantEpoch=time(NULL); + const_cast(this)->m_IssueInstantEpoch=time(nullptr); const_cast(this)->m_IssueInstant=new DateTime(m_IssueInstantEpoch); } - MARSHALL_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT,NULL); - MARSHALL_STRING_ATTRIB(Destination,DESTINATION,NULL); - MARSHALL_STRING_ATTRIB(Consent,CONSENT,NULL); - MARSHALL_STRING_ATTRIB(InResponseTo,INRESPONSETO,NULL); + MARSHALL_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT,nullptr); + MARSHALL_STRING_ATTRIB(Destination,DESTINATION,nullptr); + MARSHALL_STRING_ATTRIB(Consent,CONSENT,nullptr); + MARSHALL_STRING_ATTRIB(InResponseTo,INRESPONSETO,nullptr); } void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { @@ -1110,12 +1054,12 @@ namespace opensaml { } void processAttribute(const DOMAttr* attribute) { - PROC_ID_ATTRIB(ID,ID,NULL); - PROC_STRING_ATTRIB(Version,VER,NULL); - PROC_STRING_ATTRIB(InResponseTo,INRESPONSETO,NULL); - PROC_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT,NULL); - PROC_STRING_ATTRIB(Destination,DESTINATION,NULL); - PROC_STRING_ATTRIB(Consent,CONSENT,NULL); + PROC_ID_ATTRIB(ID,ID,nullptr); + PROC_STRING_ATTRIB(Version,VER,nullptr); + PROC_STRING_ATTRIB(InResponseTo,INRESPONSETO,nullptr); + PROC_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT,nullptr); + PROC_STRING_ATTRIB(Destination,DESTINATION,nullptr); + PROC_STRING_ATTRIB(Consent,CONSENT,nullptr); AbstractXMLObjectUnmarshaller::processAttribute(attribute); } }; @@ -1123,34 +1067,22 @@ namespace opensaml { class SAML_DLLLOCAL ResponseImpl : public virtual Response, public StatusResponseTypeImpl { public: - virtual ~ResponseImpl() { } + virtual ~ResponseImpl() {} - ResponseImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType) { } + ResponseImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} - ResponseImpl(const ResponseImpl& src) : AbstractXMLObject(src), StatusResponseTypeImpl(src) { - for (list::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) { - if (*i) { - Assertion* assertion=dynamic_cast(*i); - if (assertion) { - getAssertions().push_back(assertion->cloneAssertion()); - continue; - } - EncryptedAssertion* encAssertion=dynamic_cast(*i); - if (encAssertion) { - getEncryptedAssertions().push_back(encAssertion->cloneEncryptedAssertion()); - continue; - } - } - } + ResponseImpl(const ResponseImpl& src) : AbstractXMLObject(src), StatusResponseTypeImpl(src) {} + void _clone(const ResponseImpl& src) { + StatusResponseTypeImpl::_clone(src); + IMPL_CLONE_CHILDBAG_BEGIN; + IMPL_CLONE_TYPED_FOREIGN_CHILD_IN_BAG(Assertion,saml2); + IMPL_CLONE_TYPED_FOREIGN_CHILD_IN_BAG(EncryptedAssertion,saml2); + IMPL_CLONE_CHILDBAG_END; } - IMPL_XMLOBJECT_CLONE(Response); - StatusResponseType* cloneStatusResponseType() const { - return cloneResponse(); - } - + IMPL_XMLOBJECT_CLONE_EX(Response); IMPL_TYPED_FOREIGN_CHILDREN(Assertion,saml2,m_children.end()); IMPL_TYPED_FOREIGN_CHILDREN(EncryptedAssertion,saml2,m_children.end()); @@ -1165,31 +1097,30 @@ namespace opensaml { class SAML_DLLLOCAL ArtifactResolveImpl : public virtual ArtifactResolve, public RequestAbstractTypeImpl { void init() { - m_Artifact=NULL; - m_children.push_back(NULL); + m_Artifact=nullptr; + m_children.push_back(nullptr); m_pos_Artifact=m_pos_Extensions; ++m_pos_Artifact; } + public: - virtual ~ArtifactResolveImpl() { } + virtual ~ArtifactResolveImpl() {} - ArtifactResolveImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType) - { + ArtifactResolveImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } ArtifactResolveImpl(const ArtifactResolveImpl& src) : AbstractXMLObject(src), RequestAbstractTypeImpl(src) { init(); - if(src.getArtifact()) - setArtifact(src.getArtifact()->cloneArtifact()); - } - - IMPL_XMLOBJECT_CLONE(ArtifactResolve); - RequestAbstractType* cloneRequestAbstractType() const { - return cloneArtifactResolve(); } + void _clone(const ArtifactResolveImpl& src) { + RequestAbstractTypeImpl::_clone(src); + IMPL_CLONE_TYPED_CHILD(Artifact); + } + + IMPL_XMLOBJECT_CLONE_EX(ArtifactResolve); IMPL_TYPED_CHILD(Artifact); protected: @@ -1202,45 +1133,40 @@ namespace opensaml { class SAML_DLLLOCAL ArtifactResponseImpl : public virtual ArtifactResponse, public StatusResponseTypeImpl { void init() { - m_Payload=NULL; - m_children.push_back(NULL); + m_Payload=nullptr; + m_children.push_back(nullptr); m_pos_Payload=m_pos_Status; ++m_pos_Payload; } + public: - virtual ~ArtifactResponseImpl() { } + virtual ~ArtifactResponseImpl() {} - ArtifactResponseImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType) - { + ArtifactResponseImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } ArtifactResponseImpl(const ArtifactResponseImpl& src) : AbstractXMLObject(src), StatusResponseTypeImpl(src) { init(); - if (src.getPayload()) - setPayload(getPayload()->clone()); + } + void _clone(const ArtifactResponseImpl& src) { + StatusResponseTypeImpl::_clone(src); + IMPL_CLONE_XMLOBJECT_CHILD(Payload); } - IMPL_XMLOBJECT_CLONE(ArtifactResponse); - StatusResponseType* cloneStatusResponseType() const { - return cloneArtifactResponse(); - } - + IMPL_XMLOBJECT_CLONE_EX(ArtifactResponse); IMPL_XMLOBJECT_CHILD(Payload); protected: void processChildElement(XMLObject* childXMLObject, const DOMElement* root) { // These are valid elements for the parent StatusResponseType, so don't process these. // If not one of these, then it must be the payload. - if ( - ! XMLHelper::isNodeNamed(root,SAML20_NS,saml2::Issuer::LOCAL_NAME) && - ! XMLHelper::isNodeNamed(root,XMLSIG_NS,xmlsignature::Signature::LOCAL_NAME) && - ! XMLHelper::isNodeNamed(root,SAML20P_NS,saml2p::Extensions::LOCAL_NAME) && - ! XMLHelper::isNodeNamed(root,SAML20P_NS,saml2p::Status::LOCAL_NAME) - ) - { + if (!XMLHelper::isNodeNamed(root,SAML20_NS,saml2::Issuer::LOCAL_NAME) && + !XMLHelper::isNodeNamed(root,XMLSIG_NS,xmlsignature::Signature::LOCAL_NAME) && + !XMLHelper::isNodeNamed(root,SAML20P_NS,saml2p::Extensions::LOCAL_NAME) && + !XMLHelper::isNodeNamed(root,SAML20P_NS,saml2p::Status::LOCAL_NAME)) { setPayload(childXMLObject); return; } @@ -1256,62 +1182,32 @@ namespace opensaml { public AbstractXMLObjectUnmarshaller { void init() { - m_EncryptedData=NULL; - m_children.push_back(NULL); + m_EncryptedData=nullptr; + m_children.push_back(nullptr); m_pos_EncryptedData=m_children.begin(); } protected: - NewEncryptedIDImpl() - { + NewEncryptedIDImpl() { init(); } public: virtual ~NewEncryptedIDImpl() {} - NewEncryptedIDImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType) - { + NewEncryptedIDImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } NewEncryptedIDImpl(const NewEncryptedIDImpl& src) : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); - if (src.getEncryptedData()) - setEncryptedData(src.getEncryptedData()->cloneEncryptedData()); - VectorOf(xmlencryption::EncryptedKey) v=getEncryptedKeys(); - for (vector::const_iterator i=src.m_EncryptedKeys.begin(); i!=src.m_EncryptedKeys.end(); i++) { - if (*i) { - v.push_back((*i)->cloneEncryptedKey()); - } - } + IMPL_CLONE_TYPED_CHILD(EncryptedData); + IMPL_CLONE_TYPED_FOREIGN_CHILDREN(EncryptedKey,xmlencryption); } - XMLObject* decrypt(KeyResolver* KEKresolver, const XMLCh* recipient) const - { - if (!m_EncryptedData) - throw DecryptionException("No encrypted data present."); - Decrypter decrypter(KEKresolver, new EncryptedKeyResolver(*this, recipient)); - DOMDocumentFragment* frag = decrypter.decryptData(m_EncryptedData); - if (frag->hasChildNodes() && frag->getFirstChild()==frag->getLastChild()) { - DOMNode* plaintext=frag->getFirstChild(); - if (plaintext->getNodeType()==DOMNode::ELEMENT_NODE) { - auto_ptr ret(XMLObjectBuilder::buildOneFromElement(static_cast(plaintext))); - ret->releaseThisAndChildrenDOM(); - return ret.release(); - } - } - frag->release(); - throw DecryptionException("Decryption did not result in a single element."); - } - - IMPL_XMLOBJECT_CLONE(NewEncryptedID); - EncryptedElementType* cloneEncryptedElementType() const { - return new NewEncryptedIDImpl(*this); - } - + IMPL_XMLOBJECT_CLONE2(NewEncryptedID,EncryptedElementType); IMPL_TYPED_FOREIGN_CHILD(EncryptedData,xmlencryption); IMPL_TYPED_FOREIGN_CHILDREN(EncryptedKey,xmlencryption,m_children.end()); @@ -1329,35 +1225,34 @@ namespace opensaml { public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { - public: - virtual ~TerminateImpl() { } + public: + virtual ~TerminateImpl() {} - TerminateImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType) { } + TerminateImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} - TerminateImpl(const TerminateImpl& src) - : AbstractXMLObject(src), AbstractSimpleElement(src), AbstractDOMCachingXMLObject(src) { - } + TerminateImpl(const TerminateImpl& src) + : AbstractXMLObject(src), AbstractSimpleElement(src), AbstractDOMCachingXMLObject(src) {} - IMPL_XMLOBJECT_CLONE(Terminate); + IMPL_XMLOBJECT_CLONE(Terminate); - protected: - // has no attributes or children + protected: + // has no attributes or children }; class SAML_DLLLOCAL ManageNameIDRequestImpl : public virtual ManageNameIDRequest, public RequestAbstractTypeImpl { void init() { - m_NameID=NULL; - m_EncryptedID=NULL; - m_NewID=NULL; - m_NewEncryptedID=NULL; - m_Terminate=NULL; - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); + m_NameID=nullptr; + m_EncryptedID=nullptr; + m_NewID=nullptr; + m_NewEncryptedID=nullptr; + m_Terminate=nullptr; + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); m_pos_NameID=m_pos_Extensions; ++m_pos_NameID; m_pos_EncryptedID=m_pos_NameID; @@ -1368,38 +1263,30 @@ namespace opensaml { ++m_pos_NewEncryptedID; m_pos_Terminate=m_pos_NewEncryptedID; ++m_pos_Terminate; - } + public: - virtual ~ManageNameIDRequestImpl() { } + virtual ~ManageNameIDRequestImpl() {} - ManageNameIDRequestImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType) - { + ManageNameIDRequestImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } ManageNameIDRequestImpl(const ManageNameIDRequestImpl& src) : AbstractXMLObject(src), RequestAbstractTypeImpl(src) { init(); + } - if (src.getNameID()) - setNameID(src.getNameID()->cloneNameID()); - if (src.getEncryptedID()) - setEncryptedID(src.getEncryptedID()->cloneEncryptedID()); - if (src.getNewID()) - setNewID(src.getNewID()->cloneNewID()); - if (src.getNewEncryptedID()) - setNewEncryptedID(src.getNewEncryptedID()->cloneNewEncryptedID()); - if (src.getTerminate()) - setTerminate(src.getTerminate()->cloneTerminate()); - + void _clone(const ManageNameIDRequestImpl& src) { + RequestAbstractTypeImpl::_clone(src); + IMPL_CLONE_TYPED_CHILD(NameID); + IMPL_CLONE_TYPED_CHILD(EncryptedID); + IMPL_CLONE_TYPED_CHILD(NewID); + IMPL_CLONE_TYPED_CHILD(NewEncryptedID); + IMPL_CLONE_TYPED_CHILD(Terminate); } - IMPL_XMLOBJECT_CLONE(ManageNameIDRequest); - RequestAbstractType* cloneRequestAbstractType() const { - return cloneManageNameIDRequest(); - } - + IMPL_XMLOBJECT_CLONE_EX(ManageNameIDRequest); IMPL_TYPED_FOREIGN_CHILD(NameID,saml2); IMPL_TYPED_FOREIGN_CHILD(EncryptedID,saml2); IMPL_TYPED_CHILD(NewID); @@ -1420,81 +1307,61 @@ namespace opensaml { class SAML_DLLLOCAL ManageNameIDResponseImpl : public virtual ManageNameIDResponse, public StatusResponseTypeImpl { public: - virtual ~ManageNameIDResponseImpl() { } + virtual ~ManageNameIDResponseImpl() {} - ManageNameIDResponseImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType) { } + ManageNameIDResponseImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} - ManageNameIDResponseImpl(const ManageNameIDResponseImpl& src) : AbstractXMLObject(src), StatusResponseTypeImpl(src) { - } + ManageNameIDResponseImpl(const ManageNameIDResponseImpl& src) : AbstractXMLObject(src), StatusResponseTypeImpl(src) {} - IMPL_XMLOBJECT_CLONE(ManageNameIDResponse); - StatusResponseType* cloneStatusResponseType() const { - return cloneManageNameIDResponse(); - } + IMPL_XMLOBJECT_CLONE_EX(ManageNameIDResponse); }; class SAML_DLLLOCAL LogoutRequestImpl : public virtual LogoutRequest, public RequestAbstractTypeImpl { void init() { - m_Reason=NULL; - m_NotOnOrAfter=NULL; - - m_BaseID=NULL; - m_NameID=NULL; - m_EncryptedID=NULL; - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); + m_Reason=nullptr; + m_NotOnOrAfter=nullptr; + m_BaseID=nullptr; + m_NameID=nullptr; + m_EncryptedID=nullptr; + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); m_pos_BaseID=m_pos_Extensions; ++m_pos_BaseID; m_pos_NameID=m_pos_BaseID; ++m_pos_NameID; m_pos_EncryptedID=m_pos_NameID; ++m_pos_EncryptedID; - } + public: virtual ~LogoutRequestImpl() { XMLString::release(&m_Reason); delete m_NotOnOrAfter; } - LogoutRequestImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType) - { + LogoutRequestImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } LogoutRequestImpl(const LogoutRequestImpl& src) : AbstractXMLObject(src), RequestAbstractTypeImpl(src) { init(); + } - setReason(src.getReason()); - setNotOnOrAfter(src.getNotOnOrAfter()); - - if (src.getBaseID()) - setBaseID(src.getBaseID()->cloneBaseID()); - if (src.getNameID()) - setNameID(src.getNameID()->cloneNameID()); - if (src.getEncryptedID()) - setEncryptedID(src.getEncryptedID()->cloneEncryptedID()); - - for (list::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) { - if (*i) { - SessionIndex* si = dynamic_cast(*i); - if (si) { - getSessionIndexs().push_back(si->cloneSessionIndex()); - continue; - } - } - } + void _clone(const LogoutRequestImpl& src) { + RequestAbstractTypeImpl::_clone(src); + IMPL_CLONE_ATTRIB(Reason); + IMPL_CLONE_ATTRIB(NotOnOrAfter); + IMPL_CLONE_TYPED_CHILD(BaseID); + IMPL_CLONE_TYPED_CHILD(NameID); + IMPL_CLONE_TYPED_CHILD(EncryptedID); + IMPL_CLONE_TYPED_CHILDREN(SessionIndex); } - IMPL_XMLOBJECT_CLONE(LogoutRequest); - RequestAbstractType* cloneRequestAbstractType() const { - return cloneLogoutRequest(); - } - + IMPL_XMLOBJECT_CLONE_EX(LogoutRequest); IMPL_STRING_ATTRIB(Reason); IMPL_DATETIME_ATTRIB(NotOnOrAfter,SAMLTIME_MAX); IMPL_TYPED_FOREIGN_CHILD(BaseID,saml2); @@ -1504,8 +1371,8 @@ namespace opensaml { protected: void marshallAttributes(DOMElement* domElement) const { - MARSHALL_STRING_ATTRIB(Reason,REASON,NULL); - MARSHALL_DATETIME_ATTRIB(NotOnOrAfter,NOTONORAFTER,NULL); + MARSHALL_STRING_ATTRIB(Reason,REASON,nullptr); + MARSHALL_DATETIME_ATTRIB(NotOnOrAfter,NOTONORAFTER,nullptr); RequestAbstractTypeImpl::marshallAttributes(domElement); } @@ -1517,8 +1384,8 @@ namespace opensaml { RequestAbstractTypeImpl::processChildElement(childXMLObject,root); } void processAttribute(const DOMAttr* attribute) { - PROC_STRING_ATTRIB(Reason,REASON,NULL); - PROC_DATETIME_ATTRIB(NotOnOrAfter,NOTONORAFTER,NULL); + PROC_STRING_ATTRIB(Reason,REASON,nullptr); + PROC_DATETIME_ATTRIB(NotOnOrAfter,NOTONORAFTER,nullptr); RequestAbstractTypeImpl::processAttribute(attribute); } }; @@ -1526,32 +1393,28 @@ namespace opensaml { class SAML_DLLLOCAL LogoutResponseImpl : public virtual LogoutResponse, public StatusResponseTypeImpl { public: - virtual ~LogoutResponseImpl() { } + virtual ~LogoutResponseImpl() {} - LogoutResponseImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType) { } + LogoutResponseImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) {} - LogoutResponseImpl(const LogoutResponseImpl& src) : AbstractXMLObject(src), StatusResponseTypeImpl(src) { - } + LogoutResponseImpl(const LogoutResponseImpl& src) : AbstractXMLObject(src), StatusResponseTypeImpl(src) {} - IMPL_XMLOBJECT_CLONE(LogoutResponse); - StatusResponseType* cloneStatusResponseType() const { - return cloneLogoutResponse(); - } + IMPL_XMLOBJECT_CLONE_EX(LogoutResponse); }; class SAML_DLLLOCAL NameIDMappingRequestImpl : public virtual NameIDMappingRequest, public RequestAbstractTypeImpl { void init() { - m_BaseID=NULL; - m_NameID=NULL; - m_EncryptedID=NULL; - m_NameIDPolicy=NULL; - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); - m_children.push_back(NULL); + m_BaseID=nullptr; + m_NameID=nullptr; + m_EncryptedID=nullptr; + m_NameIDPolicy=nullptr; + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); m_pos_BaseID=m_pos_Extensions; ++m_pos_BaseID; m_pos_NameID=m_pos_BaseID; @@ -1560,36 +1423,29 @@ namespace opensaml { ++m_pos_EncryptedID; m_pos_NameIDPolicy=m_pos_EncryptedID; ++m_pos_NameIDPolicy; - } + public: - virtual ~NameIDMappingRequestImpl() { } + virtual ~NameIDMappingRequestImpl() {} - NameIDMappingRequestImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType) - { + NameIDMappingRequestImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } NameIDMappingRequestImpl(const NameIDMappingRequestImpl& src) : AbstractXMLObject(src), RequestAbstractTypeImpl(src) { init(); + } - if (src.getBaseID()) - setBaseID(src.getBaseID()->cloneBaseID()); - if (src.getNameID()) - setNameID(src.getNameID()->cloneNameID()); - if (src.getEncryptedID()) - setEncryptedID(src.getEncryptedID()->cloneEncryptedID()); - if (src.getNameIDPolicy()) - setNameIDPolicy(src.getNameIDPolicy()->cloneNameIDPolicy()); - + void _clone(const NameIDMappingRequestImpl& src) { + RequestAbstractTypeImpl::_clone(src); + IMPL_CLONE_TYPED_CHILD(BaseID); + IMPL_CLONE_TYPED_CHILD(NameID); + IMPL_CLONE_TYPED_CHILD(EncryptedID); + IMPL_CLONE_TYPED_CHILD(NameIDPolicy); } - IMPL_XMLOBJECT_CLONE(NameIDMappingRequest); - RequestAbstractType* cloneRequestAbstractType() const { - return cloneNameIDMappingRequest(); - } - + IMPL_XMLOBJECT_CLONE_EX(NameIDMappingRequest); IMPL_TYPED_FOREIGN_CHILD(BaseID,saml2); IMPL_TYPED_FOREIGN_CHILD(NameID,saml2); IMPL_TYPED_FOREIGN_CHILD(EncryptedID,saml2); @@ -1608,39 +1464,35 @@ namespace opensaml { class SAML_DLLLOCAL NameIDMappingResponseImpl : public virtual NameIDMappingResponse, public StatusResponseTypeImpl { void init() { - m_NameID=NULL; - m_EncryptedID=NULL; - m_children.push_back(NULL); - m_children.push_back(NULL); + m_NameID=nullptr; + m_EncryptedID=nullptr; + m_children.push_back(nullptr); + m_children.push_back(nullptr); m_pos_NameID=m_pos_Status; ++m_pos_NameID; m_pos_EncryptedID=m_pos_NameID; ++m_pos_EncryptedID; } + public: - virtual ~NameIDMappingResponseImpl() { } + virtual ~NameIDMappingResponseImpl() {} - NameIDMappingResponseImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType) - { + NameIDMappingResponseImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) { init(); } NameIDMappingResponseImpl(const NameIDMappingResponseImpl& src) : AbstractXMLObject(src), StatusResponseTypeImpl(src) { init(); + } - if (src.getNameID()) - setNameID(getNameID()->cloneNameID()); - if (src.getEncryptedID()) - setEncryptedID(getEncryptedID()->cloneEncryptedID()); - + void _clone(const NameIDMappingResponseImpl& src) { + StatusResponseTypeImpl::_clone(src); + IMPL_CLONE_TYPED_CHILD(NameID); + IMPL_CLONE_TYPED_CHILD(EncryptedID); } - IMPL_XMLOBJECT_CLONE(NameIDMappingResponse); - StatusResponseType* cloneStatusResponseType() const { - return cloneNameIDMappingResponse(); - } - + IMPL_XMLOBJECT_CLONE_EX(NameIDMappingResponse); IMPL_TYPED_FOREIGN_CHILD(NameID,saml2); IMPL_TYPED_FOREIGN_CHILD(EncryptedID,saml2);