summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorburaq <buraq@epfl.ch>2005-02-11 18:19:51 +0000
committerburaq <buraq@epfl.ch>2005-02-11 18:19:51 +0000
commit4c6438417db9374d015129138892bcc2a950f15b (patch)
tree9067e1042621b7ccb136f3e208344984d88c42d4
parentd439857e2fe5d8173ee37fbec61cf39cb78f5049 (diff)
downloadscala-4c6438417db9374d015129138892bcc2a950f15b.tar.gz
scala-4c6438417db9374d015129138892bcc2a950f15b.tar.bz2
scala-4c6438417db9374d015129138892bcc2a950f15b.zip
removed servlet engine from repository
-rw-r--r--Makefile22
-rw-r--r--config/list/servlet.lst28
-rw-r--r--sources/scala/tools/servlet/ScalaCookiee.scala14
-rw-r--r--sources/scala/tools/servlet/ScalaServlet.scala63
-rw-r--r--sources/scala/tools/servlet/ServletException.scala7
-rw-r--r--sources/scala/tools/servlet/Status.scala26
-rw-r--r--sources/scala/tools/servlet/engine/Connector.scala25
-rw-r--r--sources/scala/tools/servlet/engine/Main.scala54
-rw-r--r--sources/scala/tools/servlet/engine/config/Config.scala10
-rw-r--r--sources/scala/tools/servlet/engine/config/ConfigHandler.scala50
-rw-r--r--sources/scala/tools/servlet/engine/config/ConfigReader.scala39
-rw-r--r--sources/scala/tools/servlet/http/HTTP.scala172
-rw-r--r--sources/scala/tools/servlet/http/HttpConnector.scala12
-rw-r--r--sources/scala/tools/servlet/http/HttpException.scala27
-rw-r--r--sources/scala/tools/servlet/http/HttpFile.scala38
-rw-r--r--sources/scala/tools/servlet/http/HttpHandler.scala88
-rw-r--r--sources/scala/tools/servlet/http/HttpInputStream.scala145
-rw-r--r--sources/scala/tools/servlet/http/HttpOutputStream.scala102
-rw-r--r--sources/scala/tools/servlet/http/HttpProcessor.scala8
-rw-r--r--sources/scala/tools/servlet/http/HttpServletPro.scala85
20 files changed, 0 insertions, 1015 deletions
diff --git a/Makefile b/Makefile
index 03eb35497d..d056f7e2af 100644
--- a/Makefile
+++ b/Makefile
@@ -115,7 +115,6 @@ scalap : main.scalap
dtd2scala : main.dtd2scala
scala4ant : main.scala4ant
scalatest : main.scalatest
-servlet : main.servlet
tools : main.tools
$(prefix).all : $(latest)all
@@ -134,7 +133,6 @@ $(prefix).scalap : $(latest)scalap
$(prefix).dtd2scala : $(latest)dtd2scala
$(prefix).scala4ant : $(latest)scala4ant
$(prefix).scalatest : $(latest)scalatest
-$(prefix).servlet : $(latest)servlet
$(prefix).tools : $(latest)tools
meta.% : ; @$(make) prefix="meta" $@;
@@ -161,7 +159,6 @@ test.% : ; @$(make) prefix="test" $@;
.PHONY : dtd2scala
.PHONY : scala4ant
.PHONY : scalatest
-.PHONY : servlet
.PHONY : tools
.PHONY : $(prefix).all
@@ -180,7 +177,6 @@ test.% : ; @$(make) prefix="test" $@;
.PHONY : $(prefix).dtd2scala
.PHONY : $(prefix).scala4ant
.PHONY : $(prefix).scalatest
-.PHONY : $(prefix).servlet
.PHONY : $(prefix).tools
##############################################################################
@@ -659,23 +655,6 @@ $(latest)scalatest-jc : $(SCALATEST_JC_FILES)
$(TOUCH) $@
##############################################################################
-# Targets - scala tools - servlet engine
-
-PROJECT_SOURCES += $(SERVLET_SOURCES)
-SERVLET_ROOT = $(PROJECT_SOURCEDIR)/scala/tools/servlet
-SERVLET_LIST += $(call READLIST,$(PROJECT_LISTDIR)/servlet.lst)
-SERVLET_SOURCES += $(SERVLET_LIST:%=$(SERVLET_ROOT)/%)
-SERVLET_SC_FILES += $(SERVLET_SOURCES)
-
-$(latest)servlet : $(latest)servlet-sc
-$(latest)servlet :
- $(TOUCH) $@
-
-$(latest)servlet-sc : $(SERVLET_SC_FILES)
- @$(make) sc target=SERVLET SERVLET_SC_FILES='$?'
- $(TOUCH) $@
-
-##############################################################################
# Targets - scala tools
TOOLS_NAME = tools
@@ -694,7 +673,6 @@ $(latest)tools : $(latest)scalap
$(latest)tools : $(latest)dtd2scala
$(latest)tools : $(latest)scala4ant
$(latest)tools : $(latest)scalatest
-$(latest)tools : $(latest)servlet
$(latest)tools :
$(TOUCH) $@
diff --git a/config/list/servlet.lst b/config/list/servlet.lst
deleted file mode 100644
index 13888df5e4..0000000000
--- a/config/list/servlet.lst
+++ /dev/null
@@ -1,28 +0,0 @@
-############################################################-*-Makefile-*-####
-# servlet source files (paths are relative to ./sources/scala/tools/servlet)
-##############################################################################
-# $Id$
-
-ScalaCookiee.scala
-ScalaServlet.scala
-ServletException.scala
-Status.scala
-
-engine/Connector.scala
-engine/Main.scala
-
-engine/config/Config.scala
-engine/config/ConfigReader.scala
-engine/config/ConfigHandler.scala
-
-http/HTTP.scala
-http/HttpConnector.scala
-http/HttpException.scala
-http/HttpFile.scala
-http/HttpHandler.scala
-http/HttpInputStream.scala
-http/HttpOutputStream.scala
-http/HttpProcessor.scala
-http/HttpServletPro.scala
-
-##############################################################################
diff --git a/sources/scala/tools/servlet/ScalaCookiee.scala b/sources/scala/tools/servlet/ScalaCookiee.scala
deleted file mode 100644
index 2a9a15adfd..0000000000
--- a/sources/scala/tools/servlet/ScalaCookiee.scala
+++ /dev/null
@@ -1,14 +0,0 @@
-package scala.tools.servlet;
-
-import java.io._;
-
-class ScalaCookiee(name:String,value:String) {
-
- def getName():String ={
- name;
- }
-
- def getValue():String={
- value;
- }
-}
diff --git a/sources/scala/tools/servlet/ScalaServlet.scala b/sources/scala/tools/servlet/ScalaServlet.scala
deleted file mode 100644
index 51e62fbde8..0000000000
--- a/sources/scala/tools/servlet/ScalaServlet.scala
+++ /dev/null
@@ -1,63 +0,0 @@
-package scala.tools.servlet;
-
-import java.io.IOException;
-import scala.xml._;
-import scala.collection.mutable.HashMap ;
-import http.HttpOutputStream;
-
-object ScalaServlet {
- final def showError(out: HttpOutputStream, status:int, msg :String): Unit =
- out.write(
- <html>
- <head>
- <title>SERVLET ERROR</title>
- </head>
- <body>
- <big>Attention,erreur dans la servlet</big>
- <br/>type de l erreur: { Status.getMessage(status) }<br/>{ msg }
- </body>
- </html>.toString());
-}
-
-/** subclasses can be registered with the servlet engine to handle requests
- */
-abstract class ScalaServlet {
-
- var output:HttpOutputStream = null;
- // HashMap[String,String]
- def doGetXML(info: HashMap[String,String]): scala.xml.Node ;
-
- final def doGet(out: HttpOutputStream, info: HashMap[String,String]): Unit= {
- try{
- out.write( doGetXML( info ).toString() );
- }
- catch {
- case ServletException(status, msg) =>
- ScalaServlet.showError(out, status, msg );
- case ex:Exception =>
- ScalaServlet.showError(out, Status.INTERNAL_ERROR, ex.getMessage());
- }
- }
-
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/sources/scala/tools/servlet/ServletException.scala b/sources/scala/tools/servlet/ServletException.scala
deleted file mode 100644
index b92ec2f956..0000000000
--- a/sources/scala/tools/servlet/ServletException.scala
+++ /dev/null
@@ -1,7 +0,0 @@
-package scala.tools.servlet;
-
-case class ServletException(code:int, msg:String) extends Exception;
-
-
-
-
diff --git a/sources/scala/tools/servlet/Status.scala b/sources/scala/tools/servlet/Status.scala
deleted file mode 100644
index 8b22259097..0000000000
--- a/sources/scala/tools/servlet/Status.scala
+++ /dev/null
@@ -1,26 +0,0 @@
-package scala.tools.servlet;
-
-/** status constants for servlets
- * @todo i18n
- */
-object Status {
-
- final val OKAY = 50;
- final val NOT_IMPLEMENTED = 60;
- final val FORBIDDEN = 70;
- final val NOT_FOUND = 80;
- final val BAD_REQUEST = 90;
- final val INTERNAL_ERROR = 99;
-
- def getMessage (code:int): String = code match {
-
- case OKAY => "OK"
- case NOT_IMPLEMENTED => "Not Implemented"
- case FORBIDDEN => "Forbidden"
- case NOT_FOUND => "Not Found"
- case BAD_REQUEST => "Bad Request"
- case INTERNAL_ERROR => "Server Internal Error"
- case _ => "Unknown Code (" + code + ")"
-
- }
-}
diff --git a/sources/scala/tools/servlet/engine/Connector.scala b/sources/scala/tools/servlet/engine/Connector.scala
deleted file mode 100644
index 89fd326bd5..0000000000
--- a/sources/scala/tools/servlet/engine/Connector.scala
+++ /dev/null
@@ -1,25 +0,0 @@
-package scala.tools.servlet.engine;
-
-import java.net.{ Socket, ServerSocket };
-
-/** for every port, there is one connector that instantiates a handler
- * per client connection
- */
-abstract class Connector(thePort: Int) extends Thread {
- super.setDaemon(true);
-
- /** concrete instances of Connectors must override this with a factory
- * for protocol handlers
- */
- def makeHandler(s: Socket): Thread; //Handler;
-
- final val port = thePort;
- final val serverSocket = new ServerSocket(thePort);
-
- // @todo: handler pooling
- final override def run() = while(true) {
- val client = serverSocket.accept(); /* returns a socket upon connection */
- val t = makeHandler(client);
- t.start();
- }
-}
diff --git a/sources/scala/tools/servlet/engine/Main.scala b/sources/scala/tools/servlet/engine/Main.scala
deleted file mode 100644
index ecde727fb8..0000000000
--- a/sources/scala/tools/servlet/engine/Main.scala
+++ /dev/null
@@ -1,54 +0,0 @@
-package scala.tools.servlet.engine;
-
-import java.net.ServerSocket;
-
-/** Main loop of the servlet engine, opens a ServerSocket
- * and spawns a thread when accepting a client connections.
- *
- * servletEngine depends on mappings
- * <ul>
- * <li>p: ports to protocol, and</li>
- * <li>s: url to servlet</li>
- * </ul>
- */
-object Main {
-
- final val sampleConfig =
- <engine xmlns="http://scala.epfl.ch/scala.tools.servlet.engine/config">
- <connector port="8000" protocol="http">
- <map url="/servlet/foo" to="app1.HelloWorldServlet"/>
- </connector>
- </engine>;
-
-
- def main(args: Array[String]): Unit = {
- if( args.length != 1 ) {
-
- Console.println("usage:");
- Console.println("scala scala.tools.servlet.engine.Main <config>");
- Console.println(" where <config> is the filename of a document like this one:");
- Console.println( new scala.xml.PrettyPrinter(80,5).format( sampleConfig ));
-
- } else {
- val fileName = args(0);
- Console.println("reading config file from \""+fileName+"\"");
- val theConfig = new config.ConfigReader(fileName).element;
-
- import config._ ;
-
- for( val c <- theConfig ) c match {
- case EngineConfig(list) =>
- for( val conn <- list ) conn match {
- case HttpConnectorConfig(port,map) =>
- Console.println("starting http connector at "+port);
- new http.HttpConnector(port, map).start(); //@todo
- }
- }
- //Console.println("starting http connector at 8000");
- //hcon.start();
- while(true) {
- Thread.sleep(50000)
- }
- }
- }
-}
diff --git a/sources/scala/tools/servlet/engine/config/Config.scala b/sources/scala/tools/servlet/engine/config/Config.scala
deleted file mode 100644
index 50fdf38590..0000000000
--- a/sources/scala/tools/servlet/engine/config/Config.scala
+++ /dev/null
@@ -1,10 +0,0 @@
-package scala.tools.servlet.engine.config ;
-
-abstract class Config;
-
-case class EngineConfig(xs:List[ConnectorConfig]) extends Config;
-
-abstract class ConnectorConfig extends Config;
-
-case class HttpConnectorConfig(port:Int, mapping: PartialFunction[String,String]) extends ConnectorConfig;
-
diff --git a/sources/scala/tools/servlet/engine/config/ConfigHandler.scala b/sources/scala/tools/servlet/engine/config/ConfigHandler.scala
deleted file mode 100644
index 72f621082b..0000000000
--- a/sources/scala/tools/servlet/engine/config/ConfigHandler.scala
+++ /dev/null
@@ -1,50 +0,0 @@
-package scala.tools.servlet.engine.config ;
-
-import scala.collection.{ Map, mutable };
-
-import scala.xml.{ Attribute, AttributeSeq, Elem };
-import scala.xml.parsing._;
-
-class ConfigHandler extends MarkupHandler[Config] {
-
- final val config_namespace = "http://scala.epfl.ch/scala.tools.servlet.engine/config";
-
- var hmap = new mutable.HashMap[String,String];
-
- /** be careful to copy everything from attrMap1, as it will change
- * @param attrMap1 the attribute map.
- */
- def element(pos: int, uri: String, label: String, attrMap1: Map[Pair[String,String],Attribute], args: mutable.Buffer[Config]): Option[Config] = {
- if( uri == config_namespace ) {
- label match {
-
- case "engine" =>
- var list:List[ConnectorConfig] = Nil;
- for( val c <- args ) c match {
- case x:ConnectorConfig =>
- list = x::list;
- case _ =>
- }
- Some(EngineConfig( list ));
-
- case "connector" if attrMap1(Pair(config_namespace,"protocol")).value == "http" =>
- val res = HttpConnectorConfig( attrMap1(Pair(config_namespace,"port")).intValue, hmap );
- hmap = new mutable.HashMap[String,String];
- Some(res)
-
- case "map" =>
- hmap.update(attrMap1(Pair(config_namespace,"url")).value, attrMap1(Pair(config_namespace,"to")).value);
- None
- }
- } else None
-
- }
-
- def charData(pos: Int, txt: String ) = None;
- def procInstr(pos: Int, target: String, txt: String) = None;
- def comment(pos: Int, comment: String ) = None;
- def entityRef(pos: Int, n: String) = None;
-
- def text(pos: Int, n: String) = None;
-
-}
diff --git a/sources/scala/tools/servlet/engine/config/ConfigReader.scala b/sources/scala/tools/servlet/engine/config/ConfigReader.scala
deleted file mode 100644
index abfc61d15c..0000000000
--- a/sources/scala/tools/servlet/engine/config/ConfigReader.scala
+++ /dev/null
@@ -1,39 +0,0 @@
-package scala.tools.servlet.engine.config ;
-
-import tools.util.SourceReader ;
-
-import scala.xml.parsing.MarkupParser;
-
-import scala.collection.mutable;
-
-case class ConfigReaderError(msg: String) extends Exception(msg);
-
-class ConfigReader(inp: String) extends MarkupParser[Config] {
-
- /** sets up reader for source files */
- val inputIt: Iterator[Char] = {
- val charset = java.nio.charset.Charset.forName("ISO-8859-1"); // @todo
- val decoder = charset.newDecoder();
- val reader = new SourceReader(decoder);
- val file:Seq[Char] = reader.read( inp );
- file.elements
- }
-
- override var ch = inputIt.next;
-
- def nextch = {
- if( inputIt.hasNext )
- ch = inputIt.next;
- }
-
- val handle = new ConfigHandler();
-
- //val enableEmbeddedExpressions: Boolean;
-
- /** report a syntax error */
- def reportSyntaxError(str: String): Unit = throw ConfigReaderError(str);
-
- def init = nextch;
- val preserveWS = false;
-
-}
diff --git a/sources/scala/tools/servlet/http/HTTP.scala b/sources/scala/tools/servlet/http/HTTP.scala
deleted file mode 100644
index 8f74eadc83..0000000000
--- a/sources/scala/tools/servlet/http/HTTP.scala
+++ /dev/null
@@ -1,172 +0,0 @@
-package scala.tools.servlet.http;
-
-import java.io._;
-import java.net._;
-import scala.collection.mutable.HashMap;
-
-/** constants */
-object HTTP {
- val SERVER_INFO: String= "JNP-HTTPD/1.0";
- val SERVLET_PREFIX: String= "/servlet/";
- val SERVER_LOCATION: File= new File(System.getProperty("user.dir"));
- val HTML_ROOT: File= new File(SERVER_LOCATION,"html");
- val PORT:Int = 80 ;
- val DEFAULT_INDEX: String = "index.html";
-
- final val METHOD_GET : String="GET";
- final val METHOD_POST : String="POST";
- final val METHOD_HEAD : String="HEAD";
-
-
- final val STATUS_OKAY = 200;
- final val STATUS_NO_CONTENT= 204;
- final val STATUS_MOVED_PERMANENTLY= 301;
- final val STATUS_MOVED_TEMPORARILY=302;
- final val STATUS_BAD_REQUEST=400;
- final val STATUS_FORBIDDEN=403;
- final val STATUS_NOT_FOUND=404;
- final val STATUS_NOT_ALLOWED=405;
- final val STATUS_INTERNAL_ERROR =500;
- final val STATUS_NOT_IMPLEMENTED=501;
-
- def getCodeMessage (code:int): String = code match {
-
- case STATUS_OKAY => "OK"
- case STATUS_NO_CONTENT => "No Content"
- case STATUS_MOVED_PERMANENTLY => "Moved Permantely"
- case STATUS_MOVED_TEMPORARILY => "Moved Temporarily"
- case STATUS_BAD_REQUEST => "Bad Request"
- case STATUS_FORBIDDEN => "Forbidden"
- case STATUS_NOT_FOUND => "Not Found"
- case STATUS_NOT_ALLOWED => "Method Not Allowed"
- case STATUS_INTERNAL_ERROR => "Server Internal Error"
- case STATUS_NOT_IMPLEMENTED => "Not Implemented"
- case _ => "Unknown Code (" + code + ")"
-
- }
-
- def canonicalizePath(path: String):String={
- val chars:Array[char] = path.toCharArray();
- var length:int = chars.length;
- var idx:int =0;
- var odx:int =0;
-
- idx = indexOf (chars, length,'/',odx);
- while ( idx < (length - 1)){
- val ndx:int = indexOf (chars, length,'/',idx + 1);
- var kill = -1;
- if (ndx == idx + 1){
- kill = 1;
- }
- else if((ndx >= idx + 2) && (chars(idx + 1 )=='.')){
- if(ndx == idx + 2){
- kill = 2;
- } else if ((ndx == idx +3) && (chars(idx + 2) == '.')){
-
- kill = 3;
- while ((idx > 0) && (chars({idx = idx -1; idx}) !='/'))
- kill = kill +1;
-
- }}
- if (kill == -1){
- odx = ndx;
- } else if (idx +kill >= length){
- odx = idx +1;
- length =odx ;
- } else {
- length =length- kill;
- System.arraycopy(chars,idx +1+kill, chars,idx +1,length-idx-1);
-
- odx =idx;
- }
- idx = indexOf (chars, length,'/',odx);
- }
-
- return new String (chars, 0, length);
- }
-
-
- def indexOf (chars: Array[char],length:int,chr: char,from:int):int={
- var frome :int = from;
- while ((frome < length) && (chars(frome) != chr))
- frome=frome + 1;
- return frome
- }
-
-
- def translateFilename (filename:String ):String ={
- val result:StringBuffer = new StringBuffer ();
- try {
- var idx = 0;
- var odx = 0;
- idx = filename.indexOf ('/',odx);
- while (idx != -1){
- result.append(filename.substring(odx,idx)).append(File.separator);
- odx= idx +1;
- idx = filename.indexOf ('/',odx);
- }
- result.append(filename.substring(odx));}
- catch{
- case e :java.lang.NullPointerException => System.out.println("attention erreur");
- }
-
- return result.toString();
- }
-
- final var mimeTypes = new HashMap[String, String]();
-
- mimeTypes.update("gif", "image/gif");
- mimeTypes.update("jpeg", "image/jpeg");
- mimeTypes.update("jpg", "image/jpeg");
- mimeTypes.update("html", "text/html");
- mimeTypes.update("htm" , "text/html");
-
- def guessMimeType(fileName: String): String ={
- val i =fileName.lastIndexOf(".");
- val typ = mimeTypes.get(fileName.substring (i + 1).toLowerCase()).asInstanceOf[String];
- if (typ != null) {typ} else {"text/plain"};
-
- }
-
-
- def processing(inf: String): HashMap[String, String]={
- var hashList = new HashMap[String, String];
- var info = inf;
- var i=occurence(info,"&");
- info = "&".concat(info);
- info = info.concat("&");
- var a= "";
- var b = "";
- var j= 0;
- /*
- si info = aaaa=3&bbbb=4&cccc=5 alors on le rend comme suit: &aaaa=3&bbbb=4&cccc=5&
- dans la boucle
- a = aaaa
- b= 3
- */
- while(j < i){
- var idxAND=info.indexOf("&");
- var idxEQUAL=info.indexOf("=");
- var idxSecondAND = info.indexOf("&",idxAND+1);
- a = info.substring(idxAND+1,idxEQUAL);
- b = info.substring(idxEQUAL+ 1,idxSecondAND);
- hashList.update(a, b);
- info = info.substring(idxSecondAND);
- j=j+1;
- }
- hashList;
-
-
- }
- def occurence(tsr:String,cr:String):int={
- var n= 1;
- var str = tsr;
- var idx = str.indexOf(cr);
- while (idx != -1){
- n = n+1;
- str=str.substring(idx+1);
- idx = str.indexOf(cr);
- }
- n;
- }
-}
diff --git a/sources/scala/tools/servlet/http/HttpConnector.scala b/sources/scala/tools/servlet/http/HttpConnector.scala
deleted file mode 100644
index 685fce7915..0000000000
--- a/sources/scala/tools/servlet/http/HttpConnector.scala
+++ /dev/null
@@ -1,12 +0,0 @@
-package scala.tools.servlet.http;
-
-import servlet.engine.config.HttpConnectorConfig;
-
-/** for every port, there is one connector that instantiates a handler
- * per client connection
- */
-class HttpConnector(port: Int, map: PartialFunction[String,String]) extends servlet.engine.Connector(port) {
-
- def makeHandler(s: java.net.Socket) = new HttpHandler( s, map );
-
-}
diff --git a/sources/scala/tools/servlet/http/HttpException.scala b/sources/scala/tools/servlet/http/HttpException.scala
deleted file mode 100644
index 9bbaf4f5ed..0000000000
--- a/sources/scala/tools/servlet/http/HttpException.scala
+++ /dev/null
@@ -1,27 +0,0 @@
-package scala.tools.servlet.http;
-
-import java.io._;
-
-/**
-La classe HttpException est une sous-classe de IOException, elle retourne au client une page HTML qui contient les erreurs dont les types se trouvent dans la classe HTTP.
-
-*/
-class HttpException(code : int, detail: String) extends IOException (detail) {
-
-
- def toProcessor = new HttpProcessor {
-
- override def processRequest( out : HttpOutputStream ) : unit ={
- out.setCode(code);
- out.setHeader("Content-Type", "text/html");
- if(out.sendHeaders()){
- val msg = HTTP.getCodeMessage (code);
- out.write("<HTML><HEAD><TITLE>"+ code + " " +msg + "</TITLE></HEAD>\n"+"<BODY> <H1>" +
- msg +"</H1>\n"+ getMessage () + "<P>\n </BODY></HTML>\n");
- }
-
- }
-
- }
-
-}
diff --git a/sources/scala/tools/servlet/http/HttpFile.scala b/sources/scala/tools/servlet/http/HttpFile.scala
deleted file mode 100644
index b2c503b642..0000000000
--- a/sources/scala/tools/servlet/http/HttpFile.scala
+++ /dev/null
@@ -1,38 +0,0 @@
-package scala.tools.servlet.http;
-
-import java.io._;
-import java.net._;
-import scala.collection.mutable.HashMap;
-
-/**
-La classe HttpFile implémente le trait HttpProcessor et permit de servir des fichiers statiques depuis le répétoire local des fichiers
-*/
-
-class HttpFile(in: HttpInputStream, info: HashMap[String, String]) with HttpProcessor{
-
- if (in.getMethod() == HTTP.METHOD_HEAD){
- throw new HttpException (HTTP.STATUS_NOT_ALLOWED,"<TT>" + in.getMethod ()+ " "+ in.getPath() +"</TT>");
- }
-
- var file = new File (HTTP.HTML_ROOT, HTTP.translateFilename(in.getPath()));
- if(in.getPath().endsWith("/"))
- file = new File(file, HTTP.DEFAULT_INDEX);
- if(!file.exists())
- throw new HttpException (HTTP.STATUS_NOT_FOUND,"le Fichier <TT>" +in.getPath() + "</TT> n'est pas trouvé");
- if(file.isDirectory())
- throw new HttpException (HTTP.STATUS_MOVED_PERMANENTLY,in.getPath() + "/");
- if (!file.isFile() || !file.canRead())
- throw new HttpException (HTTP.STATUS_FORBIDDEN,
- in.getPath());
-
-
- override def processRequest(out: HttpOutputStream): Unit ={
- out.setHeader("Content-type", HTTP.guessMimeType(file.getName()));
- out.setHeader("Contents-length", String.valueOf(file.length()));
- if(out.sendHeaders()) {
- val in = new FileInputStream(file);
- out.write(in);
- in.close();
- }
- }
-}
diff --git a/sources/scala/tools/servlet/http/HttpHandler.scala b/sources/scala/tools/servlet/http/HttpHandler.scala
deleted file mode 100644
index 67c9582704..0000000000
--- a/sources/scala/tools/servlet/http/HttpHandler.scala
+++ /dev/null
@@ -1,88 +0,0 @@
-package scala.tools.servlet.http;
-
-import java.io._;
-import java.net._;
-import scala.collection.mutable.HashMap;
-
-class HttpHandler(client: Socket, mapping: PartialFunction[String,String]) extends Thread {
-
- override def run(): Unit ={
-
- try {
- val httpIn = new HttpInputStream (client.getInputStream());
- var httpOut = new HttpOutputStream(client.getOutputStream(), httpIn);
- val processor= getProcessor(httpIn);
- processor.processRequest(httpOut);
- httpOut.flush();
- }
-
- catch {
- case e:IOException => e.printStackTrace();
- }
-
- try {
- client.close ();
- }
-
- catch {
- case e: IOException => e.printStackTrace();
- }
-
- }
-
-
- /* La methode run: on a construit premierement un HttpInputStream dans le
- client Input Stream, ceci nous facilte lire et parser les requetes HTTP*/
-
- def getProcessor(httpIn: HttpInputStream): HttpProcessor = {
- Console.println("HttpHandler.getProcessor");
- var value = 0;
- var infoString = " " ;
- var info:HashMap[String, String] = null;
- var error: HttpProcessor=null;
- var srv:HttpServletPro=null;
- var fil:HttpFile=null;
-
- try{
- httpIn.readRequest ();
- var index = httpIn.getInitialRequest().indexOf("?");
- if(index != -1){
- infoString = httpIn.getInitialRequest().substring(index+1);
- info = HTTP.processing(infoString);
- }
-
- if( mapping.isDefinedAt(httpIn.getPath())) {
- //if (httpIn.getPath().startsWith(HTTP.SERVLET_PREFIX)){
- value = 1;
- srv = new HttpServletPro(httpIn, info, mapping(httpIn.getPath())+"$class");
- }
- else{
- value = 2;
- fil = new HttpFile(httpIn, info);
- }
- }
-
-
- catch {
- case e: HttpException => {
- error=e.toProcessor;
- value=3;
- }
- case ex: Exception => {
- val trace = new StringWriter ();
- ex.printStackTrace(new PrintWriter (trace,true));
- val exept = new HttpException(HTTP.STATUS_INTERNAL_ERROR,"<PRE>"+ trace +"</PRE>");
- value=3;
- error= exept.toProcessor;}
- }
-
- Console.println("value = "+value);
-
- if(value == 1)
- return srv ;
- else if(value == 2)
- return fil;
- else
- return error;
-}
-}
diff --git a/sources/scala/tools/servlet/http/HttpInputStream.scala b/sources/scala/tools/servlet/http/HttpInputStream.scala
deleted file mode 100644
index 49956c1d15..0000000000
--- a/sources/scala/tools/servlet/http/HttpInputStream.scala
+++ /dev/null
@@ -1,145 +0,0 @@
-package scala.tools.servlet.http;
-
-import java.io._;
-import java.net._;
-import java.lang._;
-import scala.collection.mutable.HashMap;
-import java.util.{ NoSuchElementException, StringTokenizer };
-/**
-La classe HttpInputStream fournit un support specialisé pour lire les requêtes HTTP
-*/
-class HttpInputStream(in: InputStream) extends BufferedInputStream(in) {
- var method = "GET" ;
- var queryString = "initialisation" ;
- var path= "index.html";
- var initialRequest =" ";
- var version: double = 0;
- val headers: HashMap[String, String] = new HashMap[String, String]();
-
- def readRequest(): Unit = {
- //System.out.println((HTTP.SERVER_LOCATION));
- val request: String = readLine();
- if (request == null)
- throw new HttpException (HTTP.STATUS_BAD_REQUEST,"Null query");
- val parts = new StringTokenizer(request);
-
- try{
- // ici on va parcourir la requete en cherchant les informations requises
- if (parts.hasMoreTokens ())
- parseMethod (parts.nextToken());
- if (parts.hasMoreTokens ()){
- initialRequest = parts.nextToken();
- parseRequest (initialRequest);
- }
- }
-
- catch{
- case ex:NoSuchElementException => throw new HttpException(HTTP.STATUS_BAD_REQUEST, request);
- }
-
- if (parts.hasMoreTokens ())
- parseVersion (parts.nextToken ());
- else
- version= 0.9;
- if((version >= 1.0)&&(method == HTTP.METHOD_HEAD))
- throw new HttpException (HTTP.STATUS_NOT_ALLOWED, method);
- if(version >= 1.0)
- readHeaders();
-
- }
-
-
- // on recupere grace à cette methode la methode (get, header ou post)demandé
- def parseMethod(method: String ): Unit= method.match {
- case HTTP.METHOD_GET
- | HTTP.METHOD_HEAD
- | HTTP.METHOD_POST => this.method = method;
- case _ =>
- throw new HttpException (HTTP.STATUS_NOT_IMPLEMENTED, method);
- }
-
- /// on recupere grace à cette methode le URI demandé
- def parseRequest(request: String): Unit ={
- if(!request.startsWith("/"))
- throw new HttpException (HTTP.STATUS_BAD_REQUEST,request);
- val queryIdx = request.indexOf('?');
- if (queryIdx == -1){
- path = HTTP.canonicalizePath(request);
- queryString ="";
- }
- else{
- path = HTTP.canonicalizePath (request.substring(0, queryIdx));
- queryString = request.substring(queryIdx + 1);
- }
- }
-
- //la methode suivante parse la version
- def parseVersion(verStr: String) : unit ={
- if(!verStr.startsWith("HTTP/"))
- throw new HttpException (HTTP.STATUS_BAD_REQUEST,verStr);
-
- try{
- version = Float.valueOf (verStr.substring(5)).floatValue ();}
-
- catch {
- case e:NumberFormatException => throw new HttpException(HTTP.STATUS_BAD_REQUEST, verStr);
- case defaul:Exception => System.out.println("sdfew");}
- }
-
- //// la methode suivante lit les headers des requetes,on les lit jusqu a ce qu
- //// on trouve une ligne vide
- def readHeaders (): unit ={
- var header = readLine ();
- while ((header !=null) && !header.equals("")){
- val colonIdx:int = header.indexOf(':');
- if (colonIdx != -1){
- val name = header.substring(0, colonIdx);
- val value = header.substring(colonIdx + 1);
- val _ = headers.update(name.toLowerCase(), value.trim());
- }
- header = readLine ();
- }
- }
-
- def readLine (): String = {
- val line = new StringBuffer();
- var c = read();
- if(c == -1)
- return "error";
- while ((c != -1)&&(c != '\n')&&(c != '\r')){
- line.append( c.asInstanceOf[char] );
- c = read();
- }
- if (c == '\r')
- pos = pos - 1;
- return line.toString();
- }
-
- def getMethod () : String ={
- return method;
- }
-
- def getPath (): String ={
- return path;
- }
-
- def getQueryString (): String ={
- return queryString;}
-
- def getVersion(): double ={
- return version;}
-
- def getHeader(name:String): String ={
- return headers(name.toLowerCase());
- }
-
- def getHeaderNames(): Iterator[String] ={
- return headers.keys;
- }
-
- def getInitialRequest (): String ={
- return initialRequest;
- }
-
-}
-
diff --git a/sources/scala/tools/servlet/http/HttpOutputStream.scala b/sources/scala/tools/servlet/http/HttpOutputStream.scala
deleted file mode 100644
index cc3acda81c..0000000000
--- a/sources/scala/tools/servlet/http/HttpOutputStream.scala
+++ /dev/null
@@ -1,102 +0,0 @@
-package scala.tools.servlet.http;
-
-import java.io._;
-import java.lang._;
-import java.util._;
-import scala.Symbol;
-import scala.xml._;
-/**
-La classe HttpOutputStream fournit un support spécialisé pour écrire les reponses aux requêtes HTTP
-*/
-class HttpOutputStream(out:OutputStream , in: HttpInputStream ) extends BufferedOutputStream(out){
- var code: int = 0;
- var sendHeaders1 : boolean=true;
- var sendBody: boolean= true;
- var headers: Hashtable = new Hashtable ();
- var cookieEnable:boolean = false;
- var currentCookie:ScalaCookiee = _ ;
-
- code = HTTP.STATUS_OKAY;
- setHeader ("server", HTTP.SERVER_INFO);
- setHeader("Date", new Date ().toString());
- sendHeaders1 = (in.getVersion() >= 1.0);
- sendBody = !HTTP.METHOD_HEAD.equals (in.getMethod());
-
- def setCode ( code:int):unit={
- this.code=code;
- }
-
- def setHeader (attr:String , value:String ) :unit ={
- /*
- put(Object key, Object value)
- fait correspondre la clé specifié à la valeur specifié dans la hashtable
- */
- headers.put(attr, value);
- val i =0;
- }
-
-
- def sendHeaders() : boolean={
- if(sendHeaders1) {
- write ("HTTP/1.0" +code + " " + HTTP.getCodeMessage(code)+ "\r\n");
- /* la mehode keys() Retourne une enumeration des clés de cette table de
- hashage */
- write("Date: "+headers.get("Date"));
- headers.remove("Date");
- if(cookieEnable){
- write("\nSet-Cookie:"+currentCookie.getName()+"="+currentCookie.getValue()+"\n");
- }
- val attrs = headers.keys ();/*return Enumeration type*/
- while (attrs.hasMoreElements()){
- val attr = attrs.nextElement().asInstanceOf[String];
- write (attr + ":" + headers.get(attr) + "\r\n");
- }
- write ("\n");
- }
- return sendBody;
- }
-
-
- def write (msg: String ): unit ={
- var b:Array[byte] = msg.getBytes("latin1");
- write (b,0,b.length);
- }
-
- override def write(bytes:Array[scala.Byte],offs:int,len:int):unit = {
- super.write (bytes,offs,len);
- }
-
-
- override def write(i:int):unit ={
- }
-
-
- def write (in: InputStream ):unit={
- //buf le buffer interne dans lequel les données sont enregistrées
- var n = buf.length;
- var length = buf.length;
- n = in.read(buf, count, length - count);
- while (n >= 0){
- count = count + n;
- if (count >= length){
- count =0;
- out.write(buf,count,length);
- }
- n = in.read(buf, count, length - count);
-
- }
- }
-
-
- def setCookie(c : ScalaCookiee):unit={
- cookieEnable= true;
- currentCookie = c;
- }
-
-
- def disableCookie():unit={
- cookieEnable= false;
- currentCookie = null;
- }
-
-}
diff --git a/sources/scala/tools/servlet/http/HttpProcessor.scala b/sources/scala/tools/servlet/http/HttpProcessor.scala
deleted file mode 100644
index 5604fc0908..0000000000
--- a/sources/scala/tools/servlet/http/HttpProcessor.scala
+++ /dev/null
@@ -1,8 +0,0 @@
-package scala.tools.servlet.http ;
-
-/**
-le processing actuel de la requête du client est reporté aux classes qui implemetent le trait HttpProcessor, ce trait decrit la façon avec laquelle la classe Httpd peut appeler le processeur pour repondre à la requête du client.
-*/
- trait HttpProcessor {
- def processRequest(out: HttpOutputStream): Unit ={};
-}
diff --git a/sources/scala/tools/servlet/http/HttpServletPro.scala b/sources/scala/tools/servlet/http/HttpServletPro.scala
deleted file mode 100644
index f61569102f..0000000000
--- a/sources/scala/tools/servlet/http/HttpServletPro.scala
+++ /dev/null
@@ -1,85 +0,0 @@
-package scala.tools.servlet.http;
-
-import java.io._;
-import java.net._;
-import scala.collection.mutable.HashMap;
-
-
-class HttpServletPro(in: HttpInputStream, info: HashMap[String,String], servletClassName: String) with HttpProcessor{
-
- /*
- if(!servlet.exists()){
- throw new HttpException (HTTP.STATUS_NOT_FOUND, "la servlet <TT>"+ servletName + "</TT> n'est pas trouvée ");}
- if (!servlet.isFile())
- throw new HttpException (HTTP.STATUS_FORBIDDEN, servletName );
- */
-
- // assumption: in.getPath() is a string a/b/c, looks up servlet by c
-
- /*
- final def extract():String ={
- val path = in.getPath(); // retourne /servlet/repertoire/servletName
- Console.println("HttpServletPro:path = "+path);
- var repertoireExtract="";
- var repertoireIdx = path.indexOf('/', 1);
- Console.println("HttpServletPro:repIdx = "+repertoireIdx);
- var servletIdx = path.indexOf('/', repertoireIdx+1 );
- Console.println("HttpServletPro:servletIdx = "+servletIdx);
- repertoireExtract = path.substring(repertoireIdx+1,servletIdx );
- Console.println("HttpServletPro:repExtr = "+repertoireExtract);
-
- var servletExtract = path.substring(servletIdx +1 );
- Console.println("HttpServletPro:servletExtract = "+servletExtract);
-
- //var ma = new engine.Mapping();
-
- //var servletRequested = ma.switch(servletExtract);
-
- //val res = ma.switch(servletExtract) + "$class";
- //Console.println("mapping: servletRequested = "+res);
- //res
- "foo$class";
- //servletName = "/".concat(ma.switch(servletRequested));
- //servlet = new File (HTTP.SERVER_LOCATION,HTTP.translateFilename("src"));
- //servlet = new File (servlet,HTTP.translateFilename(repertoireExtract));
- //servlet = new File (servlet,HTTP.translateFilename(servletName.substring(1)));
-
- //return repertoireExtract ;
- }
- */
-
- override def processRequest(out: HttpOutputStream): Unit ={
- out.setHeader("Content-Type", "text/html");
- val sc1:ScalaCookiee = new ScalaCookiee("Server", "test");
- out.setCookie(sc1);
- val x = out.sendHeaders ();
-
- try{
- /*
- val idx = servletName.indexOf('.');
- val s1 = servletName.substring(1,idx);
- val s2 =repertoire.concat(".").concat(s1).concat("$class");
- var servlet1 = Class.forName(s2);
- */
- Console.println("Getting class "+servletClassName);
- val servlet1 = Class.forName( servletClassName );
- var servletInstance = servlet1.newInstance().asInstanceOf[ScalaServlet];
- servletInstance.doGet(out, info);
- }
-
- catch{
- case e: Exception =>
- e.printStackTrace();
- ScalaServlet.showError(out, Status.INTERNAL_ERROR, e.toString());
- /*
- case e: ClassNotFoundException => System.out.println("error:attention le nom de la servlet est incorect");
- case e: InstantiationException => System.out.println("InstantiationException"); e.printStackTrace();
- case e: IllegalAccessException => System.out.println("IllegalAccessException");
- case e: Exception =>
- System.out.println("une erreur inconue dans al aclasse HttpServletPro");
- e.printStackTrace();
- */
- }
-
- }
-}