ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/corbaservices/uk/org/iscream/cms/corbaservices/MiniWebServer.java
Revision: 1.1
Committed: Mon Feb 26 21:34:05 2001 UTC (23 years, 2 months ago) by tdb
Branch: MAIN
Log Message:
Build files for the Corba Services manager.
CorbaServices loader, and mini webserver.

File Contents

# User Rev Content
1 tdb 1.1 //---PACKAGE DECLARATION---
2     package uk.ac.ukc.iscream.corbaservices;
3    
4     //---IMPORTS---
5     import java.net.*;
6     import java.io.*;
7     import java.util.*;
8    
9     /**
10     * MiniWebServer
11     *
12     * @author $Author$
13     * @version $Id$
14     */
15     public class MiniWebServer extends Thread {
16    
17     //---FINAL ATTRIBUTES---
18    
19     /**
20     * The current CVS revision of this class
21     */
22     public static final String REVISION = "$Revision: 1.1 $";
23    
24     //---STATIC METHODS---
25    
26     //---CONSTRUCTORS---
27    
28     public MiniWebServer(int port, String okUrlsConfig) {
29     _port = port;
30     _okUrlsConfig = okUrlsConfig;
31     }
32    
33     //---PUBLIC METHODS---
34    
35     public void run() {
36     // carry on forever
37     while(true) {
38     boolean run = true;
39     ServerSocket serverSocket = null;
40     try {
41     serverSocket = new ServerSocket(_port);
42     } catch (IOException e) {
43     run = false;
44     System.out.println(e);
45     e.printStackTrace();
46     }
47     while(run) {
48     try {
49     Socket socket = serverSocket.accept();
50     Handler handler = new Handler(socket);
51     handler.start();
52     } catch (IOException e) {
53     run=false;
54     System.out.println(e);
55     e.printStackTrace();
56     }
57     }
58     }
59     }
60    
61     //---PRIVATE METHODS---
62    
63     private String readUrl(String url) {
64     if(url.startsWith("/")) {
65     url = url.substring(1);
66     }
67     try {
68     File file = new File(url);
69     if(file.exists() && file.canRead()) {
70     String data = "";
71     BufferedReader reader = new BufferedReader(new FileReader(file));
72     while(reader.ready()) {
73     data += reader.readLine();
74     data += "\n";
75     }
76     return data;
77     }
78     else {
79     return null;
80     }
81     } catch (IOException e) {
82     System.out.println(e);
83     e.printStackTrace();
84     return null;
85     }
86     }
87    
88     private boolean okUrl(String url) {
89     readOkUrls();
90     Iterator i = _okUrls.iterator();
91     while(i.hasNext()) {
92     if(url.equals((String)i.next())) {
93     return true;
94     }
95     }
96     return false;
97     }
98    
99     private void readOkUrls() {
100     File file = new File(_okUrlsConfig);
101     long lastMod = file.lastModified();
102     if(lastMod > _okUrlsConfigStamp) {
103     _okUrlsConfigStamp = lastMod;
104     _okUrls = new LinkedList();
105     if(file.exists() && file.canRead()) {
106     try {
107     BufferedReader reader = new BufferedReader(new FileReader(file));
108     while(reader.ready()) {
109     String line = reader.readLine();
110     if(!line.startsWith("#")) {
111     _okUrls.add(line);
112     }
113     }
114     } catch(IOException e) {
115     System.out.println(e);
116     e.printStackTrace();
117     }
118     }
119     }
120     }
121    
122     //---ACCESSOR/MUTATOR METHODS---
123    
124     //---ATTRIBUTES---
125    
126     private int _port;
127     private LinkedList _okUrls;
128     private String _okUrlsConfig;
129     private long _okUrlsConfigStamp = 0;
130    
131     //---STATIC ATTRIBUTES---
132    
133     //---INNER CLASSES---
134    
135     private class Handler extends Thread {
136     public Handler(Socket socket) {
137     _socket = socket;
138     }
139     public void run() {
140     BufferedReader reader = null;
141     PrintWriter writer = null;
142     try {
143     reader = new BufferedReader(new InputStreamReader(_socket.getInputStream()));
144     writer = new PrintWriter(_socket.getOutputStream(), true);
145     String line= "";
146     String url = "";
147     do {
148     line = reader.readLine();
149     if(line.startsWith("GET")) {
150     url = line.substring(4);
151     url = url.substring(0, url.lastIndexOf(' '));
152     }
153     } while(!line.equals(""));
154     if(okUrl(url)) {
155     String data = readUrl(url);
156     if(data != null) {
157     writer.println(data);
158     }
159     else {
160     writer.println("HTTP/1.1 404 Not Found\n");
161     writer.println("404 Not Found");
162     }
163     }
164     else {
165     writer.println("HTTP/1.1 403 Permission Denied\n");
166     writer.println("403 Permission Denied");
167     }
168     } catch(IOException e) {
169     System.out.println(e);
170     e.printStackTrace();
171     }
172     try {
173     reader.close();
174     writer.close();
175     _socket.close();
176     } catch(IOException e) {
177     System.out.println(e);
178     e.printStackTrace();
179     }
180     }
181     private Socket _socket;
182     }
183    
184     }