ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/server/uk/org/iscream/cms/server/filtermanager/HostInit.java
Revision: 1.19
Committed: Wed Feb 28 10:36:05 2001 UTC (23 years, 2 months ago) by tdb
Branch: MAIN
Changes since 1.18: +3 -3 lines
Log Message:
That was such a dumb mistake. I should learn not to copy and paste from other
code :)

File Contents

# User Rev Content
1 tdb 1.1 //---PACKAGE DECLARATION---
2 tdb 1.9 package uk.ac.ukc.iscream.filtermanager;
3 tdb 1.1
4     //---IMPORTS---
5     import uk.ac.ukc.iscream.core.*;
6 tdb 1.7 import uk.ac.ukc.iscream.filter.*;
7 tdb 1.11 import uk.ac.ukc.iscream.util.*;
8 tdb 1.14 import uk.ac.ukc.iscream.componentmanager.*;
9 tdb 1.18 import java.net.*;
10 tdb 1.1 import java.io.*;
11    
12     /**
13 tdb 1.11 * Handles setting up a host.
14 ajm 1.12 * This class provides a host with appropriate configuration
15     * and a reference to a Filter to which it should pass data.
16 tdb 1.1 *
17 tdb 1.15 * @author $Author: tdb1 $
18 tdb 1.19 * @version $Id: HostInit.java,v 1.18 2001/02/28 10:27:54 tdb1 Exp $
19 tdb 1.1 */
20     class HostInit extends Thread {
21    
22     //---FINAL ATTRIBUTES---
23    
24     /**
25     * The current CVS revision of this class
26     */
27 tdb 1.19 public final String REVISION = "$Revision: 1.18 $";
28 tdb 1.1
29     //---STATIC METHODS---
30    
31     //---CONSTRUCTORS---
32    
33 tdb 1.15 /**
34     * Construct a new HostInit.
35     *
36     * @param socket The socket to which the host is connected
37     */
38 tdb 1.11 public HostInit(Socket socket) throws IOException {
39 tdb 1.1 _socket = socket;
40 tdb 1.15 // setup reader & writer
41 tdb 1.1 _socketIn = new BufferedReader(new InputStreamReader(_socket.getInputStream()));
42 tdb 1.16 _socketOut = new PrintWriter(_socket.getOutputStream(), true);
43 tdb 1.11 _logger.write(toString(), Logger.SYSINIT, "created");
44 tdb 1.1 }
45    
46     //---PUBLIC METHODS---
47    
48 tdb 1.15 /**
49     * Main method in this class, which handles communicating with
50     * the host to determine it's setup.
51     */
52 tdb 1.1 public void run() {
53     try {
54     String inBound = _socketIn.readLine();
55     if (!inBound.equals("STARTCONFIG")) {
56     _socketOut.println("ERROR");
57 tdb 1.7 throw new IOException("protocol error - expected:STARTCONFIG got:" + inBound);
58 tdb 1.1 }
59    
60 ajm 1.8 Configuration myConfig = _configManager.getConfiguration("Host." + _socket.getInetAddress().getHostName().toLowerCase());
61 tdb 1.1 if (myConfig == null) {
62     _socketOut.println("ERROR");
63 tdb 1.7 throw new IOException("error in host configuration");
64 tdb 1.1 } else {
65     _socketOut.println("OK");
66    
67 tdb 1.2 // get lastmodified
68     inBound = _socketIn.readLine();
69 tdb 1.4 if(!inBound.equals("LASTMODIFIED")) {
70     // protocol error
71 tdb 1.2 _socketOut.println("ERROR");
72 tdb 1.7 throw new IOException("protocol error - expected:LASTMODIFIED got:" + inBound);
73 tdb 1.4 }
74     else {
75     // send info
76     _socketOut.println(myConfig.getLastModified());
77 tdb 1.2 }
78    
79 tdb 1.7 // get config fileList
80     inBound = _socketIn.readLine();
81     if(!inBound.equals("FILELIST")) {
82     // protocol error
83     _socketOut.println("ERROR");
84     throw new IOException("protocol error - expected:FILELIST got:" + inBound);
85     }
86     else {
87     // send info
88     _socketOut.println(myConfig.getFileList());
89     }
90 tdb 1.18
91     // send the FQDN to the host
92     inBound = _socketIn.readLine();
93     if(!inBound.equals("FQDN")) {
94     // protocol error
95     _socketOut.println("ERROR");
96     throw new IOException("protocol error - expected:FQDN got:" + inBound);
97     }
98     else {
99     try {
100     // try to send the fqdn to the host
101 tdb 1.19 _socketOut.println(_socket.getInetAddress().getHostName());
102 tdb 1.18 }
103     catch(UnknownHostException e) {
104     // we failed for some reason
105     _socketOut.println("ERROR");
106     }
107     }
108    
109 tdb 1.2 // get properties
110 tdb 1.1 inBound = _socketIn.readLine();
111     while(!inBound.equals("ENDCONFIG")) {
112    
113     // get the property
114     try {
115 tdb 1.10 String returnedProperty = myConfig.getProperty("Host."+inBound);
116 tdb 1.1
117     _socketOut.println(returnedProperty);
118    
119     } catch (org.omg.CORBA.MARSHAL e) {
120     _socketOut.println("ERROR");
121     }
122     inBound = _socketIn.readLine();
123     }
124 tdb 1.11 _logger.write(toString(), Logger.SYSMSG, "configured host");
125 tdb 1.1 _socketOut.println("OK");
126 tdb 1.7
127     // get filter reference
128     inBound = _socketIn.readLine();
129     if(!inBound.equals("FILTER")) {
130     // protocol error
131     _socketOut.println("ERROR");
132     throw new IOException("protocol error - expected:FILTER got:" + inBound);
133     }
134     else {
135     // send info
136     String parentFilter = myConfig.getProperty("Host.filter");
137 tdb 1.11 _logger.write(toString(), Logger.DEBUG, " looking for parent - " + parentFilter);
138     Filter filter = FilterHelper.narrow(ReferenceManager.getInstance().getCORBARef("iscream.Filter." + parentFilter));
139 tdb 1.7 _socketOut.println(filter.getHostName() + ";"
140     + filter.getUDPPort() + ";"
141     + filter.getTCPPort());
142     }
143    
144     // confirm that all is ok
145     inBound = _socketIn.readLine();
146     if(!inBound.equals("END")) {
147     // protocol error
148     _socketOut.println("ERROR");
149     throw new IOException("protocol error - expected:END got:" + inBound);
150     }
151     else {
152     // send ok
153     _socketOut.println("OK");
154     }
155    
156 tdb 1.1 }
157    
158     } catch (Exception e) {
159 tdb 1.17 _logger.write(toString(), Logger.ERROR, "ERROR - " + e);
160 tdb 1.1 }
161    
162     _socketOut.flush();
163     // Disconnect streams & socket
164     try {
165     _socketIn.close();
166     _socketOut.close();
167     _socket.close();
168     } catch (IOException e) {
169 tdb 1.11 _logger.write(toString(), Logger.ERROR, "exception on socket close");
170 tdb 1.1 }
171 tdb 1.11 _logger.write(toString(), Logger.SYSMSG, "finished");
172 tdb 1.1 }
173    
174     /**
175     * Overrides the {@link java.lang.Object#toString() Object.toString()}
176     * method to provide clean logging (every class should have this).
177     *
178 ajm 1.12 * This uses the uk.ac.ukc.iscream.util.NameFormat class
179     * to format the toString()
180     *
181 tdb 1.1 * @return the name of this class and its CVS revision
182     */
183     public String toString() {
184 ajm 1.12 return FormatName.getName(
185     _name,
186 ajm 1.13 getClass().getName(),
187 ajm 1.12 REVISION);
188 tdb 1.1 }
189    
190     //---PRIVATE METHODS---
191    
192     //---ACCESSOR/MUTATOR METHODS---
193    
194     //---ATTRIBUTES---
195    
196 tdb 1.11 /**
197 ajm 1.12 * This holds a reference to the
198     * system logger that is being used.
199 tdb 1.11 */
200 ajm 1.12 private Logger _logger = ReferenceManager.getInstance().getLogger();
201 tdb 1.11
202     /**
203     * A reference to the Configuration Manager the system is using
204     */
205 ajm 1.12 private ConfigurationManager _configManager = ReferenceManager.getInstance().getCM();
206    
207     /**
208     * This is the friendly identifier of the
209     * component this class is running in.
210     * eg, a Filter may be called "filter1",
211     * If this class does not have an owning
212     * component, a name from the configuration
213     * can be placed here. This name could also
214     * be changed to null for utility classes.
215     */
216     private String _name = FilterManager.NAME;
217    
218     /**
219     * The socket this class uses
220     */
221     private Socket _socket;
222    
223     /**
224     * Used for the input stream of this socket
225     */
226     private BufferedReader _socketIn;
227 tdb 1.11
228 ajm 1.12 /**
229     * Used for the output stream of this socket
230     */
231     private PrintWriter _socketOut;
232 tdb 1.11
233 tdb 1.1 //---STATIC ATTRIBUTES---
234    
235     }