--- projects/cms/source/server/uk/org/iscream/cms/server/filtermanager/HostInit.java 2003/02/05 16:43:47 1.34 +++ projects/cms/source/server/uk/org/iscream/cms/server/filtermanager/HostInit.java 2003/02/24 20:18:50 1.35 @@ -36,7 +36,7 @@ import java.util.*; * and a reference to a Filter to which it should pass data. * * @author $Author: tdb $ - * @version $Id: HostInit.java,v 1.34 2003/02/05 16:43:47 tdb Exp $ + * @version $Id: HostInit.java,v 1.35 2003/02/24 20:18:50 tdb Exp $ */ class HostInit extends Thread { @@ -45,7 +45,7 @@ class HostInit extends Thread { /** * The current CVS revision of this class */ - public final String REVISION = "$Revision: 1.34 $"; + public final String REVISION = "$Revision: 1.35 $"; //---STATIC METHODS--- @@ -79,78 +79,110 @@ class HostInit extends Thread { // this is our config name String configName = "Host." + _socket.getInetAddress().getHostName().toLowerCase(); try { - // try for STARTCONFIG - getInBound("STARTCONFIG"); - _socketOut.println("OK"); - - // try for LASTMODIFIED - getInBound("LASTMODIFIED"); - _socketOut.println(cp.getLastModified(configName)); - - // try for FILELIST - getInBound("FILELIST"); - _socketOut.println(cp.getFileList(configName)); - - // try for FQDN - getInBound("FQDN"); - _socketOut.println(_socket.getInetAddress().getHostName().toLowerCase()); - - // get properties - String reqProperty = getInBound(); - while(!reqProperty.equals("ENDCONFIG")) { - // get the property - try { - String returnedProperty = cp.getProperty(configName, "Host."+reqProperty); - _socketOut.println(returnedProperty); - } catch (PropertyNotFoundException e) { + // look for a command: + // STARTCONFIG - to get a configuration + // CHECKCONFIG - to check a configuration + // END - to finish + String cmd = getInBound(); + while(!cmd.equals("END")) { + if(cmd.equals("STARTCONFIG")) { + // respond to STARTCONFIG + _socketOut.println("OK"); + + // try for LASTMODIFIED + getInBound("LASTMODIFIED"); + _socketOut.println(cp.getLastModified(configName)); + + // try for FILELIST + getInBound("FILELIST"); + _socketOut.println(cp.getFileList(configName)); + + // try for FQDN + getInBound("FQDN"); + _socketOut.println(_socket.getInetAddress().getHostName().toLowerCase()); + + // get properties + String reqProperty = getInBound(); + while(!reqProperty.equals("ENDCONFIG")) { + // get the property + try { + String returnedProperty = cp.getProperty(configName, "Host."+reqProperty); + _socketOut.println(returnedProperty); + } catch (PropertyNotFoundException e) { + _socketOut.println("ERROR"); + } + // get the next request + reqProperty = _socketIn.readLine(); + } + _logger.write(toString(), Logger.SYSMSG, "configured host"); + _socketOut.println("OK"); + + // get filter reference + getInBound("FILTER"); + // send info + String filterList = cp.getProperty(configName, "Host.filter"); + FilterInfo filterInfoRef = null; + String filter = null; + StringTokenizer st = new StringTokenizer(filterList, ";"); + while (filterInfoRef==null && st.hasMoreTokens()) { + filter = st.nextToken(); + _logger.write(toString(), Logger.DEBUG, " looking for filter- " + filter); + try { + filterInfoRef = FilterInfoHelper.narrow(ReferenceManager.getInstance().getCORBARef("iscream.FilterInfo\\." + filter)); + } catch (ComponentCORBAException e) { + _logger.write(toString(), Logger.DEBUG, " unable to find filter- " + filter); + } + } + + // hopefully we found a filter + if(filterInfoRef != null) { + _logger.write(toString(), Logger.DEBUG, " found filter- " + filter); + try { + // tell the host about it... + _socketOut.println(filterInfoRef.getHostName() + ";" + + filterInfoRef.getUDPPort()); + } + catch(org.omg.CORBA.COMM_FAILURE e) { + // failed to talk to filter, lets signal an error + _socketOut.println("ERROR"); + throw new IOException("error communicating with filter - " + e); + } + } + else { + // ...or throw a wobbly (and tell the host!) + _socketOut.println("ERROR"); + throw new IOException("unable to find filter for host"); + } + + } + else if(cmd.equals("CHECKCONFIG")) { + // respond to CHECKCONFIG + _socketOut.println("OK"); + + // try for {filelist} + String filelist = getInBound(); + _socketOut.println("OK"); + + // try for {lastModified} + String lastModified = getInBound(); + // check to see if a config update has happen + boolean newConfig = _configManager.isModified(filelist, Long.parseLong(lastModified)); + if(newConfig) { + // new config ! + _socketOut.println("ERROR"); + } + else { + // nothing has changed + _socketOut.println("OK"); + } + } + else { _socketOut.println("ERROR"); } - // get the next request - reqProperty = _socketIn.readLine(); + // get the next command + cmd = getInBound(); } - _logger.write(toString(), Logger.SYSMSG, "configured host"); - _socketOut.println("OK"); - - // get filter reference - getInBound("FILTER"); - // send info - String filterList = cp.getProperty(configName, "Host.filter"); - FilterInfo filterInfoRef = null; - String filter = null; - StringTokenizer st = new StringTokenizer(filterList, ";"); - while (filterInfoRef==null && st.hasMoreTokens()) { - filter = st.nextToken(); - _logger.write(toString(), Logger.DEBUG, " looking for filter- " + filter); - try { - filterInfoRef = FilterInfoHelper.narrow(ReferenceManager.getInstance().getCORBARef("iscream.FilterInfo\\." + filter)); - } catch (ComponentCORBAException e) { - _logger.write(toString(), Logger.DEBUG, " unable to find filter- " + filter); - } - } - - // hopefully we found a filter - if(filterInfoRef != null) { - _logger.write(toString(), Logger.DEBUG, " found filter- " + filter); - try { - // tell the host about it... - _socketOut.println(filterInfoRef.getHostName() + ";" - + filterInfoRef.getUDPPort() + ";" - + filterInfoRef.getTCPPort()); - } - catch(org.omg.CORBA.COMM_FAILURE e) { - // failed to talk to filter, lets signal an error - _socketOut.println("ERROR"); - throw new IOException("error communicating with filter - " + e); - } - } - else { - // ...or throw a wobbly (and tell the host!) - _socketOut.println("ERROR"); - throw new IOException("unable to find filter for host"); - } - - // confirm ok with END - getInBound("END"); + // respond to END _socketOut.println("OK"); } catch (Exception e) {