X-Git-Url: http://www.project-moonshot.org/gitweb/?p=shibboleth%2Fcpp-opensaml.git;a=blobdiff_plain;f=saml%2Fsaml2%2Fbinding%2Fimpl%2FSAML2Redirect.cpp;h=5da0c6ce08574f9362427444e1864af5ed69ace7;hp=d221bf315c4060cc1be8a962e26e9db452a75ae8;hb=ceba6432d156e82a9016190c06ae4640c651a257;hpb=75f0b5ff4b11c24ac0eef5cf35b7d3ca8d9c98fe diff --git a/saml/saml2/binding/impl/SAML2Redirect.cpp b/saml/saml2/binding/impl/SAML2Redirect.cpp index d221bf3..5da0c6c 100644 --- a/saml/saml2/binding/impl/SAML2Redirect.cpp +++ b/saml/saml2/binding/impl/SAML2Redirect.cpp @@ -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; }