1package IO::Compress::Gzip::Constants; 2 3use strict ; 4use warnings; 5use bytes; 6 7require Exporter; 8 9our ($VERSION, @ISA, @EXPORT, %GZIP_OS_Names); 10our ($GZIP_FNAME_INVALID_CHAR_RE, $GZIP_FCOMMENT_INVALID_CHAR_RE); 11 12$VERSION = '2.212'; 13 14@ISA = qw(Exporter); 15 16@EXPORT= qw( 17 18 GZIP_ID_SIZE 19 GZIP_ID1 20 GZIP_ID2 21 22 GZIP_FLG_DEFAULT 23 GZIP_FLG_FTEXT 24 GZIP_FLG_FHCRC 25 GZIP_FLG_FEXTRA 26 GZIP_FLG_FNAME 27 GZIP_FLG_FCOMMENT 28 GZIP_FLG_RESERVED 29 30 GZIP_CM_DEFLATED 31 32 GZIP_MIN_HEADER_SIZE 33 GZIP_TRAILER_SIZE 34 35 GZIP_MTIME_DEFAULT 36 GZIP_XFL_DEFAULT 37 GZIP_FEXTRA_HEADER_SIZE 38 GZIP_FEXTRA_MAX_SIZE 39 GZIP_FEXTRA_SUBFIELD_HEADER_SIZE 40 GZIP_FEXTRA_SUBFIELD_ID_SIZE 41 GZIP_FEXTRA_SUBFIELD_LEN_SIZE 42 GZIP_FEXTRA_SUBFIELD_MAX_SIZE 43 44 $GZIP_FNAME_INVALID_CHAR_RE 45 $GZIP_FCOMMENT_INVALID_CHAR_RE 46 47 GZIP_FHCRC_SIZE 48 49 GZIP_ISIZE_MAX 50 GZIP_ISIZE_MOD_VALUE 51 52 53 GZIP_NULL_BYTE 54 55 GZIP_OS_DEFAULT 56 57 %GZIP_OS_Names 58 59 GZIP_MINIMUM_HEADER 60 61 ); 62 63# Constant names derived from RFC 1952 64 65use constant GZIP_ID_SIZE => 2 ; 66use constant GZIP_ID1 => 0x1F; 67use constant GZIP_ID2 => 0x8B; 68 69use constant GZIP_MIN_HEADER_SIZE => 10 ;# minimum gzip header size 70use constant GZIP_TRAILER_SIZE => 8 ; 71 72 73use constant GZIP_FLG_DEFAULT => 0x00 ; 74use constant GZIP_FLG_FTEXT => 0x01 ; 75use constant GZIP_FLG_FHCRC => 0x02 ; # called CONTINUATION in gzip 76use constant GZIP_FLG_FEXTRA => 0x04 ; 77use constant GZIP_FLG_FNAME => 0x08 ; 78use constant GZIP_FLG_FCOMMENT => 0x10 ; 79#use constant GZIP_FLG_ENCRYPTED => 0x20 ; # documented in gzip sources 80use constant GZIP_FLG_RESERVED => (0x20 | 0x40 | 0x80) ; 81 82use constant GZIP_XFL_DEFAULT => 0x00 ; 83 84use constant GZIP_MTIME_DEFAULT => 0x00 ; 85 86use constant GZIP_FEXTRA_HEADER_SIZE => 2 ; 87use constant GZIP_FEXTRA_MAX_SIZE => 0xFFFF ; 88use constant GZIP_FEXTRA_SUBFIELD_ID_SIZE => 2 ; 89use constant GZIP_FEXTRA_SUBFIELD_LEN_SIZE => 2 ; 90use constant GZIP_FEXTRA_SUBFIELD_HEADER_SIZE => GZIP_FEXTRA_SUBFIELD_ID_SIZE + 91 GZIP_FEXTRA_SUBFIELD_LEN_SIZE; 92use constant GZIP_FEXTRA_SUBFIELD_MAX_SIZE => GZIP_FEXTRA_MAX_SIZE - 93 GZIP_FEXTRA_SUBFIELD_HEADER_SIZE ; 94 95 96if (ord('A') == 193) 97{ 98 # EBCDIC 99 $GZIP_FNAME_INVALID_CHAR_RE = '[\x00-\x3f\xff]'; 100 $GZIP_FCOMMENT_INVALID_CHAR_RE = '[\x00-\x0a\x11-\x14\x16-\x3f\xff]'; 101 102} 103else 104{ 105 $GZIP_FNAME_INVALID_CHAR_RE = '[\x00-\x1F\x7F-\x9F]'; 106 $GZIP_FCOMMENT_INVALID_CHAR_RE = '[\x00-\x09\x11-\x1F\x7F-\x9F]'; 107} 108 109use constant GZIP_FHCRC_SIZE => 2 ; # aka CONTINUATION in gzip 110 111use constant GZIP_CM_DEFLATED => 8 ; 112 113use constant GZIP_NULL_BYTE => "\x00"; 114use constant GZIP_ISIZE_MAX => 0xFFFFFFFF ; 115use constant GZIP_ISIZE_MOD_VALUE => GZIP_ISIZE_MAX + 1 ; 116 117# OS Names sourced from http://www.gzip.org/format.txt 118 119use constant GZIP_OS_DEFAULT=> 0xFF ; 120%GZIP_OS_Names = ( 121 0 => 'MS-DOS', 122 1 => 'Amiga', 123 2 => 'VMS', 124 3 => 'Unix', 125 4 => 'VM/CMS', 126 5 => 'Atari TOS', 127 6 => 'HPFS (OS/2, NT)', 128 7 => 'Macintosh', 129 8 => 'Z-System', 130 9 => 'CP/M', 131 10 => 'TOPS-20', 132 11 => 'NTFS (NT)', 133 12 => 'SMS QDOS', 134 13 => 'Acorn RISCOS', 135 14 => 'VFAT file system (Win95, NT)', 136 15 => 'MVS', 137 16 => 'BeOS', 138 17 => 'Tandem/NSK', 139 18 => 'THEOS', 140 GZIP_OS_DEFAULT() => 'Unknown', 141 ) ; 142 143use constant GZIP_MINIMUM_HEADER => pack("C4 V C C", 144 GZIP_ID1, GZIP_ID2, GZIP_CM_DEFLATED, GZIP_FLG_DEFAULT, 145 GZIP_MTIME_DEFAULT, GZIP_XFL_DEFAULT, GZIP_OS_DEFAULT) ; 146 147 1481; 149