package org.araqne.log.api; import java.io.IOException; import java.nio.ByteBuffer; import java.util.Date; import org.araqne.log.api.WtmpEntry.Type; public class WtmpEntryParserSolaris extends WtmpEntryParser { @Override public int getBlockSize() { return 372; } @Override public WtmpEntry parseEntry(ByteBuffer bb) throws IOException { byte[] ut_user = new byte[32]; bb.get(ut_user); byte[] idBlob = new byte[4]; bb.get(idBlob); byte[] lineBlob = new byte[32]; bb.get(lineBlob); int pid = bb.getInt(); int type = bb.getShort(); /* term */ bb.getShort(); /* exit */ bb.getShort(); /* skip */ bb.getShort(); int time = bb.getInt(); int session = bb.getInt(); byte[] pad = new byte[24]; bb.get(pad); /* syslen */ bb.getShort(); byte[] hostBlob = new byte[257]; bb.get(hostBlob); return new WtmpEntry(getEntryType(type), new Date(time * 1000L), pid, readString(ut_user), readString(hostBlob), session, readString(lineBlob), readString(idBlob)); } private Type getEntryType(int d) { switch (d) { case 0: return Type.Empty; case 1: return Type.RunLevel; case 2: return Type.BootTime; case 3: return Type.OldTime; case 4: return Type.NewTime; case 5: return Type.InitProcess; case 6: return Type.LoginProcess; case 7: return Type.UserProcess; case 8: return Type.DeadProcess; case 9: return Type.Accounting; case 10: return Type.DownTime; default: return Type.Unknown; } } }