Convert logging to log4shib via compile time switch.
[shibboleth/opensaml2.git] / saml / saml2 / binding / impl / SAML2Redirect.cpp
index b90a89b..bca5866 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *  Copyright 2001-2006 Internet2
+ *  Copyright 2001-2007 Internet2
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 
 #include "internal.h"
 #include "saml2/binding/SAML2Redirect.h"
-#include "zlib/zlib.h"
 
-#include <log4cpp/Category.hh>
+#include <zlib.h>
+#include <xmltooling/logging.h>
 #include <xmltooling/util/NDC.h>
 
-using namespace log4cpp;
+using namespace xmltooling::logging;
 using namespace std;
 
 namespace {
@@ -44,6 +44,46 @@ namespace {
     };
 };
 
+char* opensaml::saml2p::deflate(char* in, unsigned int in_len, unsigned int* out_len)
+{
+#ifdef _DEBUG
+    xmltooling::NDC ndc("deflate");
+#endif
+    Category& log = Category::getInstance(SAML_LOGCAT".MessageDecoder.SAML2Redirect.zlib");
+
+    z_stream z;
+    memset(&z, 0, sizeof(z_stream));
+    
+    z.zalloc = saml_zalloc;
+    z.zfree = saml_zfree;
+    z.opaque = NULL;
+    z.next_in = (Bytef*)in;
+    z.avail_in = in_len;
+    *out_len = 0;
+
+    int ret = deflateInit2(&z, 9, Z_DEFLATED, -15, 9, Z_DEFAULT_STRATEGY);
+    if (ret != Z_OK) {
+        log.error("zlib deflateInit2 failed with error code (%d)", ret);
+        return NULL;
+    }
+  
+    int dlen = in_len + (in_len >> 8) + 12;  /* orig_size * 1.001 + 12 */
+    char* out = new char[dlen];
+    z.next_out = (Bytef*)out;
+    z.avail_out = dlen;
+  
+    ret = deflate(&z, Z_FINISH);
+    if (ret != Z_STREAM_END) {
+    deflateEnd(&z);
+        log.error("zlib deflateInit2 failed with error code (%d)", ret);
+        delete[] out;
+    }
+  
+    *out_len = z.total_out;
+    deflateEnd(&z);
+    return out;
+}
+
 unsigned int opensaml::saml2p::inflate(char* in, unsigned int in_len, ostream& out)
 {
 #ifdef _DEBUG
@@ -68,7 +108,7 @@ unsigned int opensaml::saml2p::inflate(char* in, unsigned int in_len, ostream& o
   
     int ret = inflateInit2(&z, -15);
     if (ret != Z_OK) {
-        log.error("zlib inflateInit failed with error code (%d)", ret);
+        log.error("zlib inflateInit2 failed with error code (%d)", ret);
         delete[] buf;
         return 0;
     }
@@ -78,6 +118,10 @@ unsigned int opensaml::saml2p::inflate(char* in, unsigned int in_len, ostream& o
         ret = inflate(&z, Z_SYNC_FLUSH);
         switch (ret) {
             case Z_STREAM_END:
+                ret = z.next_out - buf;
+                z.next_out = buf;
+                while (ret--)
+                    out << *(z.next_out++);
                 goto done;
                 
             case Z_OK:  /* avail_out should be 0 now. Time to dump the buffer. */