import java.sql.*;
import java.text.*;
import java.util.*;
class TailMode extends Thread
{
private int LastID=0, LastRow=0;
private String select="", tab="", TailWhere;
private String[] where;
private DBread dbr;
private Statement st;
private ResultSet rs;
private Object[] udp_sport, udp_dport;
private ListenTable table;
private Object[][] ProtocolNames;
TailMode(int LastRow, String select, DBread dbr, ListenTable table)
{
super();
this.select=select;
this.LastRow=LastRow;
this.table=table;
this.dbr=dbr;
this.tab=dbr.getTable();
try{ st=dbr.getConnection().createStatement(); }
catch(Exception e){ System.out.println(e); }
this.setDaemon(true);
this.setPriority( Thread.NORM_PRIORITY );
}
//---------------------------------------------------------------------------------------
public void setStatement(String select)
{
this.select=select;
}
//---------------------------------------------------------------------------------------
public void setLastRow(int lastrow)
{ this.LastRow=lastrow; }
//---------------------------------------------------------------------------------------
public void setProtocolNames(Object[][] PN)
{ this.ProtocolNames=dbr.getProtocolNames(); }
//---------------------------------------------------------------------------------------
public void run()
{
while( !this.interrupted() )
// for( int z=0; z<3; z++)
{
String TailSelect="";
try
{
//this is to find out how many Rows are in the table
rs=st.executeQuery("SELECT count(*) FROM "+tab);
rs.first();
LastID = rs.getInt(1);
}
catch(Exception exc){ System.out.println("class:TailMode, Method:run() countRows "+exc); }
if( select.endsWith("WHERE") )
{
where=select.split("WHERE");
TailWhere="";
}
else
{
where=select.split("WHERE");
TailWhere=where[1];
}
if( !TailWhere.matches(".*id.*") )
{
if( !select.endsWith("WHERE") )
{ TailWhere=TailWhere+" AND id BETWEEN "+(LastRow+1)+" AND "+LastID; }
else
{ TailWhere=" id BETWEEN "+(LastRow+1)+" AND "+LastID; }
}
try
{
if( select.matches(".*tcp_sport.*"))
{
rs=st.executeQuery("SELECT udp_sport FROM "+tab+" WHERE "+TailWhere);
//this is to find out how many row´s are in the resultset
rs.last();
int AnzRowInRS=rs.getRow();
rs.beforeFirst();
udp_sport=new Object[AnzRowInRS];
int k=0;
while(rs.next())
{ udp_sport[k]=rs.getString(1); k++; }
}
if(select.matches(".*tcp_dport.*"))
{
rs=st.executeQuery("SELECT udp_dport FROM "+tab+" WHERE "+TailWhere);
//this is to find out how many row´s are in the resultset
rs.last();
int AnzRowInRS=rs.getRow();
rs.beforeFirst();
udp_dport=new Object[AnzRowInRS];
int k=0;
while(rs.next())
{ udp_dport[k]=rs.getString(1); k++; }
}
//create the new FW access infos for the new entry´s
int i=0;
rs=st.executeQuery("SELECT oob_prefix FROM devil WHERE "+TailWhere);
//this is to find out how many row´s are in the resultset
rs.last();
int AnzRowInRS=rs.getRow();
rs.beforeFirst();
int[] AccessInfo=new int[AnzRowInRS];
while(rs.next())
{
if(rs.getString(1).startsWith("DROP"))
{ AccessInfo[i]=-1; }
else if(rs.getString(1).startsWith("ACCEPT"))
{ AccessInfo[i]=1; }
i++;
}
((ColoredTableCellRenderer)table.getCellRenderer(1, 1)).addAccessInfo(AccessInfo);
}
catch(Exception exc){ System.out.println("class:TailMode, Method:run() needed Info "+exc); }
try
{
rs=st.executeQuery(where[0]+" WHERE "+TailWhere);
ResultSetMetaData rsmd=rs.getMetaData();
Object[] OrgTableColumnNames=dbr.getOrgTableColumnNames();
//this is to find out how many row´s are in the resultset
rs.last();
int AnzRowInRS=rs.getRow();
rs.beforeFirst();
Object[][] newData=new Object[AnzRowInRS][rsmd.getColumnCount()];
int j=0;
while(rs.next())
{
for(int k=0; k<rsmd.getColumnCount(); k++)
{
newData[j][k]=rs.getString(k+1);
if(!rs.wasNull())
{
if(((String)OrgTableColumnNames[k]).equals("ip_saddr") || ((String)OrgTableColumnNames[k]).equals("ip_daddr"))
{
//Aufruf zum umwandeln der "Verschlüsselten" IP-Adresse in Standard Format
newData[j][k] =dbr.getIPfromLong(rs.getLong(k+1));
}
else if(((String)OrgTableColumnNames[k]).equals("oob_time_sec"))
{
long timeAslong=rs.getLong(k+1);
newData[j][k] =new Time(timeAslong*1000).toString();
}
else if(((String)OrgTableColumnNames[k]).equals("raw_mac"))
{
newData[j][k] =rs.getString(k+1).substring(18,35);
}
else if(((String)OrgTableColumnNames[k]).equals("ip_protocol"))
{
if( ProtocolNames.length>0 )
{
for(int i=0; i<ProtocolNames.length; i++)
{
if(rs.getString(k+1).equals(ProtocolNames[i][0]))
{ newData[j][k] =ProtocolNames[i][1]; }
}
}
else
{ newData[j][k] =rs.getString(k+1); }
}
else if(((String)OrgTableColumnNames[k]).equals("ip_ihl"))
{ newData[j][k] =new Integer(rs.getInt(k+1)*4).toString(); }
else
{ newData[j][k] =rs.getString(k+1); }
}
else if(((String)OrgTableColumnNames[k]).equals("tcp_sport"))
{
newData[j][k] =udp_sport[j];
}
else if(((String)OrgTableColumnNames[k]).equals("tcp_dport"))
{
newData[j][k] =udp_dport[j];
}
else if(((String)OrgTableColumnNames[k]).equals("date"))
{
long dateAslong=rs.getLong(k+2);
if(dateAslong!=0)
{ java.util.Date date=new java.util.Date(dateAslong*1000);
String dateString = DateFormat.getDateInstance().format(date);
newData[j][k] =dateString;
}
else
{ newData[j][k]=""; }
}
}
j++;
}
if( newData.length!=0 )
{ Vector v=((NotEditableTableModel)table.getModel()).ConvertToVector(newData);
((NotEditableTableModel)table.getModel()).addRow(v);
// ((NotEditableTableModel)table.getModel()).removeRow(0);
}
LastRow=LastID;
}
catch(Exception ex){ System.out.println("class:TailMode, Method:run() writeData"+ex); }
}
}
}