X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=saml%2Fbinding%2Fimpl%2FSOAPClient.cpp;h=feff3770c98a96f3024cb062d1c7ba46e2d64d84;hb=b1614d3c1fc1f4230ab2a123f43994127c25462c;hp=065303642a47eba2071edc2a906fd645adb663d3;hpb=932cfaae2176c2eba1a9938dc420591a9551a7f3;p=shibboleth%2Fcpp-opensaml.git diff --git a/saml/binding/impl/SOAPClient.cpp b/saml/binding/impl/SOAPClient.cpp index 0653036..feff377 100644 --- a/saml/binding/impl/SOAPClient.cpp +++ b/saml/binding/impl/SOAPClient.cpp @@ -37,31 +37,37 @@ using namespace opensaml; using namespace xmltooling; using namespace std; -void SOAPClient::send(const soap11::Envelope* env, const KeyInfoSource& peer, const char* endpoint) +void SOAPClient::send(const soap11::Envelope& env, MetadataCredentialCriteria& peer, const char* endpoint) { // Clear policy. - m_policy.setIssuer(NULL); - m_policy.setIssuerMetadata(NULL); - - m_peer = dynamic_cast(&peer); + m_policy.reset(); + + m_criteria = &peer; + m_peer = &(peer.getRole()); - soap11::SOAPClient::send(env, peer, endpoint); + const QName& role = m_peer->getElementQName(); + if (XMLString::equals(role.getLocalPart(),RoleDescriptor::LOCAL_NAME)) + m_policy.setRole(m_peer->getSchemaType()); + else + m_policy.setRole(&role); + + auto_ptr_char pn(dynamic_cast(m_peer->getParent())->getEntityID()); + soap11::SOAPClient::send(env, pn.get(), endpoint); } -void SOAPClient::prepareTransport(const xmltooling::SOAPTransport& transport) +void SOAPClient::prepareTransport(xmltooling::SOAPTransport& transport) { - const HTTPSOAPTransport* http = dynamic_cast(&transport); + HTTPSOAPTransport* http = dynamic_cast(&transport); if (http) { http->setRequestHeader("SOAPAction", "http://www.oasis-open.org/committees/security"); http->setRequestHeader("Xerces-C", XERCES_FULLVERSIONDOT); - http->setRequestHeader("XML-Security-C", XSEC_VERSION); + http->setRequestHeader("XML-Security-C", XSEC_FULLVERSIONDOT); http->setRequestHeader("OpenSAML-C", OPENSAML_FULLVERSIONDOT); } const X509TrustEngine* engine = dynamic_cast(m_policy.getTrustEngine()); if (engine) { - const MetadataProvider* metadata = m_policy.getMetadataProvider(); - if (!transport.setTrustEngine(engine, m_force, metadata ? metadata->getKeyResolver() : NULL)) + if (!transport.setTrustEngine(engine, m_policy.getMetadataProvider(), m_criteria, m_force)) throw BindingException("Unable to install X509TrustEngine into SOAPTransport."); } } @@ -72,16 +78,19 @@ soap11::Envelope* SOAPClient::receive() if (env.get()) { if (m_peer && m_transport->isSecure()) { // Set issuer based on peer identity. - EntityDescriptor* parent = dynamic_cast(m_peer->getParent()); - if (parent) { - Issuer* issuer = IssuerBuilder::buildIssuer(); - issuer->setName(parent->getEntityID()); - m_policy.setIssuer(issuer); - m_policy.setIssuerMetadata(m_peer); - m_policy.setSecure(true); - } + m_policy.setIssuer(dynamic_cast(m_peer->getParent())->getEntityID()); + m_policy.setIssuerMetadata(m_peer); + m_policy.setSecure(true); } m_policy.evaluate(*(env.get())); } return env.release(); } + +void SOAPClient::reset() +{ + m_criteria = NULL; + m_peer = NULL; + soap11::SOAPClient::reset(); + m_policy.reset(); +}