Convert from NULL macro to nullptr, remove unused zlib code.
[shibboleth/cpp-opensaml.git] / saml / saml2 / binding / impl / SAML2RedirectEncoder.cpp
index ac711f1..b40cb8b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *  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.
@@ -17,7 +17,7 @@
 /**
  * SAML2RedirectEncoder.cpp
  * 
- * SAML 2.0 HTTP-POST binding message encoder
+ * SAML 2.0 HTTP-POST binding message encoder.
  */
 
 #include "internal.h"
 #include <fstream>
 #include <sstream>
 #include <xercesc/util/Base64.hpp>
+#include <xsec/dsig/DSIGConstants.hpp>
 #include <xmltooling/logging.h>
+#include <xmltooling/XMLToolingConfig.h>
 #include <xmltooling/io/HTTPResponse.h>
+#include <xmltooling/security/Credential.h>
+#include <xmltooling/signature/Signature.h>
 #include <xmltooling/util/NDC.h>
 #include <xmltooling/util/URLEncoder.h>
 
@@ -58,12 +62,12 @@ namespace opensaml {
                 GenericResponse& genericResponse,
                 XMLObject* xmlObject,
                 const char* destination,
-                const EntityDescriptor* recipient=NULL,
-                const char* relayState=NULL,
-                const ArtifactGenerator* artifactGenerator=NULL,
-                const Credential* credential=NULL,
-                const XMLCh* signatureAlg=NULL,
-                const XMLCh* digestAlg=NULL
+                const EntityDescriptor* recipient=nullptr,
+                const char* relayState=nullptr,
+                const ArtifactGenerator* artifactGenerator=nullptr,
+                const Credential* credential=nullptr,
+                const XMLCh* signatureAlg=nullptr,
+                const XMLCh* digestAlg=nullptr
                 ) const;
         };
 
@@ -98,7 +102,7 @@ long SAML2RedirectEncoder::encode(
     if (xmlObject->getParent())
         throw BindingException("Cannot encode XML content with parent.");
     
-    StatusResponseType* response = NULL;
+    StatusResponseType* response = nullptr;
     RequestAbstractType* request = dynamic_cast<RequestAbstractType*>(xmlObject);
     if (!request) {
         response = dynamic_cast<StatusResponseType*>(xmlObject);
@@ -109,21 +113,22 @@ long SAML2RedirectEncoder::encode(
     // Check for XML signature.
     if (request ? request->getSignature() : response->getSignature()) {
         log.debug("message already signed, removing native signature due to size considerations");
-        request ? request->setSignature(NULL) : response->setSignature(NULL);
+        request ? request->setSignature(nullptr) : response->setSignature(nullptr);
     }
     
     log.debug("marshalling, deflating, base64-encoding the message");
     DOMElement* rootElement = xmlObject->marshall();
     string xmlbuf;
     XMLHelper::serialize(rootElement, xmlbuf);
-    log.debug("marshalled message: %s", xmlbuf.c_str());
+    log.debug("marshalled message:\n%s", xmlbuf.c_str());
     
     unsigned int len;
     char* deflated = deflate(const_cast<char*>(xmlbuf.c_str()), xmlbuf.length(), &len);
     if (!deflated)
         throw BindingException("Failed to deflate message.");
     
-    XMLByte* encoded=Base64::encode(reinterpret_cast<XMLByte*>(deflated),len,&len);
+    xsecsize_t xlen;
+    XMLByte* encoded=Base64::encode(reinterpret_cast<XMLByte*>(deflated), len, &xlen);
     delete[] deflated;
     if (!encoded)
         throw BindingException("Base64 encoding of XML failed.");
@@ -131,7 +136,13 @@ long SAML2RedirectEncoder::encode(
     // Create beginnings of redirect query string.
     const URLEncoder* escaper = XMLToolingConfig::getConfig().getURLEncoder();
     xmlbuf.erase();
-    xmlbuf.append(reinterpret_cast<char*>(encoded),len);
+    xmlbuf.append(reinterpret_cast<char*>(encoded), xlen);
+#ifdef OPENSAML_XERCESC_HAS_XMLBYTE_RELEASE
+    XMLString::release(&encoded);
+#else
+    XMLString::release((char**)&encoded);
+#endif
+    
     xmlbuf = (request ? "SAMLRequest=" : "SAMLResponse=") + escaper->encode(xmlbuf.c_str()); 
     if (relayState && *relayState)
         xmlbuf = xmlbuf + "&RelayState=" + escaper->encode(relayState);