virtual std::string hashSHA1(const char* s, bool toHex=false)=0;
/** Manages factories for MessageDecoder plugins. */
- xmltooling::PluginManager<MessageDecoder,std::string,const xercesc::DOMElement*> MessageDecoderManager;
+ xmltooling::PluginManager< MessageDecoder,std::string,std::pair<const xercesc::DOMElement*,const XMLCh*> > MessageDecoderManager;
/** Manages factories for MessageEncoder plugins. */
- xmltooling::PluginManager<MessageEncoder,std::string,const xercesc::DOMElement*> MessageEncoderManager;
+ xmltooling::PluginManager< MessageEncoder,std::string,std::pair<const xercesc::DOMElement*,const XMLCh*> > MessageEncoderManager;
/** Manages factories for SAMLArtifact plugins. */
xmltooling::PluginManager<SAMLArtifact,std::string,const char*> SAMLArtifactManager;
namespace opensaml {
namespace saml1p {
- SAML_DLLLOCAL PluginManager<MessageDecoder,string,const DOMElement*>::Factory SAML1ArtifactDecoderFactory;
- SAML_DLLLOCAL PluginManager<MessageDecoder,string,const DOMElement*>::Factory SAML1POSTDecoderFactory;
- SAML_DLLLOCAL PluginManager<MessageDecoder,string,const DOMElement*>::Factory SAML1SOAPDecoderFactory;
+ SAML_DLLLOCAL PluginManager< MessageDecoder,string,pair<const DOMElement*,const XMLCh*> >::Factory SAML1ArtifactDecoderFactory;
+ SAML_DLLLOCAL PluginManager< MessageDecoder,string,pair<const DOMElement*,const XMLCh*> >::Factory SAML1POSTDecoderFactory;
+ SAML_DLLLOCAL PluginManager< MessageDecoder,string,pair<const DOMElement*,const XMLCh*> >::Factory SAML1SOAPDecoderFactory;
};
namespace saml2p {
- SAML_DLLLOCAL PluginManager<MessageDecoder,string,const DOMElement*>::Factory SAML2ArtifactDecoderFactory;
- SAML_DLLLOCAL PluginManager<MessageDecoder,string,const DOMElement*>::Factory SAML2POSTDecoderFactory;
- SAML_DLLLOCAL PluginManager<MessageDecoder,string,const DOMElement*>::Factory SAML2RedirectDecoderFactory;
- SAML_DLLLOCAL PluginManager<MessageDecoder,string,const DOMElement*>::Factory SAML2SOAPDecoderFactory;
+ SAML_DLLLOCAL PluginManager< MessageDecoder,string,pair<const DOMElement*,const XMLCh*> >::Factory SAML2ArtifactDecoderFactory;
+ SAML_DLLLOCAL PluginManager< MessageDecoder,string,pair<const DOMElement*,const XMLCh*> >::Factory SAML2POSTDecoderFactory;
+ SAML_DLLLOCAL PluginManager< MessageDecoder,string,pair<const DOMElement*,const XMLCh*> >::Factory SAML2RedirectDecoderFactory;
+ SAML_DLLLOCAL PluginManager< MessageDecoder,string,pair<const DOMElement*,const XMLCh*> >::Factory SAML2SOAPDecoderFactory;
};
};
namespace opensaml {
namespace saml1p {
- SAML_DLLLOCAL PluginManager<MessageEncoder,string,const DOMElement*>::Factory SAML1ArtifactEncoderFactory;
- SAML_DLLLOCAL PluginManager<MessageEncoder,string,const DOMElement*>::Factory SAML1POSTEncoderFactory;
- SAML_DLLLOCAL PluginManager<MessageEncoder,string,const DOMElement*>::Factory SAML1SOAPEncoderFactory;
+ SAML_DLLLOCAL PluginManager< MessageEncoder,string,pair<const DOMElement*,const XMLCh*> >::Factory SAML1ArtifactEncoderFactory;
+ SAML_DLLLOCAL PluginManager< MessageEncoder,string,pair<const DOMElement*,const XMLCh*> >::Factory SAML1POSTEncoderFactory;
+ SAML_DLLLOCAL PluginManager< MessageEncoder,string,pair<const DOMElement*,const XMLCh*> >::Factory SAML1SOAPEncoderFactory;
};
namespace saml2p {
- SAML_DLLLOCAL PluginManager<MessageEncoder,string,const DOMElement*>::Factory SAML2ArtifactEncoderFactory;
- SAML_DLLLOCAL PluginManager<MessageEncoder,string,const DOMElement*>::Factory SAML2POSTEncoderFactory;
- SAML_DLLLOCAL PluginManager<MessageEncoder,string,const DOMElement*>::Factory SAML2POSTSimpleSignEncoderFactory;
- SAML_DLLLOCAL PluginManager<MessageEncoder,string,const DOMElement*>::Factory SAML2RedirectEncoderFactory;
- SAML_DLLLOCAL PluginManager<MessageEncoder,string,const DOMElement*>::Factory SAML2SOAPEncoderFactory;
+ SAML_DLLLOCAL PluginManager< MessageEncoder,string,pair<const DOMElement*,const XMLCh*> >::Factory SAML2ArtifactEncoderFactory;
+ SAML_DLLLOCAL PluginManager< MessageEncoder,string,pair<const DOMElement*,const XMLCh*> >::Factory SAML2POSTEncoderFactory;
+ SAML_DLLLOCAL PluginManager< MessageEncoder,string,pair<const DOMElement*,const XMLCh*> >::Factory SAML2POSTSimpleSignEncoderFactory;
+ SAML_DLLLOCAL PluginManager< MessageEncoder,string,pair<const DOMElement*,const XMLCh*> >::Factory SAML2RedirectEncoderFactory;
+ SAML_DLLLOCAL PluginManager< MessageEncoder,string,pair<const DOMElement*,const XMLCh*> >::Factory SAML2SOAPEncoderFactory;
};
};
class SAML_DLLLOCAL SAML1ArtifactDecoder : public MessageDecoder
{
public:
- SAML1ArtifactDecoder(const DOMElement* e) {}
+ SAML1ArtifactDecoder() {}
virtual ~SAML1ArtifactDecoder() {}
xmltooling::XMLObject* decode(
) const;
};
- MessageDecoder* SAML_DLLLOCAL SAML1ArtifactDecoderFactory(const DOMElement* const & e)
+ MessageDecoder* SAML_DLLLOCAL SAML1ArtifactDecoderFactory(const pair<const DOMElement*,const XMLCh*>& p)
{
- return new SAML1ArtifactDecoder(e);
+ return new SAML1ArtifactDecoder();
}
};
};
class SAML_DLLLOCAL SAML1ArtifactEncoder : public MessageEncoder
{
public:
- SAML1ArtifactEncoder(const DOMElement* e) {}
+ SAML1ArtifactEncoder() {}
virtual ~SAML1ArtifactEncoder() {}
long encode(
) const;
};
- MessageEncoder* SAML_DLLLOCAL SAML1ArtifactEncoderFactory(const DOMElement* const & e)
+ MessageEncoder* SAML_DLLLOCAL SAML1ArtifactEncoderFactory(const pair<const DOMElement*,const XMLCh*>& p)
{
- return new SAML1ArtifactEncoder(e);
+ return new SAML1ArtifactEncoder();
}
};
};
class SAML_DLLLOCAL SAML1POSTDecoder : public MessageDecoder
{
public:
- SAML1POSTDecoder(const DOMElement* e) {}
+ SAML1POSTDecoder() {}
virtual ~SAML1POSTDecoder() {}
xmltooling::XMLObject* decode(
) const;
};
- MessageDecoder* SAML_DLLLOCAL SAML1POSTDecoderFactory(const DOMElement* const & e)
+ MessageDecoder* SAML_DLLLOCAL SAML1POSTDecoderFactory(const pair<const DOMElement*,const XMLCh*>& p)
{
- return new SAML1POSTDecoder(e);
+ return new SAML1POSTDecoder();
}
};
};
class SAML_DLLLOCAL SAML1POSTEncoder : public MessageEncoder
{
public:
- SAML1POSTEncoder(const DOMElement* e);
+ SAML1POSTEncoder(const DOMElement* e, const XMLCh* ns);
virtual ~SAML1POSTEncoder() {}
long encode(
string m_template;
};
- MessageEncoder* SAML_DLLLOCAL SAML1POSTEncoderFactory(const DOMElement* const & e)
+ MessageEncoder* SAML_DLLLOCAL SAML1POSTEncoderFactory(const pair<const DOMElement*,const XMLCh*>& p)
{
- return new SAML1POSTEncoder(e);
+ return new SAML1POSTEncoder(p.first, p.second);
}
};
};
static const XMLCh _template[] = UNICODE_LITERAL_8(t,e,m,p,l,a,t,e);
-SAML1POSTEncoder::SAML1POSTEncoder(const DOMElement* e)
+SAML1POSTEncoder::SAML1POSTEncoder(const DOMElement* e, const XMLCh* ns)
{
if (e) {
- auto_ptr_char t(e->getAttribute(_template));
+ auto_ptr_char t(e->getAttributeNS(ns, _template));
if (t.get() && *t.get())
m_template = t.get();
}
class SAML_DLLLOCAL SAML1SOAPDecoder : public MessageDecoder
{
public:
- SAML1SOAPDecoder(const DOMElement* e) {}
+ SAML1SOAPDecoder() {}
virtual ~SAML1SOAPDecoder() {}
bool isUserAgentPresent() const {
) const;
};
- MessageDecoder* SAML_DLLLOCAL SAML1SOAPDecoderFactory(const DOMElement* const & e)
+ MessageDecoder* SAML_DLLLOCAL SAML1SOAPDecoderFactory(const pair<const DOMElement*,const XMLCh*>& p)
{
- return new SAML1SOAPDecoder(e);
+ return new SAML1SOAPDecoder();
}
};
};
class SAML_DLLLOCAL SAML1SOAPEncoder : public MessageEncoder
{
public:
- SAML1SOAPEncoder(const DOMElement* e) {}
+ SAML1SOAPEncoder() {}
virtual ~SAML1SOAPEncoder() {}
bool isUserAgentPresent() const {
) const;
};
- MessageEncoder* SAML_DLLLOCAL SAML1SOAPEncoderFactory(const DOMElement* const & e)
+ MessageEncoder* SAML_DLLLOCAL SAML1SOAPEncoderFactory(const pair<const DOMElement*,const XMLCh*>& p)
{
- return new SAML1SOAPEncoder(e);
+ return new SAML1SOAPEncoder();
}
};
};
class SAML_DLLLOCAL SAML2ArtifactDecoder : public MessageDecoder
{
public:
- SAML2ArtifactDecoder(const DOMElement* e) {}
+ SAML2ArtifactDecoder() {}
virtual ~SAML2ArtifactDecoder() {}
xmltooling::XMLObject* decode(
) const;
};
- MessageDecoder* SAML_DLLLOCAL SAML2ArtifactDecoderFactory(const DOMElement* const & e)
+ MessageDecoder* SAML_DLLLOCAL SAML2ArtifactDecoderFactory(const pair<const DOMElement*,const XMLCh*>& p)
{
- return new SAML2ArtifactDecoder(e);
+ return new SAML2ArtifactDecoder();
}
};
};
class SAML_DLLLOCAL SAML2ArtifactEncoder : public MessageEncoder
{
public:
- SAML2ArtifactEncoder(const DOMElement* e);
+ SAML2ArtifactEncoder(const DOMElement* e, const XMLCh* ns);
virtual ~SAML2ArtifactEncoder() {}
long encode(
string m_template;
};
- MessageEncoder* SAML_DLLLOCAL SAML2ArtifactEncoderFactory(const DOMElement* const & e)
+ MessageEncoder* SAML_DLLLOCAL SAML2ArtifactEncoderFactory(const pair<const DOMElement*,const XMLCh*>& p)
{
- return new SAML2ArtifactEncoder(e);
+ return new SAML2ArtifactEncoder(p.first, p.second);
}
};
static const XMLCh postArtifact[] = UNICODE_LITERAL_12(p,o,s,t,A,r,t,i,f,a,c,t);
};
-SAML2ArtifactEncoder::SAML2ArtifactEncoder(const DOMElement* e) : m_post(false)
+SAML2ArtifactEncoder::SAML2ArtifactEncoder(const DOMElement* e, const XMLCh* ns) : m_post(false)
{
if (e) {
- const XMLCh* flag = e->getAttribute(postArtifact);
+ const XMLCh* flag = e->getAttributeNS(ns, postArtifact);
m_post = (flag && (*flag==chLatin_t || *flag==chDigit_1));
if (m_post) {
- auto_ptr_char t(e->getAttribute(_template));
+ auto_ptr_char t(e->getAttributeNS(ns, _template));
if (t.get() && *t.get())
m_template = t.get();
}
class SAML_DLLLOCAL SAML2POSTDecoder : public MessageDecoder
{
public:
- SAML2POSTDecoder(const DOMElement* e) {}
+ SAML2POSTDecoder() {}
virtual ~SAML2POSTDecoder() {}
xmltooling::XMLObject* decode(
) const;
};
- MessageDecoder* SAML_DLLLOCAL SAML2POSTDecoderFactory(const DOMElement* const & e)
+ MessageDecoder* SAML_DLLLOCAL SAML2POSTDecoderFactory(const pair<const DOMElement*,const XMLCh*>& p)
{
- return new SAML2POSTDecoder(e);
+ return new SAML2POSTDecoder();
}
};
};
class SAML_DLLLOCAL SAML2POSTEncoder : public MessageEncoder
{
public:
- SAML2POSTEncoder(const DOMElement* e, bool simple=false);
+ SAML2POSTEncoder(const DOMElement* e, const XMLCh* ns, bool simple=false);
virtual ~SAML2POSTEncoder() {}
long encode(
bool m_simple;
};
- MessageEncoder* SAML_DLLLOCAL SAML2POSTEncoderFactory(const DOMElement* const & e)
+ MessageEncoder* SAML_DLLLOCAL SAML2POSTEncoderFactory(const pair<const DOMElement*,const XMLCh*>& p)
{
- return new SAML2POSTEncoder(e, false);
+ return new SAML2POSTEncoder(p.first, p.second, false);
}
- MessageEncoder* SAML_DLLLOCAL SAML2POSTSimpleSignEncoderFactory(const DOMElement* const & e)
+ MessageEncoder* SAML_DLLLOCAL SAML2POSTSimpleSignEncoderFactory(const pair<const DOMElement*,const XMLCh*>& p)
{
- return new SAML2POSTEncoder(e, true);
+ return new SAML2POSTEncoder(p.first, p.second, true);
}
};
};
static const XMLCh _template[] = UNICODE_LITERAL_8(t,e,m,p,l,a,t,e);
-SAML2POSTEncoder::SAML2POSTEncoder(const DOMElement* e, bool simple) : m_simple(simple)
+SAML2POSTEncoder::SAML2POSTEncoder(const DOMElement* e, const XMLCh* ns, bool simple) : m_simple(simple)
{
if (e) {
- auto_ptr_char t(e->getAttribute(_template));
+ auto_ptr_char t(e->getAttributeNS(ns, _template));
if (t.get() && *t.get())
m_template = t.get();
}
class SAML_DLLLOCAL SAML2RedirectDecoder : public MessageDecoder
{
public:
- SAML2RedirectDecoder(const DOMElement* e) {}
+ SAML2RedirectDecoder() {}
virtual ~SAML2RedirectDecoder() {}
xmltooling::XMLObject* decode(
) const;
};
- MessageDecoder* SAML_DLLLOCAL SAML2RedirectDecoderFactory(const DOMElement* const & e)
+ MessageDecoder* SAML_DLLLOCAL SAML2RedirectDecoderFactory(const pair<const DOMElement*,const XMLCh*>& p)
{
- return new SAML2RedirectDecoder(e);
+ return new SAML2RedirectDecoder();
}
};
};
class SAML_DLLLOCAL SAML2RedirectEncoder : public MessageEncoder
{
public:
- SAML2RedirectEncoder(const DOMElement* e) {}
+ SAML2RedirectEncoder() {}
virtual ~SAML2RedirectEncoder() {}
bool isCompact() const {
) const;
};
- MessageEncoder* SAML_DLLLOCAL SAML2RedirectEncoderFactory(const DOMElement* const & e)
+ MessageEncoder* SAML_DLLLOCAL SAML2RedirectEncoderFactory(const pair<const DOMElement*,const XMLCh*>& p)
{
- return new SAML2RedirectEncoder(e);
+ return new SAML2RedirectEncoder();
}
};
};
class SAML_DLLLOCAL SAML2SOAPDecoder : public MessageDecoder
{
public:
- SAML2SOAPDecoder(const DOMElement* e);
+ SAML2SOAPDecoder() {}
virtual ~SAML2SOAPDecoder() {}
bool isUserAgentPresent() const {
) const;
};
- MessageDecoder* SAML_DLLLOCAL SAML2SOAPDecoderFactory(const DOMElement* const & e)
+ MessageDecoder* SAML_DLLLOCAL SAML2SOAPDecoderFactory(const pair<const DOMElement*,const XMLCh*>& p)
{
- return new SAML2SOAPDecoder(e);
+ return new SAML2SOAPDecoder();
}
};
};
-SAML2SOAPDecoder::SAML2SOAPDecoder(const DOMElement* e) {}
-
XMLObject* SAML2SOAPDecoder::decode(
string& relayState,
const GenericRequest& genericRequest,
class SAML_DLLLOCAL SAML2SOAPEncoder : public MessageEncoder
{
public:
- SAML2SOAPEncoder(const DOMElement* e);
+ SAML2SOAPEncoder() {}
virtual ~SAML2SOAPEncoder() {}
bool isUserAgentPresent() const {
) const;
};
- MessageEncoder* SAML_DLLLOCAL SAML2SOAPEncoderFactory(const DOMElement* const & e)
+ MessageEncoder* SAML_DLLLOCAL SAML2SOAPEncoderFactory(const pair<const DOMElement*,const XMLCh*>& p)
{
- return new SAML2SOAPEncoder(e);
+ return new SAML2SOAPEncoder();
}
};
};
-SAML2SOAPEncoder::SAML2SOAPEncoder(const DOMElement* e) {}
-
long SAML2SOAPEncoder::encode(
GenericResponse& genericResponse,
XMLObject* xmlObject,
\r
// Encode message.\r
auto_ptr<MessageEncoder> encoder(\r
- SAMLConfig::getConfig().MessageEncoderManager.newPlugin(samlconstants::SAML1_PROFILE_BROWSER_ARTIFACT, NULL)\r
+ SAMLConfig::getConfig().MessageEncoderManager.newPlugin(\r
+ samlconstants::SAML1_PROFILE_BROWSER_ARTIFACT, pair<const DOMElement*,const XMLCh*>(NULL,NULL)\r
+ )\r
);\r
Locker locker(m_metadata);\r
encoder->encode(\r
// Decode message.\r
string relayState;\r
auto_ptr<MessageDecoder> decoder(\r
- SAMLConfig::getConfig().MessageDecoderManager.newPlugin(samlconstants::SAML1_PROFILE_BROWSER_ARTIFACT, NULL)\r
+ SAMLConfig::getConfig().MessageDecoderManager.newPlugin(\r
+ samlconstants::SAML1_PROFILE_BROWSER_ARTIFACT, pair<const DOMElement*,const XMLCh*>(NULL,NULL)\r
+ )\r
);\r
decoder->setArtifactResolver(this);\r
auto_ptr<Response> response(dynamic_cast<Response*>(decoder->decode(relayState,*this,policy)));\r
encoder_config->getDocumentElement()->setAttributeNS(NULL,lit2.get(),lit3.get());
auto_ptr<MessageEncoder> encoder(
SAMLConfig::getConfig().MessageEncoderManager.newPlugin(
- samlconstants::SAML1_PROFILE_BROWSER_POST, encoder_config->getDocumentElement()
+ samlconstants::SAML1_PROFILE_BROWSER_POST, pair<const DOMElement*,const XMLCh*>(encoder_config->getDocumentElement(),NULL)
)
);
// Decode message.
string relayState;
auto_ptr<MessageDecoder> decoder(
- SAMLConfig::getConfig().MessageDecoderManager.newPlugin(samlconstants::SAML1_PROFILE_BROWSER_POST, NULL)
+ SAMLConfig::getConfig().MessageDecoderManager.newPlugin(
+ samlconstants::SAML1_PROFILE_BROWSER_POST, pair<const DOMElement*,const XMLCh*>(NULL,NULL)
+ )
);
auto_ptr<Response> response(dynamic_cast<Response*>(decoder->decode(relayState,*this,policy)));
// Encode message.
auto_ptr<MessageEncoder> encoder(
- SAMLConfig::getConfig().MessageEncoderManager.newPlugin(samlconstants::SAML20_BINDING_HTTP_ARTIFACT, NULL)
+ SAMLConfig::getConfig().MessageEncoderManager.newPlugin(
+ samlconstants::SAML20_BINDING_HTTP_ARTIFACT, pair<const DOMElement*,const XMLCh*>(NULL,NULL)
+ )
);
Locker locker(m_metadata);
encoder->encode(
// Decode message.
string relayState;
auto_ptr<MessageDecoder> decoder(
- SAMLConfig::getConfig().MessageDecoderManager.newPlugin(samlconstants::SAML20_BINDING_HTTP_ARTIFACT, NULL)
+ SAMLConfig::getConfig().MessageDecoderManager.newPlugin(
+ samlconstants::SAML20_BINDING_HTTP_ARTIFACT, pair<const DOMElement*,const XMLCh*>(NULL,NULL)
+ )
);
decoder->setArtifactResolver(this);
auto_ptr<Response> response(dynamic_cast<Response*>(decoder->decode(relayState,*this,policy)));
encoder_config->getDocumentElement()->setAttributeNS(NULL,lit2.get(),lit3.get());
auto_ptr<MessageEncoder> encoder(
SAMLConfig::getConfig().MessageEncoderManager.newPlugin(
- samlconstants::SAML20_BINDING_HTTP_POST, encoder_config->getDocumentElement()
+ samlconstants::SAML20_BINDING_HTTP_POST, pair<const DOMElement*,const XMLCh*>(encoder_config->getDocumentElement(), NULL)
)
);
Locker locker(m_metadata);
// Decode message.
string relayState;
auto_ptr<MessageDecoder> decoder(
- SAMLConfig::getConfig().MessageDecoderManager.newPlugin(samlconstants::SAML20_BINDING_HTTP_POST, NULL)
+ SAMLConfig::getConfig().MessageDecoderManager.newPlugin(
+ samlconstants::SAML20_BINDING_HTTP_POST, pair<const DOMElement*,const XMLCh*>(NULL,NULL)
+ )
);
auto_ptr<Response> response(dynamic_cast<Response*>(decoder->decode(relayState,*this,policy)));
encoder_config->getDocumentElement()->setAttributeNS(NULL,lit2.get(),lit3.get());
auto_ptr<MessageEncoder> encoder(
SAMLConfig::getConfig().MessageEncoderManager.newPlugin(
- samlconstants::SAML20_BINDING_HTTP_POST_SIMPLESIGN, encoder_config->getDocumentElement()
+ samlconstants::SAML20_BINDING_HTTP_POST_SIMPLESIGN, pair<const DOMElement*,const XMLCh*>(encoder_config->getDocumentElement(),NULL)
)
);
Locker locker(m_metadata);
// Decode message.
string relayState;
auto_ptr<MessageDecoder> decoder(
- SAMLConfig::getConfig().MessageDecoderManager.newPlugin(samlconstants::SAML20_BINDING_HTTP_POST_SIMPLESIGN, NULL)
+ SAMLConfig::getConfig().MessageDecoderManager.newPlugin(
+ samlconstants::SAML20_BINDING_HTTP_POST_SIMPLESIGN, pair<const DOMElement*,const XMLCh*>(NULL,NULL)
+ )
);
auto_ptr<Response> response(dynamic_cast<Response*>(decoder->decode(relayState,*this,policy)));
// Encode message.
auto_ptr<MessageEncoder> encoder(
- SAMLConfig::getConfig().MessageEncoderManager.newPlugin(samlconstants::SAML20_BINDING_HTTP_REDIRECT, NULL)
+ SAMLConfig::getConfig().MessageEncoderManager.newPlugin(
+ samlconstants::SAML20_BINDING_HTTP_REDIRECT, pair<const DOMElement*,const XMLCh*>(NULL,NULL)
+ )
);
Locker locker(m_metadata);
encoder->encode(
// Decode message.
string relayState;
auto_ptr<MessageDecoder> decoder(
- SAMLConfig::getConfig().MessageDecoderManager.newPlugin(samlconstants::SAML20_BINDING_HTTP_REDIRECT, NULL)
+ SAMLConfig::getConfig().MessageDecoderManager.newPlugin(
+ samlconstants::SAML20_BINDING_HTTP_REDIRECT, pair<const DOMElement*,const XMLCh*>(NULL,NULL)
+ )
);
auto_ptr<Response> response(dynamic_cast<Response*>(decoder->decode(relayState,*this,policy)));