package com.legind.swinedroid.xml; import java.io.IOException; import java.net.InetAddress; import java.net.UnknownHostException; import java.sql.Timestamp; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.LinkedList; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import android.util.Log; import com.legind.swinedroid.RequestService.Request; import com.legind.web.WebTransport.WebTransportException; public class AlertListXMLHandler extends XMLHandler{ private boolean inNumAlerts = false; private boolean inAlert = false; private boolean inSid = false; private boolean inCid = false; private boolean inIpSrc = false; private boolean inIpDst = false; private boolean inSigPriority = false; private boolean inSigName = false; private boolean inTimestamp = false; public long numAlerts; public LinkedList <AlertListXMLElement> alertList; private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); private static final String LOG_TAG = "com.legind.swinedroid.xml.AlertListXMLHandler"; @Override public void startElement(String uri, String name, String qName, Attributes atts){ super.startElement(uri, name, qName, atts); if(name.trim().equals("num_alerts")){ super.clearStringBuilder(); inNumAlerts = true; } if(name.trim().equals("alert")){ inAlert = true; alertList.add(new AlertListXMLElement()); } if(name.trim().equals("sid")){ super.clearStringBuilder(); inSid = true; } if(name.trim().equals("cid")){ super.clearStringBuilder(); inCid = true; } if(name.trim().equals("ip_src")){ super.clearStringBuilder(); inIpSrc = true; } if(name.trim().equals("ip_dst")){ super.clearStringBuilder(); inIpDst = true; } if(name.trim().equals("sig_priority")){ super.clearStringBuilder(); inSigPriority = true; } if(name.trim().equals("sig_name")){ super.clearStringBuilder(); inSigName = true; } if(name.trim().equals("timestamp")){ super.clearStringBuilder(); inTimestamp = true; } } @Override public void endElement(String uri, String name, String qName){ handleString(); super.endElement(uri, name, qName); if(name.trim().equals("num_alerts")){ inNumAlerts = false; } if(name.trim().equals("alert")){ inAlert = false; } if(name.trim().equals("sid")){ inSid = false; } if(name.trim().equals("cid")){ inCid = false; } if(name.trim().equals("ip_src")){ inIpSrc = false; } if(name.trim().equals("ip_dst")){ inIpDst = false; } if(name.trim().equals("sig_priority")){ inSigPriority = false; } if(name.trim().equals("sig_name")){ inSigName = false; } if(name.trim().equals("timestamp")){ inTimestamp = false; } } public void handleString(){ try{ if(inNumAlerts) numAlerts = Long.parseLong(super.getStringBuilder().toString()); if(inAlert && inSid) alertList.getLast().sid = Long.parseLong(super.getStringBuilder().toString()); if(inAlert && inCid) alertList.getLast().cid = Long.parseLong(super.getStringBuilder().toString()); if(inAlert && inIpSrc) alertList.getLast().ipSrc = InetAddress.getByName(super.getStringBuilder().toString()); if(inAlert && inIpDst) alertList.getLast().ipDst = InetAddress.getByName(super.getStringBuilder().toString()); if(inAlert && inSigPriority) alertList.getLast().sigPriority = Byte.parseByte(super.getStringBuilder().toString()); if(inAlert && inSigName){ alertList.getLast().sigName = super.getStringBuilder().toString(); } if(inAlert && inTimestamp){ Date parsed_date = dateFormat.parse(super.getStringBuilder().toString()); alertList.getLast().timestamp = new Timestamp(parsed_date.getTime()); } } catch (UnknownHostException e) { Log.w(LOG_TAG, e.toString()); } catch (ParseException e) { Log.w(LOG_TAG, e.toString()); } } @Override public void createElement(Request request, String call, String extra_parameters) throws IOException, SAXException, XMLHandlerException, WebTransportException{ alertList = new LinkedList<AlertListXMLElement>(); super.createElement(request, call, extra_parameters); } }