summaryrefslogtreecommitdiffstats
path: root/lib/libUPnP/Neptune/Source/Core/NptZip.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libUPnP/Neptune/Source/Core/NptZip.h')
-rw-r--r--lib/libUPnP/Neptune/Source/Core/NptZip.h220
1 files changed, 220 insertions, 0 deletions
diff --git a/lib/libUPnP/Neptune/Source/Core/NptZip.h b/lib/libUPnP/Neptune/Source/Core/NptZip.h
new file mode 100644
index 0000000..fbbebcb
--- /dev/null
+++ b/lib/libUPnP/Neptune/Source/Core/NptZip.h
@@ -0,0 +1,220 @@
+/*****************************************************************
+|
+| Neptune - Zip Support
+|
+| Copyright (c) 2002-2008, Axiomatic Systems, LLC.
+| All rights reserved.
+|
+| Redistribution and use in source and binary forms, with or without
+| modification, are permitted provided that the following conditions are met:
+| * Redistributions of source code must retain the above copyright
+| notice, this list of conditions and the following disclaimer.
+| * Redistributions in binary form must reproduce the above copyright
+| notice, this list of conditions and the following disclaimer in the
+| documentation and/or other materials provided with the distribution.
+| * Neither the name of Axiomatic Systems nor the
+| names of its contributors may be used to endorse or promote products
+| derived from this software without specific prior written permission.
+|
+| THIS SOFTWARE IS PROVIDED BY AXIOMATIC SYSTEMS ''AS IS'' AND ANY
+| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+| DISCLAIMED. IN NO EVENT SHALL AXIOMATIC SYSTEMS BE LIABLE FOR ANY
+| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|
+ ****************************************************************/
+
+#ifndef _NPT_ZIP_H_
+#define _NPT_ZIP_H_
+
+/*----------------------------------------------------------------------
+| includes
++---------------------------------------------------------------------*/
+#include "NptConfig.h"
+#include "NptStreams.h"
+#include "NptArray.h"
+#include "NptFile.h"
+
+/*----------------------------------------------------------------------
+| class references
++---------------------------------------------------------------------*/
+class NPT_ZipInflateState;
+class NPT_ZipDeflateState;
+
+/*----------------------------------------------------------------------
+| NPT_ZipFile
++---------------------------------------------------------------------*/
+const unsigned int NPT_ZIP_FILE_FLAG_ENCRYPTED = 0x01;
+const unsigned int NPT_ZIP_FILE_COMPRESSION_METHOD_NONE = 0x00;
+const unsigned int NPT_ZIP_FILE_COMPRESSION_METHOD_DEFLATE = 0x08;
+
+class NPT_ZipFile
+{
+public:
+ // types
+ class Entry {
+ public:
+ Entry(const unsigned char* data, NPT_Size data_available);
+ NPT_String m_Name;
+ NPT_UInt16 m_Flags;
+ NPT_UInt16 m_CompressionMethod;
+ NPT_UInt32 m_Crc32;
+ NPT_LargeSize m_CompressedSize;
+ NPT_LargeSize m_UncompressedSize;
+ NPT_UInt16 m_DiskNumber;
+ NPT_UInt16 m_InternalFileAttributes;
+ NPT_UInt32 m_ExternalFileAttributes;
+ NPT_Position m_RelativeOffset;
+ NPT_UInt32 m_DirectoryEntrySize;
+ };
+
+ // class methods
+ static NPT_Result Parse(NPT_InputStream& stream, NPT_ZipFile*& file);
+ static NPT_Result GetInputStream(Entry& entry, NPT_InputStreamReference& zip_stream, NPT_InputStream*& file_stream);
+
+ // accessors
+ NPT_Array<Entry>& GetEntries() { return m_Entries; }
+
+private:
+ // constructor
+ NPT_ZipFile();
+
+ // members
+ NPT_Array<Entry> m_Entries;
+};
+
+/*----------------------------------------------------------------------
+| NPT_Zip
++---------------------------------------------------------------------*/
+const int NPT_ZIP_COMPRESSION_LEVEL_DEFAULT = -1;
+const int NPT_ZIP_COMPRESSION_LEVEL_MIN = 0;
+const int NPT_ZIP_COMPRESSION_LEVEL_MAX = 9;
+const int NPT_ZIP_COMPRESSION_LEVEL_NONE = 0;
+class NPT_Zip
+{
+public:
+ // class methods
+ static NPT_Result MapError(int err);
+
+ /**
+ * Compressed data format
+ */
+ typedef enum {
+ ZLIB,
+ GZIP
+ } Format;
+
+ /**
+ * Deflate (i.e compress) a buffer
+ */
+ static NPT_Result Deflate(const NPT_DataBuffer& in,
+ NPT_DataBuffer& out,
+ int compression_level = NPT_ZIP_COMPRESSION_LEVEL_DEFAULT,
+ Format format = ZLIB);
+
+ /**
+ * Inflate (i.e decompress) a buffer
+ */
+ static NPT_Result Inflate(const NPT_DataBuffer& in,
+ NPT_DataBuffer& out,
+ bool raw = false);
+
+ /**
+ * Deflate (i.e compress) a file
+ */
+ static NPT_Result Deflate(NPT_File& in,
+ NPT_File& out,
+ int compression_level = NPT_ZIP_COMPRESSION_LEVEL_DEFAULT,
+ Format format = GZIP);
+
+};
+
+/*----------------------------------------------------------------------
+| NPT_ZipInflatingInputStream
++---------------------------------------------------------------------*/
+class NPT_ZipInflatingInputStream : public NPT_InputStream
+{
+public:
+ NPT_ZipInflatingInputStream(NPT_InputStreamReference& source, bool raw = false);
+ ~NPT_ZipInflatingInputStream() override;
+
+ // NPT_InputStream methods
+ NPT_Result Read(void* buffer,
+ NPT_Size bytes_to_read,
+ NPT_Size* bytes_read = NULL) override;
+ NPT_Result Seek(NPT_Position offset) override;
+ NPT_Result Tell(NPT_Position& offset) override;
+ NPT_Result GetSize(NPT_LargeSize& size) override;
+ NPT_Result GetAvailable(NPT_LargeSize& available) override;
+
+private:
+ NPT_InputStreamReference m_Source;
+ NPT_Position m_Position;
+ NPT_ZipInflateState* m_State;
+ NPT_DataBuffer m_Buffer;
+};
+
+/*----------------------------------------------------------------------
+| NPT_ZipInflatingOutputStream
++---------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------
+| NPT_ZipDeflatingInputStream
++---------------------------------------------------------------------*/
+class NPT_ZipDeflatingInputStream : public NPT_InputStream
+{
+public:
+ NPT_ZipDeflatingInputStream(NPT_InputStreamReference& source,
+ int compression_level = NPT_ZIP_COMPRESSION_LEVEL_DEFAULT,
+ NPT_Zip::Format format = NPT_Zip::ZLIB);
+ ~NPT_ZipDeflatingInputStream() override;
+
+ // NPT_InputStream methods
+ NPT_Result Read(void* buffer,
+ NPT_Size bytes_to_read,
+ NPT_Size* bytes_read = NULL) override;
+ NPT_Result Seek(NPT_Position offset) override;
+ NPT_Result Tell(NPT_Position& offset) override;
+ NPT_Result GetSize(NPT_LargeSize& size) override;
+ NPT_Result GetAvailable(NPT_LargeSize& available) override;
+
+private:
+ NPT_InputStreamReference m_Source;
+ NPT_Position m_Position;
+ bool m_Eos;
+ NPT_ZipDeflateState* m_State;
+ NPT_DataBuffer m_Buffer;
+};
+
+/*----------------------------------------------------------------------
+| NPT_ZipDeflatingOutputStream
++---------------------------------------------------------------------*/
+/*class NPT_ZipDeflatingOutputStream : public NPT_OutputStream
+{
+public:
+ NPT_ZipDeflatingOutputStream(NPT_OutputStreamReference& source,
+ int compression_level = NPT_ZIP_COMPRESSION_LEVEL_DEFAULT,
+ NPT_Zip::Format format = NPT_Zip::ZLIB);
+ NPT_ZipDeflatingOutputStream();
+
+ // NPT_OutputStream methods
+ virtual NPT_Result Write(void* buffer,
+ NPT_Size bytes_to_write,
+ NPT_Size* bytes_written = NULL);
+ virtual NPT_Result Seek(NPT_Position offset);
+ virtual NPT_Result Tell(NPT_Position& offset);
+
+private:
+ NPT_OutputStreamReference m_Output;
+ NPT_Position m_Position;
+ bool m_Eos;
+ NPT_ZipDeflateState* m_State;
+ NPT_DataBuffer m_Buffer;
+}; */
+
+#endif // _NPT_ZIP_H_