package org.krakenapps.pcap.decoder.smb.trans2parser; import org.krakenapps.pcap.decoder.netbios.NetBiosNameCodec; import org.krakenapps.pcap.decoder.smb.SmbSession; import org.krakenapps.pcap.decoder.smb.TransData; import org.krakenapps.pcap.decoder.smb.rr.FileAttributes; import org.krakenapps.pcap.decoder.smb.trans2req.Open2Resquest; import org.krakenapps.pcap.decoder.smb.trans2resp.Open2Response; import org.krakenapps.pcap.decoder.smb.transparser.TransParser; import org.krakenapps.pcap.util.Buffer; import org.krakenapps.pcap.util.ByteOrderConverter; public class Open2Parser implements TransParser{ @Override public TransData parseRequest(Buffer setupBuffer , Buffer parameterBuffer , Buffer dataBuffer) { Open2Resquest transData = new Open2Resquest(); byte []reserved = new byte[10]; transData.setSubcommand(ByteOrderConverter.swap(setupBuffer.getShort())); transData.setAccessMode(ByteOrderConverter.swap(parameterBuffer.getShort())); transData.setFlags(ByteOrderConverter.swap(parameterBuffer.getShort())); transData.setSearchAttribute(ByteOrderConverter.swap(parameterBuffer.getShort())); transData.setFileAttribute(FileAttributes.parse(ByteOrderConverter.swap(parameterBuffer.getShort())&0xffff)); transData.setCreationTime(ByteOrderConverter.swap(parameterBuffer.getInt())); transData.setOpenMode(ByteOrderConverter.swap(parameterBuffer.getShort())); transData.setAllocationSize(ByteOrderConverter.swap(parameterBuffer.getInt())); parameterBuffer.gets(reserved); transData.setReserved(reserved); transData.setFileName(NetBiosNameCodec.readSmbUnicodeName(parameterBuffer)); return transData; } @Override public TransData parseResponse(Buffer setupBuffer , Buffer parameterBuffer , Buffer dataBuffer , SmbSession session) { Open2Response transData = new Open2Response(); transData.setFid(ByteOrderConverter.swap(parameterBuffer.getShort())); transData.setFileAttribute(FileAttributes.parse(ByteOrderConverter.swap(parameterBuffer.getShort())& 0xffff)); transData.setCreationTime(ByteOrderConverter.swap(parameterBuffer.getInt())); transData.setFiledataSize(ByteOrderConverter.swap(parameterBuffer.getInt())); transData.setAccessMode(ByteOrderConverter.swap(parameterBuffer.getShort())); transData.setResourceType(ByteOrderConverter.swap(parameterBuffer.getShort())); transData.setNmPipeStatus(ByteOrderConverter.swap(parameterBuffer.getShort())); transData.setActionToken(ByteOrderConverter.swap(parameterBuffer.getShort())); transData.setReserved(ByteOrderConverter.swap(parameterBuffer.getInt())); transData.setExtendedAttributeErrorOffset(ByteOrderConverter.swap(parameterBuffer.getShort())); transData.setExtendedAttributeLength(ByteOrderConverter.swap(parameterBuffer.getInt())); // TODO : transData return transData; } }