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 }