X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=saml%2Fbinding%2Fimpl%2FMessageDecoder.cpp;h=4ff6c79fc01f95f840a61d8bccc1b222e72bb806;hb=19779e1afa0a1a75bab7fc6c2c65de7b9ddb5a79;hp=070d90da0fe546ab39dcc0801b448f07d09b1e59;hpb=33173e3228184a0fcc4115516f7d3daccfadcbff;p=shibboleth%2Fcpp-opensaml.git diff --git a/saml/binding/impl/MessageDecoder.cpp b/saml/binding/impl/MessageDecoder.cpp index 070d90d..4ff6c79 100644 --- a/saml/binding/impl/MessageDecoder.cpp +++ b/saml/binding/impl/MessageDecoder.cpp @@ -1,6 +1,6 @@ /* - * Copyright 2001-2007 Internet2 - * + * Copyright 2001-2010 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 @@ -16,14 +16,19 @@ /** * MessageDecoder.cpp - * - * Interface to SAML protocol binding message decoders. + * + * Interface to SAML protocol binding message decoders. */ #include "internal.h" #include "binding/MessageDecoder.h" +#include "saml2/metadata/EndpointManager.h" +#include "saml2/metadata/Metadata.h" #include "util/SAMLConstants.h" +#include + +using namespace opensaml::saml2md; using namespace opensaml; using namespace xmltooling; using namespace std; @@ -33,7 +38,7 @@ namespace opensaml { SAML_DLLLOCAL PluginManager< MessageDecoder,string,pair >::Factory SAML1ArtifactDecoderFactory; SAML_DLLLOCAL PluginManager< MessageDecoder,string,pair >::Factory SAML1POSTDecoderFactory; SAML_DLLLOCAL PluginManager< MessageDecoder,string,pair >::Factory SAML1SOAPDecoderFactory; - }; + }; namespace saml2p { SAML_DLLLOCAL PluginManager< MessageDecoder,string,pair >::Factory SAML2ArtifactDecoderFactory; @@ -56,4 +61,53 @@ void SAML_API opensaml::registerMessageDecoders() conf.MessageDecoderManager.registerFactory(samlconstants::SAML20_BINDING_HTTP_REDIRECT, saml2p::SAML2RedirectDecoderFactory); conf.MessageDecoderManager.registerFactory(samlconstants::SAML20_BINDING_SOAP, saml2p::SAML2SOAPDecoderFactory); conf.MessageDecoderManager.registerFactory(samlconstants::SAML20_BINDING_PAOS, saml2p::SAML2ECPDecoderFactory); + + static const XMLCh RelayState[] = UNICODE_LITERAL_10(R,e,l,a,y,S,t,a,t,e); + XMLObjectBuilder::registerBuilder(xmltooling::QName(samlconstants::SAML20ECP_NS, RelayState), new AnyElementBuilder()); +} + +MessageDecoder::MessageDecoder() : m_artifactResolver(nullptr) +{ +} + +MessageDecoder::~MessageDecoder() +{ +} + +const XMLCh* MessageDecoder::getProtocolFamily() const +{ + return nullptr; +} + +bool MessageDecoder::isUserAgentPresent() const +{ + return true; +} + +void MessageDecoder::setArtifactResolver(const ArtifactResolver* artifactResolver) +{ + m_artifactResolver = artifactResolver; +} + +MessageDecoder::ArtifactResolver::ArtifactResolver() +{ +} + +MessageDecoder::ArtifactResolver::~ArtifactResolver() +{ +} + +bool MessageDecoder::ArtifactResolver::isSupported(const SSODescriptorType& ssoDescriptor) const +{ + EndpointManager mgr(ssoDescriptor.getArtifactResolutionServices()); + if (ssoDescriptor.hasSupport(samlconstants::SAML20P_NS)) { + auto_ptr_XMLCh binding(samlconstants::SAML20_BINDING_SOAP); + return (mgr.getByBinding(binding.get()) != nullptr); + } + else if (ssoDescriptor.hasSupport(samlconstants::SAML11_PROTOCOL_ENUM) || ssoDescriptor.hasSupport(samlconstants::SAML10_PROTOCOL_ENUM)) { + auto_ptr_XMLCh binding(samlconstants::SAML1_BINDING_SOAP); + return (mgr.getByBinding(binding.get()) != nullptr); + } + + return false; }