Correct constness of transport API, handle both chunked and buffered encoding.
authorcantor <cantor@cb58f699-b61c-0410-a6fe-9272a202ed29>
Thu, 15 Feb 2007 22:46:09 +0000 (22:46 +0000)
committercantor <cantor@cb58f699-b61c-0410-a6fe-9272a202ed29>
Thu, 15 Feb 2007 22:46:09 +0000 (22:46 +0000)
git-svn-id: https://svn.middleware.georgetown.edu/cpp-sp/trunk@2169 cb58f699-b61c-0410-a6fe-9272a202ed29

configs/shibboleth.xml.in
schemas/shibboleth-spconfig-2.0.xsd
shibsp/binding/SOAPClient.h
shibsp/binding/impl/SOAPClient.cpp
util/samlquery.cpp

index e24d5c3..93d84a8 100644 (file)
                        signedAssertions="false"
                        requireConfidentiality="true"
                        requireTransportAuth="true"
+                       chunkedEncoding="true"
                        connectTimeout="15" timeout="30"
                        >
                        <Rule type="SAML1Message"/>
index 4054f2e..ca63927 100644 (file)
                                                <attribute name="signedAssertions" type="boolean" default="false"/>\r
                                                <attribute name="requireConfidentiality" type="boolean" default="true"/>\r
                                                <attribute name="requireTransportAuth" type="boolean" default="true"/>\r
+                                               <attribute name="chunkedEncoding" type="boolean" default="true"/>\r
                                                <attribute name="connectTimeout" type="unsignedShort" default="15"/>\r
                                                <attribute name="timeout" type="unsignedShort" default="30"/>\r
                                                <anyAttribute namespace="##any" processContents="lax"/>\r
index f19af64..6267048 100644 (file)
@@ -64,7 +64,7 @@ namespace shibsp {
          * 
          * @param transport reference to transport layer
          */
-        void prepareTransport(const xmltooling::SOAPTransport& transport);
+        void prepareTransport(xmltooling::SOAPTransport& transport);
 
         /** Application supplied to client. */
         const Application& m_app;
index 7e9ec74..97363e8 100644 (file)
@@ -38,6 +38,18 @@ using namespace xmltooling;
 using namespace log4cpp;
 using namespace std;
 
+namespace {
+    class SHIBSP_DLLLOCAL _addcert : public binary_function<X509Data*,XSECCryptoX509*,void> {
+    public:
+        void operator()(X509Data* bag, XSECCryptoX509* cert) const {
+            safeBuffer& buf=cert->getDEREncodingSB();
+            X509Certificate* x=X509CertificateBuilder::buildX509Certificate();
+            x->setValue(buf.sbStrToXMLCh());
+            bag->getX509Certificates().push_back(x);
+        }
+    };
+};
+
 SOAPClient::SOAPClient(const Application& application, opensaml::SecurityPolicy& policy)
     : opensaml::SOAPClient(policy), m_app(application), m_settings(NULL), m_credUse(NULL), m_credResolver(NULL)
 {
@@ -51,18 +63,6 @@ SOAPClient::SOAPClient(const Application& application, opensaml::SecurityPolicy&
     policy.setTrustEngine(application.getTrustEngine());
 }
 
-namespace {
-    class SHIBSP_DLLLOCAL _addcert : public binary_function<X509Data*,XSECCryptoX509*,void> {
-    public:
-        void operator()(X509Data* bag, XSECCryptoX509* cert) const {
-            safeBuffer& buf=cert->getDEREncodingSB();
-            X509Certificate* x=X509CertificateBuilder::buildX509Certificate();
-            x->setValue(buf.sbStrToXMLCh());
-            bag->getX509Certificates().push_back(x);
-        }
-    };
-};
-
 void SOAPClient::send(const soap11::Envelope& env, const KeyInfoSource& peer, const char* endpoint)
 {
     if (!m_peer)
@@ -116,7 +116,7 @@ void SOAPClient::send(const soap11::Envelope& env, const KeyInfoSource& peer, co
     opensaml::SOAPClient::send(env, peer, endpoint);
 }
 
-void SOAPClient::prepareTransport(const SOAPTransport& transport)
+void SOAPClient::prepareTransport(SOAPTransport& transport)
 {
 #ifdef _DEBUG
     xmltooling::NDC("prepareTransport");
@@ -185,9 +185,12 @@ void SOAPClient::prepareTransport(const SOAPTransport& transport)
     transport.setConnectTimeout(m_settings->getUnsignedInt("connectTimeout").second);
     transport.setTimeout(m_settings->getUnsignedInt("timeout").second);
 
-    const HTTPSOAPTransport* http = dynamic_cast<const HTTPSOAPTransport*>(&transport);
-    if (http)
+    HTTPSOAPTransport* http = dynamic_cast<HTTPSOAPTransport*>(&transport);
+    if (http) {
+        flag = m_settings->getBool("chunkedEncoding");
+        http->useChunkedEncoding(!flag.first || flag.second);
         http->setRequestHeader("Shibboleth", PACKAGE_VERSION);
+    }
 }
 
 void SOAPClient::reset()
index d1af42c..d71ea08 100644 (file)
@@ -103,8 +103,7 @@ int main(int argc,char* argv[])
         SPConfig::Trust |\r
         SPConfig::Credentials |\r
         SPConfig::AttributeResolver |\r
-        SPConfig::OutOfProcess |\r
-        SPConfig::Caching\r
+        SPConfig::OutOfProcess\r
         );\r
     if (!conf.init(path))\r
         return -10;\r
@@ -171,22 +170,22 @@ int main(int argc,char* argv[])
                         continue;\r
                     auto_ptr_char loc((*ep)->getLocation());\r
                     NameID* nameid = NameIDBuilder::buildNameID();\r
-                    Issuer* iss = IssuerBuilder::buildIssuer();\r
                     opensaml::saml2::Subject* subject = opensaml::saml2::SubjectBuilder::buildSubject();\r
+                    subject->setNameID(nameid);\r
                     opensaml::saml2p::AttributeQuery* query = opensaml::saml2p::AttributeQueryBuilder::buildAttributeQuery();\r
+                    query->setSubject(subject);\r
+                    Issuer* iss = IssuerBuilder::buildIssuer();\r
+                    query->setIssuer(iss);\r
                     nameid->setName(name.get());\r
                     nameid->setFormat(format.get() ? format.get() : NameID::TRANSIENT);\r
                     nameid->setNameQualifier(domain.get());\r
                     iss->setName(issuer.get());\r
-                    subject->setNameID(nameid);\r
-                    query->setSubject(subject);\r
-                    query->setIssuer(iss);\r
                     SAML2SOAPClient client(soaper);\r
                     client.sendSAML(query, *AA, loc.get());\r
                     srt = client.receiveSAML();\r
                 }\r
                 catch (exception& ex) {\r
-                    cerr << ex.what() << endl;\r
+                    cerr << "Caught exception: " << ex.what() << endl << endl;\r
                     soaper.reset();\r
                 }\r
             }\r
@@ -214,13 +213,14 @@ int main(int argc,char* argv[])
                     auto_ptr_char loc((*ep)->getLocation());\r
                     NameIdentifier* nameid = NameIdentifierBuilder::buildNameIdentifier();\r
                     opensaml::saml1::Subject* subject = opensaml::saml1::SubjectBuilder::buildSubject();\r
+                    subject->setNameIdentifier(nameid);\r
                     opensaml::saml1p::AttributeQuery* query = opensaml::saml1p::AttributeQueryBuilder::buildAttributeQuery();\r
+                    query->setSubject(subject);\r
                     Request* request = RequestBuilder::buildRequest();\r
+                    request->setAttributeQuery(query);\r
                     nameid->setName(name.get());\r
                     nameid->setFormat(format.get() ? format.get() : shibspconstants::SHIB1_NAMEID_FORMAT_URI);\r
                     nameid->setNameQualifier(domain.get());\r
-                    subject->setNameIdentifier(nameid);\r
-                    query->setSubject(subject);\r
                     query->setResource(issuer.get());\r
                     request->setMinorVersion(ver==v11 ? 1 : 0);\r
                     SAML1SOAPClient client(soaper);\r
@@ -228,7 +228,7 @@ int main(int argc,char* argv[])
                     response = client.receiveSAML();\r
                 }\r
                 catch (exception& ex) {\r
-                    cerr << ex.what() << endl;\r
+                    cerr << "Caught exception: " << ex.what() << endl << endl;\r
                     soaper.reset();\r
                 }\r
             }\r