/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package ids.Server;
import ids.IA.IA;
import ids.IDS;
import java.io.IOException;
import java.util.Vector;
import java.util.Date;
import java.util.Timer;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
/**
*
* @author Peet
*/
public class Server {
private final String Sig_TCP_Bind = "TCP_Bind";
private final String Sig_HTTP_Request = "HTTP_Request";
private final String Sig_TCP_Connect = "TCP_Connect";
private final String Sig_SQL_Error = "SQL_Error";
private final String Sig_Stop_Respond = "Stop_Respond";
IDS ids;
ServerUI serverUI;
IA ia;
public TableOfWeight tableWeight;
Date d;
long msStart;
TableOfEvents Events;
Vector<String> fichiersInterdits;
public Server(IDS i) throws IOException, ParserConfigurationException, SAXException {
this.ids = i;
serverUI = new ServerUI();
serverUI.setLocation(0, 300);
serverUI.setVisible(true);
d = new Date();
msStart = d.getTime();
Events = new TableOfEvents();
fichiersInterdits = new Vector<String>();
tableWeight = new TableOfWeight();
fichiersInterdits.add("admin/admin.php");
fichiersInterdits.add("admin/batch.sql");
ia = new IA(this);
ia.start();
}
public boolean ReceiveSignal(String signal) {
Events.add(signal);
boolean ret;
if (signal.equals(Sig_Stop_Respond)) {
ret = Sig_stopRespond();
} else {
ret = Sig_Unrecognized();
}
return ret;
}
public boolean ReceiveSignal(String signal, String arg1) {
Events.add(signal, arg1);
boolean ret;
ret = Sig_Unrecognized();
return ret;
}
public boolean ReceiveSignal(String signal, String arg1, String arg2) {
Events.add(signal, arg1, arg2);
boolean ret;
if (signal.equals(Sig_HTTP_Request)) {
ret = Sig_HTTP_Request(arg1, arg2);
} else if (signal.equals(Sig_TCP_Connect)) {
ret = Sig_TCP_Connect_Out(arg1, Integer.valueOf(arg2));
} else if (signal.equals(Sig_TCP_Bind)) {
ret = Sig_TCP_Bind(arg1, Integer.valueOf(arg2));
} else {
ret = Sig_Unrecognized();
}
return ret;
}
public boolean ReceiveSignal(String signal, String arg1, String arg2, String arg3) {
Events.add(signal, arg1, arg2, arg3);
boolean ret;
if (signal.equals(Sig_SQL_Error)) {
ret = Sig_SQL_Error(arg1, arg2, arg3);
} else {
ret = Sig_Unrecognized();
}
return ret;
}
private boolean Sig_Unrecognized() {
if (canRespond()) {
serverUI.writeLine("ERROR: Unrecognized Signal");
}
return false;
}
private boolean Sig_TCP_Bind(String addr, int port) {
boolean ret = false;
if (canRespond()) {
serverUI.writeLine("TCP Bind on port " + port);
ret = true;
}
return ret;
}
private boolean Sig_HTTP_Request(String page, String addr_src) {
boolean ret = false;
if (canRespond()) {
serverUI.writeLine("HTTP Request on page " + page + " from " + addr_src);
ret = true;
}
return ret;
}
private boolean Sig_TCP_Connect_Out(String addr, int port) {
boolean ret = false;
if (canRespond()) {
serverUI.writeLine("Exiting TCP connection to " + addr + "on port " + port);
ret = true;
}
return ret;
}
private boolean Sig_SQL_Error(String type, String page, String addr) {
boolean ret = false;
if (canRespond()) {
serverUI.writeLine("SQL Error :" + type + " on page " + page + " on a connection from " + addr);
ret = true;
}
return ret;
}
private boolean Sig_stopRespond() {
d = new Date();
serverUI.writeLine("Server stopping to respond for 3 seconds");
msStart = d.getTime() + 3000;
return true;
}
private boolean canRespond() {
d = new Date();
return (msStart < d.getTime());
}
public TableOfEvents getTableOfEvents() {
return this.Events;
}
public void setStatus(String status, String diagnostic, String solution) {
this.serverUI.setStatus(status, diagnostic, solution);
}
public TableOfEvents getCopyTable() {
TableOfEvents tableTmp = new TableOfEvents();
for (LineInTableOfEvents l : this.Events.Events) {
tableTmp.Events.add(l);
}
return tableTmp;
}
void updateTableOfWeigth(String string) {
this.tableWeight.updateWeight(string);
}
}