package org.infosec.ismp.agent.winsensor.communication.services; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.infosec.ismp.agent.comm.winsensor.model.windowslog.WindowsLog; import org.infosec.ismp.agent.winsensor.SensorServer; import org.infosec.ismp.agent.winsensor.exception.ContentLengthOverLimitException; import org.infosec.ismp.agent.winsensor.exception.ParseXmlException; import org.infosec.ismp.agent.winsensor.util.FileUploadUtil; import org.infosec.ismp.agent.winsensor.util.XmlParseUtil; /** * @author Rocky * @version create time:Oct 29, 2010 2:22:31 PM * */ public class WindowsLogHolder extends HttpServlet { private static final long serialVersionUID = 8222668036512010191L; private static Log log = LogFactory.getLog(WindowsLogHolder.class); private SensorServer sensorServer; @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { handleRequest(req, resp); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } public void handleRequest(HttpServletRequest req, HttpServletResponse resp) { String clientIp = req.getRemoteAddr(); log.debug("Get windowsLog request from Ip: " + clientIp); InputStream completeInputStream = null; XmlParseUtil xmlParseUtil = new XmlParseUtil(); List<WindowsLog> windowsLogs = new ArrayList<WindowsLog>(); FileUploadUtil fileUploadUtil = new FileUploadUtil(); try { completeInputStream = fileUploadUtil.getCompleteInputStream(req); windowsLogs = xmlParseUtil.parseWindowsLog(completeInputStream); } catch (ContentLengthOverLimitException e) { log.warn("Sensor client Ip: " + clientIp + " Exception info: " + e.getMessage()); } catch (ParseXmlException e) { log.warn("Sensor client Ip: " + clientIp + "Exception info: " + e.getMessage()); }catch (IOException e) { log.warn("Sensor client Ip: " + clientIp + ", Exception occurs when get all input stream. " + e.getMessage()); } finally { if (completeInputStream != null) { try { completeInputStream.close(); } catch (IOException e) { log.warn("Sensor client Ip: " + clientIp + ", Exception occurs when close completeInputStream. " + e.getMessage()); } } } if (windowsLogs.size() > 0) { sensorServer.addWindowsLog(windowsLogs); log.debug("Parse WindowsLog info success, and sent the info to Sensor server, client Ip: " + clientIp + " WindowsLog size: " + windowsLogs.size()); } } public SensorServer getSensorServer() { return sensorServer; } public void setSensorServer(SensorServer sensorServer) { this.sensorServer = sensorServer; } }