// // GTMNSData+zlib.h // // Copyright 2007-2008 Google Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy // of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the // License for the specific language governing permissions and limitations under // the License. // #import #import "GTMDefines.h" /// Helpers for dealing w/ zlib inflate/deflate calls. @interface NSData (GTMZLibAdditions) // NOTE: For 64bit, none of these apis handle input sizes >32bits, they will // return nil when given such data. To handle data of that size you really // should be streaming it rather then doing it all in memory. #pragma mark Gzip Compression /// Return an autoreleased NSData w/ the result of gzipping the bytes. // // Uses the default compression level. + (NSData *)gtm_dataByGzippingBytes:(const void *)bytes length:(NSUInteger)length __attribute__((deprecated("Use error variant"))); + (NSData *)gtm_dataByGzippingBytes:(const void *)bytes length:(NSUInteger)length error:(NSError **)error; /// Return an autoreleased NSData w/ the result of gzipping the payload of |data|. // // Uses the default compression level. + (NSData *)gtm_dataByGzippingData:(NSData *)data __attribute__((deprecated("Use error variant"))); + (NSData *)gtm_dataByGzippingData:(NSData *)data error:(NSError **)error; /// Return an autoreleased NSData w/ the result of gzipping the bytes using |level| compression level. // // |level| can be 1-9, any other values will be clipped to that range. + (NSData *)gtm_dataByGzippingBytes:(const void *)bytes length:(NSUInteger)length compressionLevel:(int)level __attribute__((deprecated("Use error variant"))); + (NSData *)gtm_dataByGzippingBytes:(const void *)bytes length:(NSUInteger)length compressionLevel:(int)level error:(NSError **)error; /// Return an autoreleased NSData w/ the result of gzipping the payload of |data| using |level| compression level. + (NSData *)gtm_dataByGzippingData:(NSData *)data compressionLevel:(int)level __attribute__((deprecated("Use error variant"))); + (NSData *)gtm_dataByGzippingData:(NSData *)data compressionLevel:(int)level error:(NSError **)error; #pragma mark Zlib "Stream" Compression // NOTE: deflate is *NOT* gzip. deflate is a "zlib" stream. pick which one // you really want to create. (the inflate api will handle either) /// Return an autoreleased NSData w/ the result of deflating the bytes. // // Uses the default compression level. + (NSData *)gtm_dataByDeflatingBytes:(const void *)bytes length:(NSUInteger)length __attribute__((deprecated("Use error variant"))); + (NSData *)gtm_dataByDeflatingBytes:(const void *)bytes length:(NSUInteger)length error:(NSError **)error; /// Return an autoreleased NSData w/ the result of deflating the payload of |data|. // // Uses the default compression level. + (NSData *)gtm_dataByDeflatingData:(NSData *)data __attribute__((deprecated("Use error variant"))); + (NSData *)gtm_dataByDeflatingData:(NSData *)data error:(NSError **)error; /// Return an autoreleased NSData w/ the result of deflating the bytes using |level| compression level. // // |level| can be 1-9, any other values will be clipped to that range. + (NSData *)gtm_dataByDeflatingBytes:(const void *)bytes length:(NSUInteger)length compressionLevel:(int)level __attribute__((deprecated("Use error variant"))); + (NSData *)gtm_dataByDeflatingBytes:(const void *)bytes length:(NSUInteger)length compressionLevel:(int)level error:(NSError **)error; /// Return an autoreleased NSData w/ the result of deflating the payload of |data| using |level| compression level. + (NSData *)gtm_dataByDeflatingData:(NSData *)data compressionLevel:(int)level __attribute__((deprecated("Use error variant"))); + (NSData *)gtm_dataByDeflatingData:(NSData *)data compressionLevel:(int)level error:(NSError **)error; #pragma mark Uncompress of Gzip or Zlib /// Return an autoreleased NSData w/ the result of decompressing the bytes. // // The bytes to decompress can be zlib or gzip payloads. + (NSData *)gtm_dataByInflatingBytes:(const void *)bytes length:(NSUInteger)length __attribute__((deprecated("Use error variant"))); + (NSData *)gtm_dataByInflatingBytes:(const void *)bytes length:(NSUInteger)length error:(NSError **)error; /// Return an autoreleased NSData w/ the result of decompressing the payload of |data|. // // The data to decompress can be zlib or gzip payloads. + (NSData *)gtm_dataByInflatingData:(NSData *)data __attribute__((deprecated("Use error variant"))); + (NSData *)gtm_dataByInflatingData:(NSData *)data error:(NSError **)error; #pragma mark "Raw" Compression Support // NOTE: raw deflate is *NOT* gzip or deflate. it does not include a header // of any form and should only be used within streams here an external crc/etc. // is done to validate the data. The RawInflate apis can be used on data // processed like this. /// Return an autoreleased NSData w/ the result of *raw* deflating the bytes. // // Uses the default compression level. // *No* header is added to the resulting data. + (NSData *)gtm_dataByRawDeflatingBytes:(const void *)bytes length:(NSUInteger)length __attribute__((deprecated("Use error variant"))); + (NSData *)gtm_dataByRawDeflatingBytes:(const void *)bytes length:(NSUInteger)length error:(NSError **)error; /// Return an autoreleased NSData w/ the result of *raw* deflating the payload of |data|. // // Uses the default compression level. // *No* header is added to the resulting data. + (NSData *)gtm_dataByRawDeflatingData:(NSData *)data __attribute__((deprecated("Use error variant"))); + (NSData *)gtm_dataByRawDeflatingData:(NSData *)data error:(NSError **)error; /// Return an autoreleased NSData w/ the result of *raw* deflating the bytes using |level| compression level. // // |level| can be 1-9, any other values will be clipped to that range. // *No* header is added to the resulting data. + (NSData *)gtm_dataByRawDeflatingBytes:(const void *)bytes length:(NSUInteger)length compressionLevel:(int)level __attribute__((deprecated("Use error variant"))); + (NSData *)gtm_dataByRawDeflatingBytes:(const void *)bytes length:(NSUInteger)length compressionLevel:(int)level error:(NSError **)error; /// Return an autoreleased NSData w/ the result of *raw* deflating the payload of |data| using |level| compression level. // *No* header is added to the resulting data. + (NSData *)gtm_dataByRawDeflatingData:(NSData *)data compressionLevel:(int)level __attribute__((deprecated("Use error variant"))); + (NSData *)gtm_dataByRawDeflatingData:(NSData *)data compressionLevel:(int)level error:(NSError **)error; /// Return an autoreleased NSData w/ the result of *raw* decompressing the bytes. // // The data to decompress, it should *not* have any header (zlib nor gzip). + (NSData *)gtm_dataByRawInflatingBytes:(const void *)bytes length:(NSUInteger)length __attribute__((deprecated("Use error variant"))); + (NSData *)gtm_dataByRawInflatingBytes:(const void *)bytes length:(NSUInteger)length error:(NSError **)error; /// Return an autoreleased NSData w/ the result of *raw* decompressing the payload of |data|. // // The data to decompress, it should *not* have any header (zlib nor gzip). + (NSData *)gtm_dataByRawInflatingData:(NSData *)data __attribute__((deprecated("Use error variant"))); + (NSData *)gtm_dataByRawInflatingData:(NSData *)data error:(NSError **)error; @end FOUNDATION_EXPORT NSString *const GTMNSDataZlibErrorDomain; FOUNDATION_EXPORT NSString *const GTMNSDataZlibErrorKey; // NSNumber FOUNDATION_EXPORT NSString *const GTMNSDataZlibRemainingBytesKey; // NSNumber typedef NS_ENUM(NSInteger, GTMNSDataZlibError) { GTMNSDataZlibErrorGreaterThan32BitsToCompress = 1024, // An internal zlib error. // GTMNSDataZlibErrorKey will contain the error value. // NSLocalizedDescriptionKey may contain an error string from zlib. // Look in zlib.h for list of errors. GTMNSDataZlibErrorInternal, // There was left over data in the buffer that was not used. // GTMNSDataZlibRemainingBytesKey will contain number of remaining bytes. GTMNSDataZlibErrorDataRemaining };