1  //header of class---------------------------------------------------------------
  2  import java.*;
  3  import java.io.*;
  4  import java.net.*;
  5  import java.util.*;
  6
  7  public class HTTPService0 extends TCPService{
  8      public final static int BUILD=110;
  9  //serve.zdys--------------------------------------------------------------------
 10  public void serve(){
 11      try{
 12          BufferedReader br= new BufferedReader(new InputStreamReader(so.getInputStream()));
 13          String line= br.readLine();
 14          String[] firstline= zServer.toStringArray(line, " ");
 15          do{
 16              line= br.readLine();
 17          }while(!line.equals(""));
 18          DataOutputStream dos= new DataOutputStream(new BufferedOutputStream(so.getOutputStream()));
 19          StringBuffer sb= new StringBuffer();
 20          if(firstline[0].equalsIgnoreCase("GET")){
 21              firstline[1]= (new URLDecoder()).decode(firstline[1]);
 22              if(File.pathSeparator.equals("/")){
 23                  firstline[1]= firstline[1].replace('/', '\\');
 24              }else{
 25                  firstline[1]= firstline[1].replace('\\', '/');
 26              }
 27              File f= new File(arg[3]+ firstline[1]);
 28              sb.append("HTTP/1.1 200 OK\r\n");
 29              String mime= null;
 30              if(firstline[1].lastIndexOf(".")!= -1){
 31                  String ending= firstline[1].substring(firstline[1].lastIndexOf(".")+ 1, firstline[1].length()).toLowerCase();
 32                  mime= (String)((Hashtable)zServer.constants.get("mimetypes")).get(ending);
 33              }
 34              if(mime== null){
 35                  mime= (String)((Hashtable)zServer.constants.get("mimetypes")).get("html");
 36              }
 37              if(f.isDirectory()){
 38                  sb.append("Content-Type: "); sb.append(mime); sb.append("\r\n\r\n");
 39                  dos.writeBytes(sb.toString());
 40                  dos.flush();
 41                  sb= new StringBuffer();
 42                  sb.append("<html><head><title>zServer ");
 43                  sb.append(firstline[1]);
 44                  sb.append("</title></head><body>");
 45                  StringBuffer dirs= new StringBuffer();
 46                  StringBuffer files= new StringBuffer();
 47                  String[] list= Utils.sortStringArray(f.list());
 48                  StringBuffer isactdir;
 49                  for(int i= 0; i< list.length; i++){
 50                      isactdir= new StringBuffer();
 51                      isactdir.append(arg[3]+ firstline[1]+ list[i]+ f.separator);
 52                      if((new File(isactdir.toString())).isDirectory()){
 53                          dirs.append("<a href= \""+ firstline[1]+ list[i]+ "/\">"+ list[i]+ "</a><br>");
 54                      }else{
 55                          files.append("<a href= \""+ firstline[1]+ list[i]+ "\">"+ list[i]+ "</a><br>");
 56                      }
 57                  }
 58                  sb.append("upward directories:<br>");
 59                  StringTokenizer st= new StringTokenizer(firstline[1], "/");
 60                  String temp= "/";
 61                  while(st.hasMoreTokens()){
 62                      sb.append("<a href= \""+ temp+ "\">"+ temp+ "</a><br>");
 63                      temp+= st.nextToken()+ "/";
 64                  }
 65                  sb.append("<br><hr>actual directory:<br><b>"+ firstline[1]+ "</b><br><br><hr>subdirectories:<br>");
 66                  sb.append(dirs.toString());
 67                  sb.append("<br><hr>files:<br>");
 68                  sb.append(files.toString());
 69                  sb.append("</body></html>");
 70                  dos.writeBytes(sb.toString());
 71              }else if(f.exists()){
 72                  sb.append("Content-Type: "); sb.append(mime); sb.append("\r\n\r\n");
 73                  dos.writeBytes(sb.toString());
 74                  dos.flush();
 75                  byte[] data= new byte[1024* 64];
 76                  DataInputStream dis= new DataInputStream(new FileInputStream(f));
 77                  try{
 78                      while(true){
 79                          dis.readFully(data);
 80                          dos.write(data, 0, data.length);
 81                          dos.flush();
 82                      }
 83                  }catch(Exception ex){
 84                      dos.write(data, 0, data.length);
 85                  }
 86              }else{
 87                  sb.append("Content-Type: "); sb.append(mime); sb.append("\r\n\r\n");
 88                  dos.writeBytes(sb.toString());
 89                  dos.flush();
 90                  sb= new StringBuffer();
 91                  sb.append("<html><head><title>zServer ERROR</title></head>"+
 92                      "<body>ERROR file:"+ firstline[1]+ " not found."+ "</body>"+
 93                      "</html>");
 94                  dos.writeBytes(sb.toString());
 95              }
 96          }
 97          dos.flush();
 98          so.close();
 99      }catch(Exception ex){
100          Utils.pr(this, "ERROR in run():"+ ex);
101      }
102  }
103  //end of class------------------------------------------------------------------
104  }