/* * Created on 23.04.2004 * */ package mmonster.webfrontend; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.net.Socket; import javax.naming.Context; import javax.naming.InitialContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; /** * HelperServlet for Input data to the MultiMonster Server. * Parses the HTTP-Request, gets out the uploaded file and sends the file * directly to the MediaProxy by useing a socket transfer. * * * @web.servlet name = "DirectInputServlet" display-name = "DirectInput * Servlet" description = "Servlet that calls MMonster-Controller-Methods" * * @web.servlet-mapping url-pattern = "/DirectInput" * * @web.ejb-ref name = "multimonster/mediaproxy/MediaProxy" type = "Session" * home = "multimonster.mediaproxy.interfaces.MediaProxyImplHome" remote = * "multimonster.mediaproxy.interfaces.MediaProxyImpl" description = "" * * @jboss.ejb-ref-jndi ref-name = "multimonster/mediaproxy/MediaProxy" * jndi-name = "ejb/MediaProxyFacade" */ public class DirectInputServlet extends HttpServlet { private Logger log = Logger.getLogger(this.getClass()); /** default block size to transfer data to server*/ private static int transferBlockSize = 512; /** * */ public DirectInputServlet() { } /* * (non-Javadoc) * * @see javax.servlet.GenericServlet#init() */ public void init() throws ServletException { Context context; log.debug("DirectInput-Servlet init..."); try { context = new InitialContext(); } catch (Exception e) { log.error("Error init(): " + e.getMessage()); } } /** * Parses HTTP-Request, gets out uploaded data and transmits it to the server */ protected void doPost(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException { String serverSocketHost = null; String serverSocketPort_String = null; int serverSocketPort = 0; Socket socketToServer; DataOutputStream dataStreamToServer = null; DataInputStream dataStreamFromServer = null; String serverAntwort = ""; int uploadedFileSize = 0; PrintWriter out = null; response.setContentType("text/html"); out = response.getWriter(); out.println("<html><head>"); out.println( "<link rel=\"stylesheet\" media=\"all\" href=\"style.css\">"); out.println("</head>"); out.println("<body>"); out.println("<center>"); try { /* ---------------GET DATA OUT OF HTTP STREAM --------------------- */ MultipartRequest parser = new ServletMultipartRequest(req, 1024 * 1024 * 1024); if (null == parser) { log.error("parser is null"); out.println("<p>server-problem, retry upload</p>"); return; } serverSocketHost = parser.getURLParameter("serverSocketHost"); serverSocketPort_String = parser.getURLParameter("serverSocketPort"); try { serverSocketPort = (new Integer(serverSocketPort_String)).intValue(); } catch (Exception e) { log.error("Couldn't parse port."); } if ((serverSocketHost != null) && (serverSocketPort != 0)) { log.debug("read serverSocketEndPoint: " + serverSocketHost +":" +serverSocketPort); } else { log.debug("serverSocket couldn't be read completly."); out.println("<p>no input-link found</p>"); return; } // get file out of HTTP-Request if (null == parser.getFileContents("mediafile")) { log.debug("unable to parse file"); } InputStream fileIn = parser.getFileContents("mediafile"); if (fileIn == null){ log.error("user sent no file"); out.println("<p>no file selected</p>"); return; } uploadedFileSize = fileIn.available(); log.debug("read file with size:" + uploadedFileSize); /* ---------------TRANSFER TO SERVER --------------------- */ //open socket to server and send file try { //open socket socketToServer = new Socket(serverSocketHost, serverSocketPort); log.error("Socket created!"); dataStreamToServer = new DataOutputStream(socketToServer.getOutputStream()); dataStreamFromServer = new DataInputStream(socketToServer.getInputStream()); //transfer data int nextBlockSize = Math.min(512, fileIn.available()); while (nextBlockSize > 0){ byte[] data = new byte[nextBlockSize]; fileIn.read(data, 0, nextBlockSize); dataStreamToServer.write(data); nextBlockSize = Math.min(512, fileIn.available()); } //close fileIn.close(); dataStreamFromServer.close(); dataStreamToServer.close(); } catch (IOException e) { log.error(e); e.printStackTrace(); out.println("<p>An error occured:" +e.getMessage() +"</p>"); return; } out.println("<p>input finished.</p>"); } catch (Exception e) { log.error("input-problem: ",e); } finally{ out.println("</body>"); out.println("</html>"); } } }