ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/host/java/Config.java
Revision: 1.10
Committed: Tue May 21 16:47:12 2002 UTC (22 years, 6 months ago) by tdb
Branch: MAIN
Changes since 1.9: +3 -2 lines
Log Message:
Added URL to GPL headers.

File Contents

# User Rev Content
1 tdb 1.9 /*
2     * i-scream central monitoring system
3 tdb 1.10 * http://www.i-scream.org.uk
4 tdb 1.9 * Copyright (C) 2000-2002 i-scream
5     *
6     * This program is free software; you can redistribute it and/or
7     * modify it under the terms of the GNU General Public License
8     * as published by the Free Software Foundation; either version 2
9     * of the License, or (at your option) any later version.
10     *
11     * This program is distributed in the hope that it will be useful,
12     * but WITHOUT ANY WARRANTY; without even the implied warranty of
13     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14     * GNU General Public License for more details.
15     *
16     * You should have received a copy of the GNU General Public License
17     * along with this program; if not, write to the Free Software
18     * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19     */
20    
21 ab11 1.2 //---PACKAGE DECLARATION---
22    
23     //---IMPORTS---
24    
25 ab11 1.1 import java.net.*;
26     import java.util.*;
27     import java.io.*;
28    
29 ab11 1.2 /**
30     * Configurator object for the JavaHost
31 tdb 1.5 * Will connect to the filter manager and collect its specific
32 ab11 1.2 * configuration
33     *
34 tdb 1.10 * @author $Author: tdb $
35     * @version $Id: Config.java,v 1.9 2002/05/18 18:15:57 tdb Exp $
36 ab11 1.2 */
37 ab11 1.1 class Config {
38    
39 ab11 1.2 //---FINAL ATTRIBUTES---
40    
41     //---STATIC METHODS---
42    
43     //---CONSTRUCTORS---
44    
45     public Config( String serverName, int serverPort ){
46     // takes in the master config settings and creates a connection with
47     // this computer, and downloads all the values listed in config.values.txt
48     // which should be in the local directory
49    
50     // read in from the file.
51     try {
52 ab11 1.3 System.out.println("Reading Config file");
53 ab11 1.2 BufferedReader inFile = new BufferedReader(new FileReader("config.values.txt"));
54     aList = new ArrayList();
55     numProperties = 0;
56     String tmpIn = inFile.readLine();
57     while ( tmpIn != null ){
58 ab11 1.3 aList.add(numProperties, tmpIn);
59 ab11 1.2 numProperties++;
60     tmpIn = inFile.readLine();
61     }
62 ab11 1.3 System.out.println("Added "+numProperties+" properties");
63 ab11 1.2 }
64     catch ( FileNotFoundException e ){
65     // do something
66 ab11 1.3 System.out.println("Config file not found");
67 ab11 1.2 }
68     catch ( IOException e ){
69     // do something
70     }
71    
72 ab11 1.3 myProperties = new HashMap();
73     configChanged = false;
74    
75 ab11 1.4 // time in seconds before first retry
76     filterManagerRetryTime = 10;
77 ab11 1.3
78 ab11 1.2 // do the funky jibble
79     connect(serverName, serverPort);
80     }
81    
82     //---PUBLIC METHODS---
83    
84     public InetAddress getFilterName(){
85 tdb 1.6 // will return the most recent IP address (if it is dynamic for whatever reason)
86 ab11 1.2 try {
87     return InetAddress.getByName(filterName);
88     }
89     catch ( UnknownHostException e ){
90     // do something
91     return null;
92     }
93    
94     }
95    
96     /**
97     * Used to retrieve the port to send UDP packets to on the filter
98     *
99 tdb 1.6 * @return an integer corresponding to the UDP port of the filter
100 ab11 1.2 */
101     public int getFilterUDPPort(){
102    
103     return filterUDPPort;
104     }
105    
106     /**
107     * Used to retrieve the port to send TCP heartbeats to on the filter
108     *
109 tdb 1.6 * @return an integer corresponding to the TCP of the filter
110 ab11 1.2 */
111     public int getFilterTCPPort(){
112    
113     return filterTCPPort;
114     }
115    
116     /**
117     * Used to get the hostname of the filter we are to talk to.
118     *
119     * @return a string representing the hostname of the filter
120     */
121     public String getProperty( String name ){
122    
123     if ( myProperties.containsKey(name) ){
124     // its in there, may return ERROR
125     return (String) myProperties.get(name);
126     }
127     else
128     {
129     // can't have been in the config.values.txt file!
130     return "ERROR";
131     }
132     }
133    
134    
135     //---PRIVATE METHODS---
136    
137     private void connect( String serverName, int serverPort ){
138     Socket mySocket;
139 ab11 1.3 configChanged = false;
140    
141 tdb 1.5 System.out.println("Establishing connection with filter manager");
142 ab11 1.2
143     // might throw a UnknownHostException
144     try {
145 ab11 1.3 mySocket = new Socket( serverName, serverPort );
146     // ok we have our socket connected ok. grab their input and output streams
147 ab11 1.2 socketIn = new BufferedReader(new InputStreamReader(mySocket.getInputStream()));
148     socketOut = new PrintWriter(mySocket.getOutputStream());
149 ab11 1.3
150     if (sendCommand("STARTCONFIG").equals("OK")){
151 ab11 1.2 // everything is fine
152 ab11 1.3 // sendCommand("LASTMODIFIED");
153     lastModified = sendCommand("LASTMODIFIED");
154 ab11 1.8
155     fileList = sendCommand("FILELIST");
156 ab11 1.2
157 ab11 1.8 fQDN = sendCommand("FQDN");
158 ab11 1.2 // get all the properties
159 ab11 1.3 if ( numProperties > 0 ){
160     // sendCommand("CONFIG");
161     for ( int i = 0; i < numProperties; i++ ){
162     String property = (String) aList.get(i);
163     myProperties.put(property, sendCommand(property));
164     }
165 ab11 1.2 }
166    
167     sendCommand("ENDCONFIG");
168     String filter_data = sendCommand("FILTER");
169     StringTokenizer tok = new StringTokenizer(filter_data,";");
170     filterName = tok.nextToken();
171     filterUDPPort = Integer.parseInt(tok.nextToken());
172     filterTCPPort = Integer.parseInt(tok.nextToken());
173 ab11 1.4
174 ab11 1.2 sendCommand("END");
175 ab11 1.3
176 ab11 1.2 }
177 ab11 1.3
178 ab11 1.2
179     // close the socket
180     mySocket.close();
181 tdb 1.5 System.out.println("Completed communication with filter manager");
182 ab11 1.2
183     }
184     catch ( UnknownHostException e ){
185 ab11 1.3 // what to do
186     System.out.println("Host not found");
187 ab11 1.2 }
188     catch ( IOException e ){
189     // what to do
190 ab11 1.3 System.out.println("Unable to read from socket, might not be open");
191 ab11 1.4 System.out.println("Retrying in "+filterManagerRetryTime+" seconds");
192     configChanged = true;
193     try {
194     Thread.sleep(filterManagerRetryTime*1000);
195     }
196     catch( InterruptedException f ){
197     System.out.println("Sleep interrupted");
198     }
199     filterManagerRetryTime = filterManagerRetryTime * 2;
200     // warning this WILL cause a stack overflow after a while..
201     // need to fix it.
202     connect(serverName, serverPort);
203 ab11 1.2 }
204    
205     } // connect
206    
207    
208 ab11 1.3 public void sendHeartBeat(){
209    
210     Socket mySocket;
211     try {
212    
213     mySocket = new Socket( filterName, filterTCPPort );
214     // ok we have our socket connected ok. grab their input and output streams
215     socketIn = new BufferedReader(new InputStreamReader(mySocket.getInputStream()));
216     socketOut = new PrintWriter(mySocket.getOutputStream());
217    
218    
219     if ( sendCommand("HEARTBEAT").equals("OK") ){
220     if ( sendCommand("CONFIG").equals("OK") ){
221     sendCommand(fileList);
222     if ( sendCommand(lastModified).equals("ERROR") ){
223     // config has changed
224     configChanged = true;
225     }
226     sendCommand("ENDHEARTBEAT");
227     }
228     }
229     }
230     catch ( UnknownHostException e ){
231     // what to do
232     System.out.println("Host not found");
233     }
234     catch ( IOException e ){
235     // what to do
236     System.out.println("Unable to read from socket, might not be open");
237 ab11 1.4 System.out.println("Re-establishing contact with filter manager");
238     configChanged = true;
239 ab11 1.3 }
240     }
241    
242 ab11 1.2 private String sendCommand(String command){
243    
244 ab11 1.3 // System.out.println("Writing command: "+command);
245 ab11 1.2 socketOut.println(command);
246 ab11 1.3 socketOut.flush();
247 ab11 1.2 try {
248 ab11 1.3 String response = socketIn.readLine();
249     // System.out.println("Got: "+response);
250     return response;
251 ab11 1.2 }
252     catch ( IOException e ){
253     // something went wrong
254 ab11 1.3 System.out.println("Error recieving response");
255 ab11 1.2 return "ERROR";
256     }
257     }
258    
259     //---ACCESSOR/MUTATOR METHODS---
260    
261 ab11 1.3 public boolean reloadConfig(){
262     return configChanged;
263     }
264    
265 ab11 1.2 //---ATTRIBUTES---
266    
267 ab11 1.3 private boolean configChanged;
268 ab11 1.2 private String lastModified;
269 ab11 1.3 private String fileList;
270 ab11 1.8 private String fQDN;
271 ab11 1.2 private int numProperties;
272 ab11 1.3 private HashMap myProperties;
273 ab11 1.2 private String filterName;
274     private int filterUDPPort;
275     private int filterTCPPort;
276     private ArrayList aList;
277     private BufferedReader socketIn;
278     private PrintWriter socketOut;
279 ab11 1.4 private int filterManagerRetryTime;
280 ab11 1.2
281    
282    
283     //---STATIC ATTRIBUTES---
284 ab11 1.1
285 tdb 1.7 } // class