(ws) add gzip and gunzip ws sub commands
This commit is contained in:
		@@ -6,6 +6,7 @@
 | 
			
		||||
 | 
			
		||||
#include "IXHttpServer.h"
 | 
			
		||||
 | 
			
		||||
#include "IXGzipCodec.h"
 | 
			
		||||
#include "IXNetSystem.h"
 | 
			
		||||
#include "IXSocketConnect.h"
 | 
			
		||||
#include "IXUserAgent.h"
 | 
			
		||||
@@ -14,10 +15,6 @@
 | 
			
		||||
#include <sstream>
 | 
			
		||||
#include <vector>
 | 
			
		||||
 | 
			
		||||
#ifdef IXWEBSOCKET_USE_ZLIB
 | 
			
		||||
#include <zlib.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
namespace
 | 
			
		||||
{
 | 
			
		||||
    std::pair<bool, std::vector<uint8_t>> load(const std::string& path)
 | 
			
		||||
@@ -43,51 +40,6 @@ namespace
 | 
			
		||||
        auto vec = res.second;
 | 
			
		||||
        return std::make_pair(res.first, std::string(vec.begin(), vec.end()));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
#ifdef IXWEBSOCKET_USE_ZLIB
 | 
			
		||||
    std::string gzipCompress(const std::string& str)
 | 
			
		||||
    {
 | 
			
		||||
        z_stream zs; // z_stream is zlib's control structure
 | 
			
		||||
        memset(&zs, 0, sizeof(zs));
 | 
			
		||||
 | 
			
		||||
        // deflateInit2 configure the file format: request gzip instead of deflate
 | 
			
		||||
        const int windowBits = 15;
 | 
			
		||||
        const int GZIP_ENCODING = 16;
 | 
			
		||||
 | 
			
		||||
        deflateInit2(&zs,
 | 
			
		||||
                     Z_DEFAULT_COMPRESSION,
 | 
			
		||||
                     Z_DEFLATED,
 | 
			
		||||
                     windowBits | GZIP_ENCODING,
 | 
			
		||||
                     8,
 | 
			
		||||
                     Z_DEFAULT_STRATEGY);
 | 
			
		||||
 | 
			
		||||
        zs.next_in = (Bytef*) str.data();
 | 
			
		||||
        zs.avail_in = (uInt) str.size(); // set the z_stream's input
 | 
			
		||||
 | 
			
		||||
        int ret;
 | 
			
		||||
        char outbuffer[32768];
 | 
			
		||||
        std::string outstring;
 | 
			
		||||
 | 
			
		||||
        // retrieve the compressed bytes blockwise
 | 
			
		||||
        do
 | 
			
		||||
        {
 | 
			
		||||
            zs.next_out = reinterpret_cast<Bytef*>(outbuffer);
 | 
			
		||||
            zs.avail_out = sizeof(outbuffer);
 | 
			
		||||
 | 
			
		||||
            ret = deflate(&zs, Z_FINISH);
 | 
			
		||||
 | 
			
		||||
            if (outstring.size() < zs.total_out)
 | 
			
		||||
            {
 | 
			
		||||
                // append the block to the output string
 | 
			
		||||
                outstring.append(outbuffer, zs.total_out - outstring.size());
 | 
			
		||||
            }
 | 
			
		||||
        } while (ret == Z_OK);
 | 
			
		||||
 | 
			
		||||
        deflateEnd(&zs);
 | 
			
		||||
 | 
			
		||||
        return outstring;
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
} // namespace
 | 
			
		||||
 | 
			
		||||
namespace ix
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user