package org.krakenapps.pcap.decoder.smb.trans2struct.findinfolevelstruct; import org.krakenapps.pcap.decoder.netbios.NetBiosNameCodec; import org.krakenapps.pcap.decoder.smb.SmbSession; import org.krakenapps.pcap.decoder.smb.TransStruct; import org.krakenapps.pcap.decoder.smb.rr.ExtFileAttributes; import org.krakenapps.pcap.decoder.smb.structure.SmbFeaList; import org.krakenapps.pcap.util.Buffer; import org.krakenapps.pcap.util.ByteOrderConverter; public class SmbFindFileIDBothDirectoryInfo implements TransStruct { // added extension int nextEntryOffset; int fileIndex; long creationTime; long lastAccessTime; long lastWriteTime; long lastChangeTime; long endOfFile; long allocationSize; long endofFile; long allocateSize; ExtFileAttributes extFileAttributes; int fileNameLength; int eaSize; byte shortNameLength; byte reserved; String shortName; short reserved2; long fileID; String fileName; SmbFeaList feaList; public int getNextEntryOffset() { return nextEntryOffset; } public void setNextEntryOffset(int nextEntryOffset) { this.nextEntryOffset = nextEntryOffset; } public int getFileIndex() { return fileIndex; } public void setFileIndex(int fileIndex) { this.fileIndex = fileIndex; } public long getEndofFile() { return endofFile; } public void setEndofFile(long endofFile) { this.endofFile = endofFile; } public long getAllocateSize() { return allocateSize; } public void setAllocateSize(long allocateSize) { this.allocateSize = allocateSize; } public long getCreationTime() { return creationTime; } public void setCreationTime(long creationTime) { this.creationTime = creationTime; } public long getLastAccessTime() { return lastAccessTime; } public void setLastAccessTime(long lastAccessTime) { this.lastAccessTime = lastAccessTime; } public long getLastWriteTime() { return lastWriteTime; } public void setLastWriteTime(long lastWriteTime) { this.lastWriteTime = lastWriteTime; } public long getLastChangeTime() { return lastChangeTime; } public void setLastChangeTime(long lastChangeTime) { this.lastChangeTime = lastChangeTime; } public long getEndOfFile() { return endOfFile; } public void setEndOfFile(long endOfFile) { this.endOfFile = endOfFile; } public long getAllocationSize() { return allocationSize; } public void setAllocationSize(long allocationSize) { this.allocationSize = allocationSize; } public int getFileNameLength() { return fileNameLength; } public void setFileNameLength(int fileNameLength) { this.fileNameLength = fileNameLength; } public ExtFileAttributes getExtFileAttributes() { return extFileAttributes; } public void setExtFileAttributes(ExtFileAttributes extFileAttributes) { this.extFileAttributes = extFileAttributes; } public int getFilenameLength() { return fileNameLength; } public void setFilenameLength(int filenameLength) { this.fileNameLength = filenameLength; } public int getEaSize() { return eaSize; } public void setEaSize(int eaSize) { this.eaSize = eaSize; } public byte getShortNameLength() { return shortNameLength; } public void setShortNameLength(byte shortNameLength) { this.shortNameLength = shortNameLength; } public byte getReserved() { return reserved; } public void setReserved(byte reserved) { this.reserved = reserved; } public String getShortName() { return shortName; } public void setShortName(String shortName) { this.shortName = shortName; } public short getReserved2() { return reserved2; } public void setReserved2(short reserved2) { this.reserved2 = reserved2; } public long getFileID() { return fileID; } public void setFileID(long fileID) { this.fileID = fileID; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } public SmbFeaList getFeaList() { return feaList; } public void setFeaList(SmbFeaList feaList) { this.feaList = feaList; } public TransStruct parse(Buffer b, SmbSession session) { nextEntryOffset = ByteOrderConverter.swap(b.getInt()); fileIndex = ByteOrderConverter.swap(b.getInt()); creationTime = ByteOrderConverter.swap(b.getLong()); lastAccessTime = ByteOrderConverter.swap(b.getLong()); lastWriteTime = ByteOrderConverter.swap(b.getLong()); lastChangeTime = ByteOrderConverter.swap(b.getLong()); endofFile = ByteOrderConverter.swap(b.getLong()); allocateSize = ByteOrderConverter.swap(b.getLong()); extFileAttributes = ExtFileAttributes.parse(ByteOrderConverter.swap(b .getInt())); fileNameLength = ByteOrderConverter.swap(b.getInt()); eaSize = ByteOrderConverter.swap(b.getInt()); shortNameLength = b.get(); reserved = b.get(); shortName = NetBiosNameCodec.readOemName(b, 12); reserved2 = ByteOrderConverter.swap(b.getShort()); fileID = ByteOrderConverter.swap(b.getLong()); fileName = NetBiosNameCodec.readSmbUnicodeName(b, fileNameLength); feaList = new SmbFeaList(); feaList.parse(b); b.rewind(); b.skip(nextEntryOffset); return this; } @Override public String toString(){ return String.format("Third Level Structure : Smb Find File ID Both directory Info\n" + "nextEntryOffset = 0x%s , fileIndex = 0x%s , creationTime = 0x%s\n" + "lastAccessTime = 0x%s, lastWriteTime = 0x%s, lastChageTime = 0x%s\n" + "endOfFile = 0x%s , allocationSize = 0x%s , extfileattributes = %s\n" + "fileNameLength = %s , eaSize = 0x%s , shortNameLength = 0x%s\n" + "reserved1 = 0x%s , shortName = %s\n" + "reserved2 = 0x%s , fileID = 0x%s , fileName = %s\n" + "feaList\n" + "%s", Integer.toHexString(this.nextEntryOffset) , Integer.toHexString(this.fileIndex) , Long.toHexString(this.creationTime), Long.toHexString(this.lastAccessTime) , Long.toHexString(this.lastWriteTime) , Long.toHexString(this.lastChangeTime), Long.toHexString(this.endOfFile) , Long.toHexString(this.allocationSize) , this.extFileAttributes, Integer.toHexString(this.fileNameLength) , Integer.toHexString(this.eaSize), Integer.toHexString(this.shortNameLength), Integer.toHexString(reserved), this.shortName, Integer.toHexString(this.reserved2) , Long.toHexString(this.fileID) , this.fileName, this.feaList); } }