From 124f869faae3a0f75a3825e6a8e195c17f3c626a Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Thu, 16 Oct 2014 23:34:20 +0400 Subject: initial for idea --- .../java/com/github/junrar/rarfile/MainHeader.java | 141 +++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 org.fox.ttcomics/src/main/java/com/github/junrar/rarfile/MainHeader.java (limited to 'org.fox.ttcomics/src/main/java/com/github/junrar/rarfile/MainHeader.java') diff --git a/org.fox.ttcomics/src/main/java/com/github/junrar/rarfile/MainHeader.java b/org.fox.ttcomics/src/main/java/com/github/junrar/rarfile/MainHeader.java new file mode 100644 index 0000000..8c3e89f --- /dev/null +++ b/org.fox.ttcomics/src/main/java/com/github/junrar/rarfile/MainHeader.java @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2007 innoSysTec (R) GmbH, Germany. All rights reserved. + * Original author: Edmund Wagner + * Creation date: 22.05.2007 + * + * Source: $HeadURL$ + * Last changed: $LastChangedDate$ + * + * + * the unrar licence applies to all junrar source and binary distributions + * you are not allowed to use this source to re-create the RAR compression algorithm + * + * Here some html entities which can be used for escaping javadoc tags: + * "&": "&" or "&" + * "<": "<" or "<" + * ">": ">" or ">" + * "@": "@" + */ +package com.github.junrar.rarfile; + +import com.github.junrar.io.Raw; + + +/** + * The main header of an rar archive. holds information concerning the whole archive (solid, encrypted etc). + * + * @author $LastChangedBy$ + * @version $LastChangedRevision$ + */ +public class MainHeader extends BaseBlock { + //private Log //logger = LogFactory.getLog(MainHeader.class.getName()); + public static final short mainHeaderSizeWithEnc = 7; + public static final short mainHeaderSize = 6; + private short highPosAv; + private int posAv; + private byte encryptVersion; + + public MainHeader(BaseBlock bb, byte[] mainHeader) { + super(bb); + int pos = 0; + highPosAv = Raw.readShortLittleEndian(mainHeader, pos); + pos += 2; + posAv = Raw.readIntLittleEndian(mainHeader, pos); + pos+=4; + + if(hasEncryptVersion()){ + encryptVersion |= mainHeader[pos]&0xff; + } + } + + /** + * old cmt block is present + * @return true if has cmt block + */ + public boolean hasArchCmt(){ + return (this.flags & BaseBlock.MHD_COMMENT)!=0; + } + /** + * the version the the encryption + * @return + */ + public byte getEncryptVersion() { + return encryptVersion; + } + + public short getHighPosAv() { + return highPosAv; + } + + public int getPosAv() { + return posAv; + } + + /** + * returns whether the archive is encrypted + * @return + */ + public boolean isEncrypted(){ + return (this.flags & BaseBlock.MHD_PASSWORD)!=0; + } + + /** + * return whether the archive is a multivolume archive + * @return + */ + public boolean isMultiVolume(){ + return (this.flags & BaseBlock.MHD_VOLUME)!=0; + } + + /** + * if the archive is a multivolume archive this method returns whether this instance is the first part of the multivolume archive + * @return + */ + public boolean isFirstVolume(){ + return (this.flags & BaseBlock.MHD_FIRSTVOLUME)!=0; + } + + public void print(){ + super.print(); + StringBuilder str=new StringBuilder(); + str.append("posav: "+getPosAv()); + str.append("\nhighposav: "+getHighPosAv()); + str.append("\nhasencversion: "+hasEncryptVersion()+(hasEncryptVersion()?getEncryptVersion():"")); + str.append("\nhasarchcmt: "+hasArchCmt()); + str.append("\nisEncrypted: "+isEncrypted()); + str.append("\nisMultivolume: "+isMultiVolume()); + str.append("\nisFirstvolume: "+isFirstVolume()); + str.append("\nisSolid: "+isSolid()); + str.append("\nisLocked: "+isLocked()); + str.append("\nisProtected: "+isProtected()); + str.append("\nisAV: "+isAV()); + //logger.info(str.toString()); + } + + /** + * returns whether this archive is solid. in this case you can only extract all file at once + * @return + */ + public boolean isSolid(){ + return (this.flags&MHD_SOLID)!=0; + } + + public boolean isLocked(){ + return (this.flags&MHD_LOCK)!=0; + } + + public boolean isProtected(){ + return (this.flags&MHD_PROTECT)!=0; + } + + public boolean isAV(){ + return (this.flags&MHD_AV)!=0; + } + /** + * the numbering format a multivolume archive + * @return + */ + public boolean isNewNumbering(){ + return (this.flags&MHD_NEWNUMBERING)!=0; + } +} -- cgit v1.2.3