diff options
Diffstat (limited to 'java/netsvcs')
21 files changed, 0 insertions, 3316 deletions
diff --git a/java/netsvcs/Logger/DefaultLMR.java b/java/netsvcs/Logger/DefaultLMR.java deleted file mode 100644 index 19e319de015..00000000000 --- a/java/netsvcs/Logger/DefaultLMR.java +++ /dev/null @@ -1,36 +0,0 @@ -/************************************************* - * - * = PACKAGE - * netsvcs.Logger - * - * = FILENAME - * DefaultLMR.java - * - * - *@author Everett Anderson - * - *************************************************/ -package netsvcs.Logger; - -import java.io.*; - -/** - * - * <p><h2>DESCRIPTION</h2> - * - * <blockquote> - * The LogMessageReceiver removes the code that handles a log message from - * the logging service acceptor. The DefaultLMR simply calls the LogRecord's - * print method. - * - * @see netsvcs.Logger.ServerLoggingAcceptor - * @see netsvcs.Logger.LogRecord - */ -class DefaultLMR implements LogMessageReceiver -{ - public void logRecord (String hostname, - LogRecord record) - { - record.print(hostname, true, System.err); - } -} diff --git a/java/netsvcs/Logger/LogMessageReceiver.java b/java/netsvcs/Logger/LogMessageReceiver.java deleted file mode 100644 index c001e06f2bd..00000000000 --- a/java/netsvcs/Logger/LogMessageReceiver.java +++ /dev/null @@ -1,33 +0,0 @@ -/************************************************* - * - * = PACKAGE - * netsvcs.Logger - * - * = FILENAME - * LogMessageReceiver.java - * - *@author Everett Anderson - * - *************************************************/ -package netsvcs.Logger; - -import java.io.*; - -/** - * - * <p><h2>DESCRIPTION</h2> - * - * <blockquote> - * The LogMessageReceiver removes the code that handles a log message from - * the logging service acceptor. The DefaultLMR simply calls the LogRecord's - * print method. Other implementations of this interface can be built and - * given to the ServerLoggingAcceptor to change the result. - * - * @see netsvcs.Logger.ServerLoggingAcceptor - * @see netsvcs.Logger.LogRecord - */ -public interface LogMessageReceiver -{ - public void logRecord (String hostname, - LogRecord record); -}; diff --git a/java/netsvcs/Logger/LogRecord.java b/java/netsvcs/Logger/LogRecord.java deleted file mode 100644 index 0043c040f74..00000000000 --- a/java/netsvcs/Logger/LogRecord.java +++ /dev/null @@ -1,188 +0,0 @@ -/************************************************* - * - * = PACKAGE - * netsvcs.Logger - * - * = FILENAME - * LogRecord.java - * - *@author Chris Cleeland, Everett Anderson - * - *************************************************/ -package netsvcs.Logger; - -import java.util.Date; -import java.io.DataOutputStream; -import java.io.DataInputStream; -import java.io.PrintStream; -import java.io.IOException; -import JACE.OS.*; - -/** - * - * <p><h2>DESCRIPTION</h2> - * - * <blockquote> - * Communicates logging information. Compatible with the C++ ACE - * ACE_Log_Record class. - * - */ -public class LogRecord -{ - final public int MAXLOGMSGLEN = 4 * 1024; - - private int type_; - private int length_; - private long msec_; - private int pid_; - private byte[] msgData_; - private final static int numIntMembers = 5; - private final static int sizeofIntInBytes = 4; - - /** - * Create a default instance. - */ - public LogRecord() - { - type(0); - timeStamp((int)new Date().getTime()); - length(0); - pid(0); - } - - /** - * Create a LogRecord. This is the designated initializer. - * @param priority a numeric specification of the priority (ascending) - * @param milliseconds time attached to the log entry in Unix <pre>time_t</pre> format - * @param pid the process ID; not currently used - */ - public LogRecord(int priority, - long milliseconds, - int pid) - { - type(priority); - timeStamp(milliseconds); - length(0); - pid(pid); - } - - /** - * Conversion to string. Only includes the <pre>msgData_</pre> member. - */ - public String toString() - { - return new String(msgData_); - } - - /** - * Place a textual representation of the record on a PrintStream. - * @param hostname name of the host generating this record - * @param verbose if <b>true</b>, print information in the form, (give example) - * @param ps A PrintStream instance to which the output should go. - * @see PrintStream,String - */ - public void print(String hostname, - boolean verbose, - PrintStream ps) - { - String toprint; - if (verbose) - { - Date now = new Date(this.timeStamp()); - - /* 01234567890123456789012345 */ - /* Wed Oct 18 14:25:36 1989n0 */ - toprint = now.toString().substring(4) + "@" - + hostname + "@" + pid_ + "@" + type_ + "@" - + this.toString(); - } - else - { - toprint = this.toString(); - } - ps.println(toprint); - } - - /** - * Streaming methods - */ - public void streamInFrom(DataInputStream dis) throws IOException - { - // Order here must match layout order in the C++ class. - // This, of course, is VERY fragile, and ought not be used as - // a model for anything except how NOT to do anything. - length(dis.readInt()); - type(dis.readInt()); - this.timeStamp((long)dis.readInt() * 1000); - - // Skip smaller time resolution info since we're lucky if Java's - // timer can handle more than millisecond precision, anyway - dis.skipBytes(4); - - pid(dis.readInt()); - - // Does readFully() allocate space for the buffer? Either - // way, we won't have memory leaks :-) - int dataLength = (int) (length_ - numIntMembers * sizeofIntInBytes); - - msgData_ = new byte[dataLength]; - dis.readFully(msgData_, 0, dataLength); - } - - public void streamOutTo(DataOutputStream dos) throws IOException - { - dos.writeInt(length()); - dos.writeInt(type()); - dos.writeInt((int)(this.msec_ / 1000)); - dos.writeInt(0); - dos.writeInt(pid()); - - dos.write(msgData_); - } - - /** - * Accessor methods - */ - public int type() { return type_; } - public void type(int t) { type_ = t; } - - public int length() { return length_; } - public void length(int l) { length_ = l; } - private void setLen(int msgLen) - { length(msgLen + numIntMembers * sizeofIntInBytes); } - - public long timeStamp() { return this.msec_; } - public void timeStamp(long msec){ this.msec_ = msec; } - - public int pid() { return pid_; } - public void pid(int p) { pid_ = p; } - - public byte[] msgData() { return msgData_; } - public void msgData(byte[] m) - { - int size = m.length; - - if (size > MAXLOGMSGLEN) - size = MAXLOGMSGLEN; - - this.msgData_ = new byte[size]; - - System.arraycopy(m, 0, msgData_, 0, size); - - setLen(size); - } - - public void msgData(String m) - { - byte temp[] = m.getBytes(); - if (temp.length > MAXLOGMSGLEN) { - this.msgData_ = new byte[MAXLOGMSGLEN]; - - System.arraycopy(temp, 0, msgData_, 0, MAXLOGMSGLEN); - } else - this.msgData_ = temp; - - setLen(msgData_.length); - } -}; - diff --git a/java/netsvcs/Logger/Makefile b/java/netsvcs/Logger/Makefile deleted file mode 100644 index a15f673eba0..00000000000 --- a/java/netsvcs/Logger/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -# $Id$ - -.SUFFIXES: .java .class - -JACE_WRAPPER = $(ACE_ROOT)/java - -all: - javac -d ${JACE_WRAPPER}/classes $(files) -doc: - javadoc -d ${JACE_WRAPPER}/doc $(files) $(packages) - -files = LogMessageReceiver.java \ - DefaultLMR.java \ - LogRecord.java \ - ServerLoggingAcceptor.java \ - ServerLoggingHandler.java - -packages = netsvcs \ - netsvcs.Logger - -realclean: - /bin/rm -rf ${JACE_WRAPPER}/classes/netsvcs/Logger - diff --git a/java/netsvcs/Logger/ServerLoggingAcceptor.java b/java/netsvcs/Logger/ServerLoggingAcceptor.java deleted file mode 100644 index d5d4ae5220d..00000000000 --- a/java/netsvcs/Logger/ServerLoggingAcceptor.java +++ /dev/null @@ -1,171 +0,0 @@ -/************************************************* - * - * = PACKAGE - * netsvcs.Logger - * - * = FILENAME - * ServerLoggingAcceptor.java - * - *@author Chris Cleeland, Everett Anderson - * - *************************************************/ -package netsvcs.Logger; - -import JACE.SOCK_SAP.*; -import JACE.Connection.*; -import JACE.OS.*; -import java.io.*; -import java.net.*; -import JACE.Misc.*; - -/** - * - * <p><h2>DESCRIPTION</h2> - * - * <blockquote> - * Acceptor: Listens on a specified port and launches ServerLoggingHandlers - * in response to requests. A LogMessageReceiver can be specified on the - * command line to change the way the logging service processes messages. - * - * @see netsvcs.Logger.ServerLoggingHandler, netsvcs.Logger.LogMessageReceiver - */ -public class ServerLoggingAcceptor extends Acceptor implements Runnable -{ - /** Main function to bootstrap the process - * - * Command line arguments: - * - * -p <port> Select a port for listening for requests - * -r <class name> Specify a LogMessageReceiver (make sure it's a full class name) - * - */ - public static void main (String [] args) - { - ServerLoggingAcceptor sla = new ServerLoggingAcceptor(); - - sla.init(args); - } - - /** - * Receives the command line and launches its own thread - */ - public int init (String [] args) - { - this.parseArgs(args); - - // If the user didn't specify a LogMessageReceiver, use the default - // (which just calls a print method on LogMessage) - if (this.receiver_ == null) - this.receiver_ = new DefaultLMR(); - - new Thread (this).start(); - return 0; - } - - /** - * Specify what LogMessageReceiver to use - */ - public void setLMR(LogMessageReceiver receiver) - { - this.receiver_ = receiver; - } - - /** - * Accessor for the LogMessageReceiver - */ - public LogMessageReceiver getLMR () - { - return this.receiver_; - } - - /** - * Create a new ServerLoggingHandler - */ - protected SvcHandler makeSvcHandler () - throws InstantiationException, IllegalAccessException - { - return new netsvcs.Logger.ServerLoggingHandler (this.receiver_); - } - - /** - * Run forever accepting new connections - */ - public void run () - { - try { - - this.open (this.port_); - while (true) - this.accept(); - - } catch (SocketException e) - { - ACE.ERROR ("Socket Exception: " + e); - } - catch (InstantiationException e) - { - ACE.ERROR (e); - } - catch (IllegalAccessException e) - { - ACE.ERROR (e); - } - catch (IOException e) - { - ACE.ERROR (e); - } - - ACE.ERROR("ServerLoggingAcceptor has exited"); - } - - /** - * Process the command line - */ - protected void parseArgs (String args[]) - { - String s; - GetOpt opt = new GetOpt (args, "p:r:"); - for (int c; (c = opt.next ()) != -1; ) - { - switch (c) - { - case 'p': - s = opt.optarg (); - this.port_ = (new Integer (s)).intValue (); - break; - case 'r': - // Load the LMR with the given name - s = new String(opt.optarg ()); - Class LMRfactory; - try { - LMRfactory = Class.forName(s); - - receiver_ = (LogMessageReceiver)LMRfactory.newInstance(); - - } catch (ClassNotFoundException e) { - ACE.ERROR("Unable to find LMR factory: " + e); - } catch (InstantiationException e) { - ACE.ERROR("Creating LMR: " + e); - } catch (IllegalAccessException e) { - ACE.ERROR("Creating LMR: " + e); - } - // Any of the above exceptions will result in just using the - // default LMR - break; - default: - ACE.ERROR ("Unknown argument: " + c); - ACE.ERROR ("Valid args: -p <port> -r <LogMessageReceiver name>"); - break; - } - } - } - - private int port_ = ACE.DEFAULT_SERVER_PORT; - private LogMessageReceiver receiver_ = null; -}; - - - - - - diff --git a/java/netsvcs/Logger/ServerLoggingHandler.java b/java/netsvcs/Logger/ServerLoggingHandler.java deleted file mode 100644 index 40f1aee8440..00000000000 --- a/java/netsvcs/Logger/ServerLoggingHandler.java +++ /dev/null @@ -1,105 +0,0 @@ -/************************************************* - * - * = PACKAGE - * netsvcs.Logger - * - * = FILENAME - * ServerLoggingHandler.java - * - *@author Chris Cleeland, Everett Anderson - * - *************************************************/ -package netsvcs.Logger; - -import JACE.SOCK_SAP.*; -import JACE.Connection.*; -import JACE.OS.*; -import java.util.*; -import java.io.*; - -/** - * - * <p><h2>DESCRIPTION</h2> - * - * <blockquote> - * Created by ServerLoggingAcceptor every time a client connects. This reads - * a logging statement passes it to the LogMessageReceiver for processing. - * </blockquote> - * - * @see netsvcs.Logger.ServerLoggingAcceptor - */ -public class ServerLoggingHandler extends SvcHandler -{ - // Processes log messages - private LogMessageReceiver receiver_; - - /** - * Constructor - * - *@param receiver LogMessageReceiver that handles what to do with a message - */ - public ServerLoggingHandler (LogMessageReceiver receiver) - { - super(); - this.receiver_ = receiver; - } - - /** - * Start this handler in its own thread - */ - public int open(Object obj) - { - new Thread (this).start(); - return 0; - } - - /** - * Accessor: get the host name of the connected client - */ - protected String hostName () - { - return new String(this.peer().socket().getInetAddress().getHostName()); - } - - /** - * Receive input from the client, and send it to the LMR. This is the - * main loop for this thread. - */ - public void run() - { - DataInputStream dis = new DataInputStream(this.peer().inputStream()); - - for (;;) - { - // Messages arrive in the ACE.LogRecord format - // - // Hey! We need exception catching in here too! - try - { - // Reconstitute a log message from the wire - LogRecord rec = new LogRecord(); - - rec.streamInFrom(dis); - - // Give the record to the log processor - this.receiver_.logRecord(this.hostName(), - rec); - } - catch (EOFException eof) - { - try { - this.stream_.close(); - } catch (IOException n) { } - - return; - } - catch (IOException ioe) - { - ACE.ERROR(Thread.currentThread().getName() - + ": " - + ioe); - } - } - } -}; - diff --git a/java/netsvcs/Naming/Makefile b/java/netsvcs/Naming/Makefile deleted file mode 100644 index af49d9061d8..00000000000 --- a/java/netsvcs/Naming/Makefile +++ /dev/null @@ -1,24 +0,0 @@ -# Makefile -# $Id$ - -.SUFFIXES: .java .class - -JACE_WRAPPER = $(WRAPPER_ROOT)/java - -all: - javac -d ${JACE_WRAPPER}/classes $(files) -doc: - javadoc -d ${JACE_WRAPPER}/doc $(files) $(packages) - -files = NameAcceptor.java \ - NameHandler.java \ - NameRequest.java \ - NameReply.java \ - NameProxy.java \ - -packages = netsvcs \ - netsvcs.Naming - -realclean: - /bin/rm -rf ${JACE_WRAPPER}/classes/netsvcs/Naming - diff --git a/java/netsvcs/Naming/NameAcceptor.java b/java/netsvcs/Naming/NameAcceptor.java deleted file mode 100644 index f704504ee3c..00000000000 --- a/java/netsvcs/Naming/NameAcceptor.java +++ /dev/null @@ -1,306 +0,0 @@ -/************************************************* - * - * = PACKAGE - * netsvcs.Naming - * - * = FILENAME - * NameAcceptor.java - * - * Listens on the specified port (command line option) and launches - * NameHandlers when connections are made. Each NameHandler runs in - * its own thread. - * - * The hash table for the mapping and a timer queue are created here. - * Periodically the mapping is written out to a file. - * - * A small main program is included to start things off. If the - * data file exists, it is read into memory. Currently the service - * stores the entire mapping in memory at all times. The mapping is - * dumped to a file at regular intervals. - * - *@see netsvcs.Naming.NameHandler - * - *@author Everett Anderson - * - *************************************************/ -package netsvcs.Naming; - -import java.io.*; -import java.net.*; -import java.util.*; -import JACE.OS.*; -import JACE.Misc.*; -import JACE.Connection.*; -import JACE.Reactor.*; -import JACE.ASX.TimeValue; - -public class NameAcceptor extends Acceptor implements Runnable -{ - /** - * Constructor - */ - public NameAcceptor () - { - super(); - - // Create the hash table and timer queue - this.mapping_ = new Hashtable(); - this.tq_ = new TimerQueue(true); - } - - /** - * Simple main program. Command line options are - * described under parseArgs. - */ - public static void main (String [] args) - { - // Simple main program to get things rolling - NameAcceptor na = new NameAcceptor(); - - na.init(args); - } - - - /** - * Close the socket when shutting down - */ - public int fini () - { - try - { - this.done_ = true; - this.sockAcceptor_.close(); - } - catch (IOException e) - { - ACE.ERROR("" + e); - return -1; - } - - return 0; - } - - /** - * Stops accepting when suspended - */ - public int suspend() - { - this.suspended_ = true; - return 0; - } - - /** - * Resumes accepting - */ - public int resume() - { - this.suspended_ = false; - return 0; - } - - - /** - * Runs this instance in its own thread - */ - public int init (String [] args) - { - // Parse arguments - this.parseArgs (args); - - System.out.println("Starting naming service on port: " + this.port_); - - // Run in own thread of control so that we don't block the caller - new Thread (this).start(); - - return 0; - } - - /** - * - * Main loop: launches NameHandlers in separate threads whenever a - * connection request is made - */ - public void run () - { - // Load the hash table from disk - this.loadTable(); - - // Schedule to write out the memory copy of the hash table at regular - // intervals - this.tq_.scheduleTimer(this, - null, - new TimeValue(this.updateInterval_), - new TimeValue(this.updateInterval_)); - - try - { - // Create new NameHandlers as requests come in - this.open (this.port_); - while (!this.done_) { - - if (!this.suspended_) - this.accept (); - } - } - catch (SocketException e) - { - ACE.ERROR ("Socket Exception: " + e); - } - catch (InstantiationException e) - { - ACE.ERROR (e); - } - catch (IllegalAccessException e) - { - ACE.ERROR (e); - } - catch (IOException e) - { - ACE.ERROR (e); - } - } - - /** - * Create a new NameHandler - */ - protected SvcHandler makeSvcHandler () - throws InstantiationException, IllegalAccessException - { - return new netsvcs.Naming.NameHandler (this.mapping_); - } - - /** - * Process the command line. The following options are available: - * - * -p <port> Port number for listening - * -f <filename> Name of the database file - * -t <time> Mapping write-out time interval (in seconds) - * - */ - protected void parseArgs (String args[]) - { - String s; - GetOpt opt = new GetOpt (args, "p:f:t:"); - for (int c; (c = opt.next ()) != -1; ) - { - switch (c) - { - // Specify port - case 'p': - s = opt.optarg (); - this.port_ = (new Integer (s)).intValue (); - break; - // Specify file name of the database - case 'f': - s = opt.optarg (); - this.filename_ = new String(s); - break; - // Specify time interval to write out the table - case 't': - s = opt.optarg (); - this.updateInterval_ = (new Integer (s)).intValue(); - break; - default: - ACE.ERROR ("Unknown argument: " + c); - break; - } - } - } - - /** - * Loads the hash table into memory from the specified - * file. Uses ObjectInputStream. - */ - protected void loadTable () - { - File file = new File(this.filename_); - FileInputStream fis; - ObjectInputStream ois; - - Hashtable ht = null; - - try { - - if ((file.exists()) && (file.canRead())) { - - fis = new FileInputStream (file); - - ois = new ObjectInputStream(fis); - - ht = (Hashtable)ois.readObject(); - } else - return; - } catch (ClassNotFoundException e) { - ACE.ERROR(e); - } catch (StreamCorruptedException e) { - ACE.ERROR(e); - } catch (SecurityException e) { - ACE.ERROR(e); - } catch (IOException e) { - ACE.ERROR(e); - } - - if (ht != null) - this.mapping_ = ht; - - } - - /** - * Writes the table out to the specified file. - */ - protected void saveTable () - { - FileOutputStream fos; - ObjectOutputStream oos; - - try { - - fos = new FileOutputStream(this.filename_); - oos = new ObjectOutputStream(fos); - - oos.writeObject(this.mapping_); - - oos.flush(); - - oos.close(); - - } catch (OptionalDataException e) { - ACE.ERROR(e); - } catch (NotSerializableException e) { - ACE.ERROR(e); - } catch (IOException e) { - ACE.ERROR(e); - } - } - - /** - * Call back for the TimerQueue. This calls the method to save the - * hash table. The default time out is 60 seconds. - */ - public int handleTimeout (TimeValue tv, Object obj) - { - this.saveTable(); - - return 0; - } - - // Port to listen on - private int port_ = ACE.DEFAULT_SERVER_PORT; - - // Mapping data structure - Hashtable mapping_ = null; - - // Default file name - String filename_ = "namedata.dat"; - - // How often to save the table (seconds) - int updateInterval_ = 60; - - // Calls handleTimeout at updateInterval_ intervals - TimerQueue tq_ = null; - - boolean done_ = false; - boolean suspended_ = false; - -} - diff --git a/java/netsvcs/Naming/NameHandler.java b/java/netsvcs/Naming/NameHandler.java deleted file mode 100644 index a619eab0733..00000000000 --- a/java/netsvcs/Naming/NameHandler.java +++ /dev/null @@ -1,521 +0,0 @@ -/************************************************* - * - * = PACKAGE - * netsvcs.Naming - * - * = FILENAME - * NameHandler.java - * - * An instance of this class is created in a separate thread for each connection - * request received by the NameAcceptor. All interaction between the - * client's requests and the database are handled here. - * - * In general, the user binds a name to a (value, type) pair. The type is just - * treated as just another String (in the C++ version the name and value are - * arrays of 16 bit data types and the type is an array of 8 bit chars). - * - * For this to work in the hash table scheme, the type and value are wrapped in - * a ValueType class defined at the end of this file. - * - * This is compatible with the C++ ACE remote name service. - * - *@see netsvcs.Naming.NameAcceptor - *@see netsvcs.Naming.NameRequest - *@see netsvcs.Naming.NameReply - * - *@author Everett Anderson - * - *************************************************/ -package netsvcs.Naming; - -import java.io.*; -import java.util.*; -import JACE.OS.*; -import JACE.Connection.*; -import JACE.Reactor.*; -import JACE.SOCK_SAP.*; - -public class NameHandler extends SvcHandler -{ - /** - * Constructor - * - * @param mapping Hash table created in NameAcceptor - */ - public NameHandler (Hashtable mapping) - { - super(); - - this.mapping_ = mapping; - } - - /** - * Starts this handler in its own thread - * - */ - public int open (Object obj) - { - new Thread (this).start (); - return 0; - } - - /** - * Main loop that this thread executes. Waits for connection requests and - * creates a NameHandler thread for each. - * - */ - public void run () - { - ACE.DEBUG("NameHandler instance running"); - - // Can't assume the SOCKStream uses DataInputStream, so put one - // over its OutputStream - DataInputStream dis = new DataInputStream (this.peer().inputStream()); - - // The NameRequest is the how all requests come in to the naming service. - NameRequest nameRequest = new NameRequest(); - - // Main loop -- wait for requests - int msgLen; - try - { - while (!this.done_) - { - // Read a NameRequest from the stream - nameRequest.streamInFrom(dis); - - // Decide what to do based on the request type - this.dispatch(nameRequest); - - } - } - catch (NullPointerException e) - { - ACE.ERROR ("Connection reset by peer"); - } - catch (EOFException e) - { - /* The client has shut down the connection */ - - } - catch (IOException e) - { - ACE.ERROR (e); - } - finally - { - try - { - this.peer ().close (); - } - catch (IOException e) - { - } - } - } - - - /** - * - * This is the point at which a request is sent to the various methods - * that fulfill it. Switches on the request type -- bind, rebind, resolve, - * etc. - * - *@param nameRequest The request to fill - */ - void dispatch(NameRequest nameRequest) throws IOException - { - - // Call the various other member functions based on the - // message type of the request -- bind, rebind, etc. - switch (nameRequest.requestType()) - { - case NameRequest.BIND: - this.bind(nameRequest, false); - break; - case NameRequest.REBIND: - this.bind(nameRequest, true); - break; - case NameRequest.RESOLVE: - this.resolve(nameRequest); - break; - case NameRequest.UNBIND: - this.unbind(nameRequest); - break; - case NameRequest.LIST_NAMES: - this.listByName(nameRequest.name(), false); - break; - case NameRequest.LIST_VALUES: - this.listByValue(nameRequest.name(), false); - break; - case NameRequest.LIST_TYPES: - this.listByType(nameRequest.name(), false); - break; - case NameRequest.LIST_NAME_ENTRIES: - this.listByName(nameRequest.name(), true); - break; - case NameRequest.LIST_VALUE_ENTRIES: - this.listByValue(nameRequest.name(), true); - break; - case NameRequest.LIST_TYPE_ENTRIES: - this.listByType(nameRequest.name(), true); - break; - default: - System.err.println("unknown type"); - - ACE.ERROR("Unknown type: " + nameRequest.requestType()); - - // Send a failure message. This will only work if the other - // side is expecting something like a NameReply rather than - // a NameRequest. It would've been better to have everything - // use NameRequests to avoid this kind of thing. - NameReply reply = new NameReply(NameReply.FAILURE, 0); - reply.streamOutTo(this.peer()); - - break; - } - - } - - /** - * - * Bind a name and a (value, type) pair. All this data is given in the - * NameRequest from the client. Returns a NameReply back to the client - * with either Reply.SUCCESS or Reply.FAILURE as the type. - * - *@param request NameRequest given by the client - *@param rebind Is this a rebind or not? - */ - void bind (NameRequest request, boolean rebind) throws IOException - { - // The hash table entries consists of (String name, ValueType data) pairs, so - // create the appropriate ValueType - ValueType vt = new ValueType(request.type(), - request.value()); - - // Reply to tell sender of success or failure - NameReply reply = new NameReply(); - - // If it's a rebind request, overwrite the old entry. If the key doesn't - // exist, add it. If it does exist and it's not a bind request, return - // a failure code via a NameReply. - if ((rebind) || (!this.mapping_.containsKey(request.name()))) { - - System.err.println("Binding: " + request.name() + " and " + vt.value_); - - // Add/Update the entry in the hash table - this.mapping_.put(request.name(), vt); - - // Set the reply code to success - reply.type(NameReply.SUCCESS); - - } else { - - ACE.DEBUG("Key " + request.name() + " already exists"); - - // Set reply code to failure - reply.type(NameReply.FAILURE); - - // reply error code unused as far as I know - } - - reply.streamOutTo(this.peer()); - } - - /** - * Given a name, this looks up and returns the type and value. This is - * done by sending back a full NameRequest with the correct info. If - * there is a problem, an "empty" NameRequest is returned -- it has no - * name, type, or value fields. - * - *@param request NameRequest sent by the client (has the name to lookup) - */ - void resolve (NameRequest request) throws IOException - { - // A NameRequest is also used in response - NameRequest result; - - // Wrap a DataOutputStream around the socket's output stream - // (the socket should already have at least a BufferedOutputStream) - DataOutputStream dos = new DataOutputStream(this.peer().outputStream()); - - // If the requested name is in the hash table, return the data - if (this.mapping_.containsKey(request.name())) { - - // Get the data pair based on the name - ValueType vt = (ValueType)this.mapping_.get(request.name()); - - ACE.DEBUG("Good resolve: " + vt.value_); - - // Fill the reply structure - result = new NameRequest(NameRequest.RESOLVE, - null, - vt.value_, - vt.type_, - null); - - } else { - - // Otherwise return a null response - result = new NameRequest(NameRequest.RESOLVE, - null, - null, - null, - null); - - } - - // Send the result to the socket - // result.streamOutTo(dos); - - result.streamOutTo(this.peer()); - - } - - /** - * - * Given a name, remove its entry in the mapping. Returns a NameReply - * to the client with NameReply.SUCCESS or NameReply.FAILURE. - * - *@param request NameRequest from the client (has the name to remove) - */ - void unbind (NameRequest request) throws IOException - { - NameReply reply = new NameReply(); - - // If the given key isn't in the table, return an error - // Otherwise remove it. Uses a NameReply to respond. - if (!this.mapping_.containsKey(request.name())) - reply.type(NameReply.FAILURE); - else { - this.mapping_.remove(request.name()); - reply.type(NameReply.SUCCESS); - } - - // Send the reply out to the socket - reply.streamOutTo(this.peer()); - } - - /** - * - * Given a pattern string (given in NameRequest's name field), this - * finds all the entries in the mapping which have a name that begins with - * the string. Each one is sent back separately via a NameRequest, and this - * sequence is followed by a blank NameRequest. - * - *@param pattern Pattern to find (what result names should begin with) - *@param completeLookup Should the value and type be returned as well? - */ - void listByName (String pattern, boolean completeLookup) throws IOException - { - // Get a listing of all the keys in the hash table - Enumeration enum = this.mapping_.keys(); - - // References used in the loop - String name; - ValueType vt; - - // A NameRequest is used to return each item corresponding to the pattern. - NameRequest result = new NameRequest((completeLookup ? NameRequest.LIST_NAMES : - NameRequest.LIST_NAME_ENTRIES), - null, - null, - null, - null); - - // Keep ourselves safe from null pointer exceptions - if (pattern == null) - pattern = new String(""); - - // Scan through all the elements - while (enum.hasMoreElements()) { - - // Get a key - name = (String)enum.nextElement(); - - // Does it fit the pattern? - if (name.startsWith(pattern)) { - - // Set the result name - result.name(name); - - // Only make another hash table request if the user - // wants all the data - if (completeLookup) { - - // Get data from the hash table - vt = (ValueType)mapping_.get(name); - - // Set the rest of the data - result.type(vt.type_); - result.value(vt.value_); - } - - // Send it to the socket - result.streamOutTo(this.peer()); - } - } - - // Send final null message - result.name(null); - result.type(null); - result.value(null); - result.requestType(NameRequest.MAX_ENUM); - result.streamOutTo(this.peer()); - } - - /** - * - * Given a pattern string (given in NameRequest's name field), this - * finds all the entries in the mapping which have a type that begins with - * the string. Each one is sent back separately via a NameRequest, and this - * sequence is followed by a blank NameRequest. - * - *@param pattern Pattern to find (what result types should begin with) - *@param completeLookup Should the value be returned as well? This is only - * used to decide between LIST_TYPES and LIST_TYPE_ENTRIES - * since we might as well send back both if we look them up - * together. - */ - void listByType (String pattern, boolean completeLookup) throws IOException - { - // Get a listing of all the keys in the hash table - Enumeration enum = this.mapping_.keys(); - - // References used in the loop - String name; - ValueType vt; - - // A NameRequest is used to return each item corresponding to the pattern. - NameRequest result = new NameRequest((completeLookup ? NameRequest.LIST_TYPES : - NameRequest.LIST_TYPE_ENTRIES), - null, - null, - null, - null); - // Keep ourselves safe from null pointer exceptions - if (pattern == null) - pattern = new String(""); - - // Scan through all the elements - while (enum.hasMoreElements()) { - - // Get a key - name = (String)enum.nextElement(); - - // Have to get all the data for this entry to compare - vt = (ValueType)mapping_.get(name); - - // Does it fit the pattern? - if (vt.type_ != null) - if (vt.type_.startsWith(pattern)) { - - // Set the result values - result.name(name); - result.type(vt.type_); - result.value(vt.value_); - - // Send it out to the socket - result.streamOutTo(this.peer()); - } - } - - // Send final null message - result.name(null); - result.type(null); - result.value(null); - result.requestType(NameRequest.MAX_ENUM); - result.streamOutTo(this.peer()); - } - /** - * - * Given a pattern string (given in NameRequest's name field), this - * finds all the entries in the mapping which have a value that begins with - * the string. Each one is sent back separately via a NameRequest, and this - * sequence is followed by a blank NameRequest. - * - *@param pattern Pattern to find (what result values should begin with) - *@param completeLookup Should the type be returned as well? This is only - * used to decide between LIST_VALUES and LIST_VALUE_ENTRIES - * since we might as well send back both if we look them up - * together. - */ - - void listByValue (String pattern, boolean completeLookup) throws IOException - { - // Get a listing of all the keys in the hash table - Enumeration enum = this.mapping_.keys(); - - // References used in the loop - String name; - ValueType vt; - - // A NameRequest is used to return each item corresponding to the pattern. - NameRequest result = new NameRequest((completeLookup ? NameRequest.LIST_VALUES : - NameRequest.LIST_VALUE_ENTRIES), - null, - null, - null, - null); - // Keep ourselves safe from null pointer exceptions - if (pattern == null) - pattern = new String(""); - - // Scan through all the elements - while (enum.hasMoreElements()) { - - // Get a key - name = (String)enum.nextElement(); - - // Have to get all the data for this entry to compare - vt = (ValueType)mapping_.get(name); - - // Does it fit the pattern? - if (vt.value_ != null) - if (vt.value_.startsWith(pattern)) { - - // Set the result values - result.name(name); - result.type(vt.type_); - result.value(vt.value_); - - // Send it out to the socket - result.streamOutTo(this.peer()); - } - } - - // Send final null message - result.name(null); - result.type(null); - result.value(null); - result.requestType(NameRequest.MAX_ENUM); - result.streamOutTo(this.peer()); - } - - boolean done_ = false; - - - // References to the hash table and the timer queue - Hashtable mapping_; -} - - -/** - * A simple wrapper to keep the type and value together in - * the hash table. - */ -class ValueType implements Serializable -{ - /** - * Constructor - * - *@param type Type string to include - *@param value Value string to include - */ - ValueType(String type, String value) - { this.type_ = type; this.value_ = value; } - - public String type_; - public String value_; -} - diff --git a/java/netsvcs/Naming/NameProxy.java b/java/netsvcs/Naming/NameProxy.java deleted file mode 100644 index 249f745f5ce..00000000000 --- a/java/netsvcs/Naming/NameProxy.java +++ /dev/null @@ -1,351 +0,0 @@ -/************************************************* - * - * = PACKAGE - * netsvcs.Naming - * - * = FILENAME - * NameProxy.java - * - * This is a proxy which clients can use to interact with the naming service. They - * open a SOCKStream to the service, and can then call simple bind and resolve - * methods. - * - *@see netsvcs.Naming.NameAcceptor - *@see netsvcs.Naming.NameHandler - * - *@author Everett Anderson - * - *************************************************/ -package netsvcs.Naming; - -import java.io.*; -import java.net.*; -import java.util.*; -import JACE.OS.*; -import JACE.SOCK_SAP.*; - -public class NameProxy -{ - /** - * Constructor - * - *@param socket A SOCKStream already connected to the naming service - */ - public NameProxy(SOCKStream socket) - { - this.socket_ = socket; - } - - /** - * Attempt to bind the given data pair - * @param name Name/key - * @param value Value to bind - * - * @return True iff bind is successful - */ - public boolean bind(String name, String value) throws IOException - { - return this.bind(name, value, null, false); - } - - /** - * Attempt to bind the given data triplet - * @param name Name/key - * @param value Value to bind - * @param type Type to bind (another string) - * - * @return True iff the bind was successful - */ - public boolean bind(String name, String value, String type) throws IOException - { - return this.bind(name, value, type, false); - } - - /** - * The most generic of the bind methods. Allows factoring out of common code. Not public. - */ - boolean bind (String name, String value, String type, boolean rebind) throws IOException - { - // Create a new NameRequest with the desired info - NameRequest request = new NameRequest(rebind ? NameRequest.REBIND : NameRequest.BIND, - name, - value, - type, - null); - - // Send it to the naming service - request.streamOutTo(this.socket_); - - // Create a reply - NameReply reply = new NameReply(); - - // Get the status of the bind from the naming service - reply.streamInFrom(this.socket_); - - // Return true on success - return (reply.type() == NameReply.SUCCESS ? true : false); - } - - /** - * Rebind a name and a value - * @param name Name/key - * @param value Bound value - * - * @return True if the rebind was successful - */ - public boolean rebind (String name, String value) throws IOException - { - return this.bind(name, value, null, true); - } - - /** - * Rebind a name, value, and type - * @param name Name/key - * @param value Bound value - * @param type Bound type - * - * @return True if rebind was successful - */ - public boolean rebind (String name, String value, String type) throws IOException - { - return this.bind(name, value, type, true); - } - /** - * Look up information bound to the given key/name. - * - * @param name Name/key - * - * @return Vector with three elements: - * 0 Name/key - * 1 Value - * 2 Type - */ - public Vector resolve (String name) throws IOException - { - // Create a new NameRequest with the name & request type - NameRequest request = new NameRequest(NameRequest.RESOLVE, - name, - null, - null, - null); - - // Send it to the naming service - request.streamOutTo(this.socket_); - - // Get a response (hopefully with the value and type) - request.streamInFrom(this.socket_); - - // Dump the result into a vector - Vector result = new Vector(); - - result.addElement(request.name()); - result.addElement(request.value()); - result.addElement(request.type()); - - // Cut it down to the size we need - result.trimToSize(); - - return result; - } - - /** - * Remove the entry in the mapping corresponding to the given name/key. - * - * @param name Name/key - * - * @return True if the unbind was successful - */ - public boolean unbind (String name) throws IOException - { - NameRequest request = new NameRequest(NameRequest.UNBIND, - name, - null, - null, - null); - // Send the request to the naming service - request.streamOutTo(this.socket_); - - NameReply reply = new NameReply(); - - // Get reply - reply.streamInFrom(this.socket_); - - return (reply.type() == NameReply.SUCCESS ? true : false); - } - - /** - * Return a vector that's a list of names (Strings) that begin with - * the given pattern - * @param pattern Search pattern - * @return Vector List of names - */ - public Vector listNames (String pattern) throws IOException - { - return this.requestSimpleList(pattern, NameRequest.LIST_NAMES); - } - - /** - * Return a vector that's a list of types (Strings) that begin with - * the given pattern - * @param pattern Search pattern - * @return Vector List of types - */ - public Vector listTypes (String pattern) throws IOException - { - return this.requestSimpleList(pattern, NameRequest.LIST_TYPES); - } - - /** - * Return a vector that's a list of values (Strings) that begin with - * the given pattern - * @param pattern Search pattern - * @return Vector List of values - */ - public Vector listValues (String pattern) throws IOException - { - return this.requestSimpleList(pattern, NameRequest.LIST_VALUES); - } - - /** - * Non-public generic list gathering method - */ - Vector requestSimpleList (String pattern, int type) throws IOException - { - // Make request for a list of the given type - NameRequest request = new NameRequest(type, - pattern, - null, - null, - null); - request.streamOutTo(this.socket_); - - // Allocate and reuse the DIS here rather than each time we call - // streamInFrom - DataInputStream dis = new DataInputStream(this.socket_.inputStream()); - - request.streamInFrom(dis); - Vector result = new Vector(); - - // Add elements until there's a null message with the MAX_ENUM - // request type - while (request.requestType() != NameRequest.MAX_ENUM) { - if (type == NameRequest.LIST_NAMES) - result.addElement(new String(request.name())); - else - if (type == NameRequest.LIST_VALUES) - result.addElement(new String(request.value())); - else - result.addElement(new String(request.type())); - - request.streamInFrom(dis); - } - - // Adjust the vector to the minimal size - result.trimToSize(); - - return result; - } - - /** - * Get a vector with the entire data set for entries whose name begins with - * the given pattern. Each element in the vector is another vector - * with the following layout: - * 0 Name/key - * 1 Value - * 2 Type - * - * @param pattern Search pattern - * @return Vector of vectors - */ - public Vector listNameEntries (String pattern) throws IOException - { - return this.requestComplexList(pattern, NameRequest.LIST_NAME_ENTRIES); - } - - /** - * Get a vector with the entire data set for entries whose value begins with - * the given pattern. Each element in the vector is another vector - * with the following layout: - * 0 Name/key - * 1 Value - * 2 Type - * - * @param pattern Search pattern - * @return Vector of vectors - */ - public Vector listValueEntries (String pattern) throws IOException - { - return this.requestComplexList(pattern, NameRequest.LIST_VALUE_ENTRIES); - } - - /** - * Get a vector with the entire data set for entries whose type begins with - * the given pattern. Each element in the vector is another vector - * with the following layout: - * 0 Name/key - * 1 Value - * 2 Type - * - * @param pattern Search pattern - * @return Vector of vectors - */ - - public Vector listTypeEntries (String pattern) throws IOException - { - return this.requestComplexList(pattern, NameRequest.LIST_TYPE_ENTRIES); - } - - /** - * Non-public generic method for getting a a vector of vectors with the - * entire data set for entries fitting the given pattern. - */ - Vector requestComplexList (String pattern, int type) throws IOException - { - // Create request with desired type - NameRequest request = new NameRequest(type, - pattern, - null, - null, - null); - // Send it to the naming service - request.streamOutTo(this.socket_); - - // Allocate the DIS here and reuse - DataInputStream dis = new DataInputStream(this.socket_.inputStream()); - - // Get the first response - request.streamInFrom(dis); - Vector result = new Vector(); - - // Loop while we don't see a null response with the MAX_ENUM request type - while (request.requestType() != NameRequest.MAX_ENUM) { - Vector entry = new Vector(); - - // Create an element in the main vector - entry.addElement(request.name()); - entry.addElement(request.value()); - entry.addElement(request.type()); - entry.trimToSize(); - - // Add it to the result - result.addElement(entry); - - // Get another NameRequest - request.streamInFrom(dis); - } - - result.trimToSize(); - - return result; - } - - // The SOCKStream used to communication with the service - SOCKStream socket_; -}; - - - - - - - diff --git a/java/netsvcs/Naming/NameReply.java b/java/netsvcs/Naming/NameReply.java deleted file mode 100644 index 52ebb111574..00000000000 --- a/java/netsvcs/Naming/NameReply.java +++ /dev/null @@ -1,145 +0,0 @@ -/************************************************* - * - * = PACKAGE - * netsvcs.Naming - * - * = FILENAME - * NameReply.java - * - * Used by the naming server to give quick status messages - * to the client. This is only used to signal the success or - * failure of bind and unbind requests. The error number is - * unused (same in C++ version?). - * - *@see netsvcs.Naming.NameHandler - * - *@author Everett Anderson - * - *************************************************/ -package netsvcs.Naming; - -import java.io.*; -import java.util.*; -import JACE.OS.*; -import JACE.Connection.*; -import JACE.Reactor.*; -import JACE.ASX.*; -import JACE.SOCK_SAP.*; - -public class NameReply -{ - // Success and failure constants - public final static int SUCCESS = 1; - public final static int FAILURE = 2; - - /** - * Default Constructor - */ - public NameReply () - { - this.type_ = this.SUCCESS; - this.errno_ = 0; - } - - /** - * Constructor - * - *@param type Success or failure - *@param err Error number (unused) - */ - public NameReply (int type, int err) - { - this.type_ = type; - this.errno_ = err; - } - - /** - * Length accessor - */ - int length() - { return this.length_; } - - /** - * Type accessor -- success or failure - */ - int type() - { return this.type_; } - - /** - * Error number accessor - */ - int errno() - { return this.errno_; } - - /** - * Set type - * @param type New type - */ - void type(int type) - { this.type_ = type; } - - /** - * Set error number - * @param errno New error number - */ - void errno(int errno) - { this.errno_ = errno; } - - /** - * Send this data to the given SOCKStream - * - *@param sock SOCKStream to send to - */ - public void streamOutTo (JACE.SOCK_SAP.SOCKStream sock) throws IOException - { - ByteArrayOutputStream bout = new ByteArrayOutputStream(); - DataOutputStream dos = new DataOutputStream(bout); - - dos.writeInt(this.length_); - dos.writeInt(this.type_); - dos.writeInt(this.errno_); - - dos.flush(); - - byte[] array = bout.toByteArray(); - - sock.sendN(array, 0, array.length); - } - - /** - * Fill the fields of this instance from data in the socket - * - *@param sock SOCKStream to read from - */ - public void streamInFrom (JACE.SOCK_SAP.SOCKStream sock) throws IOException - { - DataInputStream dis = new DataInputStream(sock.inputStream()); - - this.streamInFrom(dis); - } - - /** - * Send this data to the given DataInputStream (which should be buffered) - * - *@param dis DataInputStream to use - */ - public void streamInFrom (DataInputStream dis) throws IOException - { - int length = dis.readInt(); - - if (length != this.length_) - throw new IOException("Incorrect NameReply length"); - - type_ = dis.readInt(); - errno_ = dis.readInt(); - } - - final static int length_ = 12; - - int type_; - int errno_; -} - - - - diff --git a/java/netsvcs/Naming/NameRequest.java b/java/netsvcs/Naming/NameRequest.java deleted file mode 100644 index f8a3579fa35..00000000000 --- a/java/netsvcs/Naming/NameRequest.java +++ /dev/null @@ -1,331 +0,0 @@ -/************************************************* - * - * = PACKAGE - * netsvcs.Naming - * - * = FILENAME - * NameRequest.java - * - * Used by both client and naming server as detailed in - * the NameHandler. This structure transfers information - * including name, value, type, and request type. - * - *@see netsvcs.Naming.NameHandler - * - *@author Everett Anderson - * - *************************************************/ -package netsvcs.Naming; - -import java.io.*; -import java.util.*; -import JACE.OS.*; -import JACE.Connection.*; -import JACE.Reactor.*; -import JACE.ASX.*; -import JACE.SOCK_SAP.*; - -public class NameRequest -{ - /** - * Different types of requests - */ - public static final int BIND = 1; - public static final int REBIND = 2; - public static final int RESOLVE = 3; - public static final int UNBIND = 4; - public static final int LIST_NAMES = 5; - public static final int LIST_VALUES = 13; - public static final int LIST_TYPES = 21; - public static final int LIST_NAME_ENTRIES = 6; - public static final int LIST_VALUE_ENTRIES = 14; - public static final int LIST_TYPE_ENTRIES = 22; - public static final int MAX_ENUM = 11; - - /** - * Default constructor - */ - public NameRequest () - { - this.name_ = this.value_ = this.type_ = null; - this.length_ = 32; - } - - /** - * Constructor - * - * @param requestType Type of request this is (BIND, REBIND, etc) - * @param name Key to bind - * @param value Value to bind - * @param type Type to couple with the value - * @param timeout Timer information (not really used in JACE yet) - */ - public NameRequest(int requestType, - String name, - String value, - String type, - TimeValue timeout) - { - this.requestType_ = requestType; - - if (timeout == null) { - - this.blockForever_ = 1; - this.secTimeout_ = 0; - this.usecTimeout_ = 0; - } else { - - this.blockForever_ = 0; - this.secTimeout_ = (int)timeout.sec(); - this.usecTimeout_ = (int)timeout.getMilliTime() * 1000; - } - - // This is necessary to make sure null pointer exceptions are - // avoided. It makes it more consistent later on - if (name == null) - this.name_ = new String(""); - else - this.name_ = new String(name); - if (value == null) - this.value_ = new String(""); - else - this.value_ = new String(value); - if (type == null) - this.type_ = new String(""); - else - this.type_ = new String(type); - - // Set the length - this.calculateLength(); - } - - /** - * Calculate the transmission length (bytes) of this structure - */ - private void calculateLength() - { - // The type is sent as an 8 bit data type (chars in the C++ version), - // but the name and value are sent as 16 bit chars (ACE_USHORT16's in C++) - - this.length_ = 34 + this.type_.length() + 2 * (this.name_.length() + - this.value_.length()); - - } - - /** - * Return the transmission length - */ - public int length() - { return this.length_; } - - /** - * Return the name/key - */ - public String name() - { return new String(this.name_); } - - /** - * Set the name/key - * @param name Name to set to - */ - public void name(String name) - { - if (name == null) - this.name_ = new String(""); - else - this.name_ = new String(name); - - this.calculateLength(); - } - - /** - * Return the value - */ - public String value() - { return new String(this.value_); } - - /** - * Set the value - * @param value New value - */ - public void value(String value) - { - if (value == null) - this.value_ = new String(""); - else - this.value_ = new String(value); - - this.calculateLength(); - } - - /** - * Return the type - */ - public String type() - { return new String(this.type_); } - - /** - * Set the type - * @param type New type - */ - public void type(String type) - { - if (type == null) - this.type_ = new String(""); - else - this.type_ = new String(type); - - this.calculateLength(); - } - - /** - * Fill the fields of this instance with data from the socket - * - *@param sock Socket to read from - */ - public void streamInFrom (JACE.SOCK_SAP.SOCKStream sock) throws IOException - { - DataInputStream dis = new DataInputStream(sock.inputStream()); - - this.streamInFrom(dis); - } - - /** - * Fill the fields of this instance from the given DataInputStream - * - *@param dis DataInputStream to read from - */ - public void streamInFrom (DataInputStream dis) throws IOException - { - // Read the length (32 bits) - length_ = dis.readInt(); - - // Read the request type - requestType_ = dis.readInt(); - - // Can we block forever to fulfill this request? (unused) - blockForever_ = dis.readInt(); - - // How long until we should time out this request? (unused) - secTimeout_ = dis.readInt(); - usecTimeout_ = dis.readInt(); - - // The sizes are in bytes, and there are two bytes per char - // (ACE_USHORT16 in C++ land) - int nameLen = dis.readInt() / 2; - int valueLen = dis.readInt() / 2; - - int typeLen = dis.readInt(); - - // Read the name -- just read chars since they're 16 bits. - // Hopefully the SOCKStream has buffered the data - char buf[] = new char[nameLen]; - for (int i = 0; i < nameLen; i++) { - buf[i] = dis.readChar(); - } - this.name_ = new String(buf); - - // Read the value - buf = new char[valueLen]; - for (int i = 0; i < valueLen; i++) - buf[i] = dis.readChar(); - this.value_ = new String(buf); - - // Read the type -- now we can use readFully since - // the type was sent as 8 bit chars - byte tbuf[] = new byte[typeLen]; - dis.readFully(tbuf); - this.type_ = new String(tbuf); - - // Skip the null char at the end - dis.skipBytes(2); - } - - /** - * Send this NameRequest out to the given SOCKStream - * - *@param sock SOCKStream to send to - */ - public void streamOutTo (JACE.SOCK_SAP.SOCKStream sock) throws IOException - { - ByteArrayOutputStream bout = new ByteArrayOutputStream(); - DataOutputStream dos = new DataOutputStream(bout); - - dos.writeInt(length_); - dos.writeInt(requestType_); - dos.writeInt(blockForever_); - dos.writeInt(secTimeout_); - dos.writeInt(usecTimeout_); - - // Byte sizes are sent, and the name and value are stored as - // 16 bit char arrays (ACE_USHORT16 arrays in C++ version) - dos.writeInt(this.name_.length() * 2); - dos.writeInt(this.value_.length() * 2); - dos.writeInt(this.type_.length()); - - // Making sure the name_ wasn't null comes in handy - // in situations like this - dos.writeChars(this.name_); - dos.writeChars(this.value_); - dos.writeBytes(this.type_); - - // Null termination - dos.writeChar(0); - - // Send it for real - dos.flush(); - - byte[] array = bout.toByteArray(); - - sock.sendN(array, 0, array.length); - } - - /** - * Set the requestType - *@param type Type to set to - */ - public void requestType(int type) - { - this.requestType_ = type; - } - - /** - * Get requestType - */ - public int requestType() - { - return this.requestType_; - } - - /** - * Can we block forever to fulfill the request? (unused) - */ - public boolean blockForever() - { - return (this.blockForever_ != 0) ? true : false; - } - - /** - * Allowed timeout (unused) - */ - public int secTimeout() - { - return this.secTimeout_; - } - - int length_; - int requestType_; - int blockForever_; - int secTimeout_; - int usecTimeout_; - - String name_; - String value_; - String type_; -}; - - - - - - diff --git a/java/netsvcs/Time/Clerk.java b/java/netsvcs/Time/Clerk.java deleted file mode 100755 index f29e08e06f8..00000000000 --- a/java/netsvcs/Time/Clerk.java +++ /dev/null @@ -1,23 +0,0 @@ -// ============================================================================ -// -// = PACKAGE -// netsvcs.Time -// -// = FILENAME -// Clerk.java -// -// = AUTHOR -// Prashant Jain -// -// ============================================================================ -package netsvcs.Time; - -// Test driver for the time server clerk -public class Clerk -{ - public static void main (String [] args) - { - TSClerkProcessor clerk = new TSClerkProcessor (); - clerk.init (args); - } -} diff --git a/java/netsvcs/Time/Makefile b/java/netsvcs/Time/Makefile deleted file mode 100755 index 830c2646a8a..00000000000 --- a/java/netsvcs/Time/Makefile +++ /dev/null @@ -1,26 +0,0 @@ -# $Id$ - -.SUFFIXES: .java .class - -JACE_WRAPPER = $(ACE_ROOT)/java - -all: - javac -d ${JACE_WRAPPER}/classes $(files) -doc: - javadoc -d ${JACE_WRAPPER}/doc $(files) $(packages) - -files = TSClerkProcessor.java \ - TSClerkHandler.java \ - TSRequestAcceptor.java \ - TSRequestHandler.java \ - TSServerAcceptor.java \ - TSServerHandler.java \ - Clerk.java \ - Server.java - -packages = netsvcs \ - netsvcs.Time - -realclean: - /bin/rm -rf ${JACE_WRAPPER}/classes/netsvcs/Time - diff --git a/java/netsvcs/Time/Server.java b/java/netsvcs/Time/Server.java deleted file mode 100755 index 6b44ddf8d9f..00000000000 --- a/java/netsvcs/Time/Server.java +++ /dev/null @@ -1,23 +0,0 @@ -// ============================================================================ -// -// = PACKAGE -// netsvcs.Time -// -// = FILENAME -// Server.java -// -// = AUTHOR -// Prashant Jain -// -// ============================================================================ -package netsvcs.Time; - -// Test driver for the time service server -public class Server -{ - public static void main (String [] args) - { - TSServerAcceptor server = new TSServerAcceptor (); - server.init (args); - } -} diff --git a/java/netsvcs/Time/TSClerkHandler.java b/java/netsvcs/Time/TSClerkHandler.java deleted file mode 100755 index fc89b69c45c..00000000000 --- a/java/netsvcs/Time/TSClerkHandler.java +++ /dev/null @@ -1,296 +0,0 @@ -/************************************************* - * - * = PACKAGE - * netsvcs.Time - * - * = FILENAME - * TS_Clerk_Handler.java - * - *@author Prashant Jain, Everett Anderson - * - *************************************************/ -package netsvcs.Time; - -import java.io.*; -import java.util.Date; -import JACE.OS.*; -import JACE.Connection.*; -import JACE.Reactor.*; -import JACE.ASX.TimeValue; - -/** - * <hr> - * <p><h2>SYNOPSIS</h2> - * - * <blockquote>Requests the remote time on a server at regular - * intervals.</blockquote> - * - * <p><h2>DESCRIPTION</h2> - * - * <blockquote>TSClerkHandlers are created by a TSClerkProcessor. There - * is one handler for each server that the Clerk Processor factors into - * its calculations.</blockquote> - */ -public class TSClerkHandler extends SvcHandler -{ - /** - * Constructor. TSClerkProcessor specifies the server machine and - * port, as well as the interval at which to make the query. - */ - public TSClerkHandler (String hostname, - int port, - TimerQueue tq, - int timeout, - TSClerkProcessor parent) - { - - this.hostname_ = hostname; - this.port_ = port; - this.tq_ = tq; - this.timeout_ = timeout; - - this.initialTimeout_ = timeout; - this.processor_ = parent; - - this.sendMsg_ = new String ("TIME_UPDATE_REQUEST"); - } - - /** - * Called to start this handler in a new thread. This only - * does it when the state of the handler is INITIALIZING. - */ - public int open (Object obj) - { - if (this.state_ != RECONNECTING) { - - Thread test = new Thread(this); - - new Thread (this).start (); - - } - return 0; - } - - /** - * Accessor - return the host name of the server - */ - public String hostname () - { - return this.hostname_; - } - - /** - * Accessor - return the port used to contact the server - */ - public int port () - { - return this.port_; - } - - /** - * Accessor - returns the difference between the local time and - * the remote server. - */ - public long delta () - { - return this.delta_; - } - - /** - * Called when the thread starts. Schedules itself with the - * timer queue. - */ - public void run () - { - this.timerId_ = this.tq_.scheduleTimer (this, - null, - new TimeValue (this.timeout_), - new TimeValue (this.timeout_)); - - } - - /** - * Accessor - return the state - */ - public int state() - { - return this.state_; - } - - /** - * Sets the state of the handler - */ - public void state(int newState) - { - this.state_ = newState; - } - - /** - * Provides a new time out interval (exponentially increasing) so - * that if the server doesn't respond, we don't keep trying to - * reconnect as often. Maximum value is 5 minutes. - */ - public int recalculateTimeout() - { - this.timeout_ *= 2; - - if (this.timeout_ > this.max_timeout_) - this.timeout_ = max_timeout_; - - return this.timeout_; - } - - /** - * Start the recovery from a server disconnection by closing the - * port and recalculating the timeout value. - */ - protected void errorRecovery() - { - ACE.DEBUG("Time Service failure with server " + this.hostname_); - - this.timeout_ = this.recalculateTimeout(); - - this.reschedule(); - } - - /** - * Removes this handler from the timer queue, and reschedules it - * (presumably with a new timeout value) - */ - public void reschedule() - { - this.tq_.cancelTimer(this); - - this.timerId_ = this.tq_.scheduleTimer (this, - null, - new TimeValue (this.timeout_), - new TimeValue (this.timeout_)); - } - - /** - * Called back by the timer queue. If the handler isn't connected, - * it tries to reconnect to the server. Otherwise, it requests - * the remote time. The server is said to have disconnected when - * an exception is thrown in the socket system, or the result is - * a string with length <= 0. - */ - public int handleTimeout (TimeValue tv, Object obj) - { - if (this.state_ != CONNECTED) { - - this.processor_.initiateConnection(this); - - // If still not connected - if (this.state_ != CONNECTED) { - - // used to set state to reconnecting here - this.state_ = RECONNECTING; - - // Reschedule to try again later - this.errorRecovery(); - return 0; - } - - // If connected, poll the server at the requested intervals - this.resetTimeout(); - } - - StringBuffer ack = new StringBuffer (); - int ackLen; - try - { - // Used to calculate the turn-around time - long sendTime = System.currentTimeMillis(); - - this.peer ().send(this.sendMsg_); - ackLen = this.peer ().recv (ack); - - long recvTime = System.currentTimeMillis(); - - if (ackLen <= 0) { - - this.state_ = DISCONNECTED; - return -1; - - } else { - - long delta = (new Long(ack.toString())).longValue() - recvTime; - - delta += (recvTime - sendTime) / 2; - - this.delta_ = delta; - - System.err.println("Delta: " + this.delta_); - } - - } - catch (NullPointerException e) - { - ACE.ERROR ("connection reset by peer"); - this.state_ = DISCONNECTED; - return -1; - } - catch (IOException e) - { - ACE.ERROR (e); - this.state_ = DISCONNECTED; - return -1; - } - - return 0; - } - - /** - * Resets the timer interval to be the one supplied to the - * constructor. - */ - public void resetTimeout() - { - this.timeout_ = this.initialTimeout_; - - this.reschedule(); - } - - private TSClerkProcessor processor_; - // Reference used to re-establish connections - - public static final int MAX_RETRY_TIMEOUT = 300; - // Wait at most 5 minutes before trying to reconnect - - // States - public static final int CONNECTED = 0; - public static final int DISCONNECTED = 1; - public static final int RECONNECTING = 2; - - // If there has been a failure, try reconnecting - // at least every MAX_RETRY_TIMEOUT seconds - private int max_timeout_ = MAX_RETRY_TIMEOUT; - - // State of the handler - private int state_ = DISCONNECTED; - - // Difference between the remote time and the local time. - private long delta_ = 0; - - // Name of the remote host - private String hostname_; - - // Port used for the connection - private int port_; - - // Current timer interval - private int timeout_; - - // Reference to the Clerk Processor's timer queue - private TimerQueue tq_; - - // Message to send for a time update - private String sendMsg_; - - // ID of the handler in the queue - private int timerId_; - - // Desired time interval to receive updates - private int initialTimeout_; - -} diff --git a/java/netsvcs/Time/TSClerkProcessor.java b/java/netsvcs/Time/TSClerkProcessor.java deleted file mode 100755 index d7b1773cc9e..00000000000 --- a/java/netsvcs/Time/TSClerkProcessor.java +++ /dev/null @@ -1,267 +0,0 @@ -/************************************************* - * - * = PACKAGE - * netsvcs.Time - * - * = FILENAME - * TSClerkProcessor.java - * - *@author Prashant Jain, Everett Anderson - * - *************************************************/ -package netsvcs.Time; - -import java.io.*; -import java.net.*; -import java.util.*; -import JACE.OS.*; -import JACE.Misc.*; -import JACE.Connection.*; -import JACE.Reactor.*; -import JACE.ASX.TimeValue; - -/** - * - * <hr> - * <p><h2>SYNOPSIS</h2> - * - * <blockquote>Monitors a specified port (default 7989) and launches - * TSClerkHandlers when connections are made. The handlers communicate - * with servers and calculate the difference between the server time - * and local time. The Clerk Processor averages these differences - * and reports them to clients.</blockquote> - * - * <p><h2>DESCRIPTION</h2> - * - * <blockquote>This doesn't actually change the system clock, but it - * provides the average of the differences of the local and server - * times. A client could use this information to adjust the clock, or - * just use the midpoint to determine the correct network time.</blockquote> - * - */ -public class TSClerkProcessor extends Connector implements Runnable -{ - /** - * Default constructor - */ - public TSClerkProcessor () - { - this.serverArray_ = new Vector (); - - } - - /** - * Parse the command line, setup the TSRequestAcceptor, and run - * the Clerk Processor in its own thread. - */ - public int init (String [] args) - { - // Parse arguments - this.parseArgs (args); - - TSRequestAcceptor ra = new TSRequestAcceptor (this); - ra.init (args); - - // Run in own thread of control so that we don't block the caller - new Thread (this).start (); - return 0; - } - - - /** - * Makes connections to the servers, schedules itself for intervals - * to update the delta time. - */ - public void run () - { - - // Set up connections with all servers - Enumeration table = this.serverArray_.elements (); - while (table.hasMoreElements ()) - { - this.initiateConnection((TSClerkHandler)table.nextElement()); - } - - // Set up timer - this.timer_id_ = this.tq_.scheduleTimer (this, - null, - new TimeValue (this.timeout_), - new TimeValue (this.timeout_)); - } - - /** - * Makes connections to the servers. - */ - public void initiateConnection (TSClerkHandler handler) - { - this.open (handler.hostname(), handler.port()); - - try - { - // Connect to the server - this.connect (handler); - - // Set the state of the Clerk Handler so it queries the - // server at intervals. - handler.state(TSClerkHandler.CONNECTED); - - } - catch (UnknownHostException e) - { - ACE.ERROR (e); - } - catch (SocketException e) - { - ACE.ERROR ("Connection refused"); - } - catch (InstantiationException e) - { - ACE.ERROR (e); - } - catch (IllegalAccessException e) - { - ACE.ERROR (e); - } - catch (IOException e) - { - ACE.ERROR (e); - } - } - - - /** - * - * Called by the timer queue. Calls updateTime(). - */ - public int handleTimeout (TimeValue tv, Object obj) - { - return this.updateTime (); - } - - /** - * Calculates the delta time by averaging the results from - * Clerk Handler delta()'s. It only includes handlers whose - * state is currently CONNECTED. If they're not connected, it - * reschedules them to begin the error correction process of - * trying to reconnect to the server (possible synch problems?). - */ - protected int updateTime () - { - TSClerkHandler handler; - int count = 0; - long totalDeltaTime = 0; - - Enumeration table = this.serverArray_.elements (); - - while (table.hasMoreElements ()) - { - handler = (TSClerkHandler) table.nextElement (); - - if (handler.state() != TSClerkHandler.CONNECTED) { - - // Reconnecting state means we don't need to put - // it in the timer queue again - if (handler.state() == TSClerkHandler.RECONNECTING) - continue; - else - if (handler.state() == TSClerkHandler.DISCONNECTED) - handler.state(TSClerkHandler.RECONNECTING); - - handler.errorRecovery(); - continue; - } - - long delta = handler.delta(); - - ACE.DEBUG(handler.hostname() + ": " + delta); - - totalDeltaTime += delta; - count++; - } - - if (count > 0) { - - this.timeDelta_ = totalDeltaTime / count; - - ACE.DEBUG("Average deviation: " + totalDeltaTime/count); - - } else - - this.timeDelta_ = 0; - - return 0; - } - - /** - * Return the delta time. - */ - public long getDelta() - { - return this.timeDelta_; - } - - /** - * Parse the command line. Watches for -t <time> and - * -h <machine:port> switches. Must specify time - * value before host switches! - */ - protected void parseArgs (String args[]) - { - String s; - GetOpt opt = new GetOpt (args, "t:h:"); - for (int c; (c = opt.next ()) != -1; ) - { - switch (c) - { - case 't': - s = opt.optarg (); - this.timeout_ = (new Integer (s)).intValue (); - break; - case 'h': - s = opt.optarg (); - this.addNewHandler (s); - break; - default: - ACE.ERROR ("Bad command line argument: " + c); - - ACE.ERROR ("Valid arguments: -t <timeout> -h <hostname>:<port> -h ..."); - break; - } - } - } - - /** - * - * Creates a new Clerk Handler and adds it to the serverArray_ - */ - private void addNewHandler (String s) - { - StringTokenizer tokens = new StringTokenizer (s, ":"); - String hostname = tokens.nextToken (); - - int port = (new Integer (tokens.nextToken ())).intValue (); - - // Create new handler and add it to array of servers - this.serverArray_.addElement (new TSClerkHandler (hostname, - port, - this.tq_, - this.timeout_, - this)); - } - - // Vector of TSClerkHandlers, one for each server - private Vector serverArray_; - - // Default interval at which to update the time - private int timeout_ = 1000; - - // Timer queue which calls handleTimeout when the Clerk Processor - // is supposed to update the time. - private TimerQueue tq_ = new TimerQueue (true); - - // Clerk Processor ID in the timer queue - private int timer_id_; - - // Average of the differences of the local and server times. - private long timeDelta_; -} diff --git a/java/netsvcs/Time/TSRequestAcceptor.java b/java/netsvcs/Time/TSRequestAcceptor.java deleted file mode 100755 index e02b0b261ba..00000000000 --- a/java/netsvcs/Time/TSRequestAcceptor.java +++ /dev/null @@ -1,142 +0,0 @@ -/************************************************* - * - * = PACKAGE - * netsvcs.Time - * - * = FILENAME - * TSRequestAcceptor.java - * - *@author Prashant Jain, Everett Anderson - * - *************************************************/ -package netsvcs.Time; - -import java.io.*; -import java.net.*; -import java.util.*; -import JACE.OS.*; -import JACE.Misc.*; -import JACE.Connection.*; -import JACE.Reactor.*; - -/** - * <hr> - * <p><h2>SYNOPSIS</h2> - * - * <blockquote>Monitors a specified port (default 7990) and launches - * TSRequestHandlers when connections are made. The handlers - * report the average deviation from the local time when input - * is received to their sockets.</blockquote> - * - * <p><h2>DESCRIPTION</h2> - * <blockquote>This is in place of the shared memory system used in C++ ACE. - * The clients need to request the correct time range from the Clerk, so - * they can do it with <a href="ACE.SOCK_SAP.SOCKStream.html#_top_"> - * <tt>sockets</tt></a>. An instance of TSRequestAcceptor is created - * and initialized in TSClerkProcessor init(). This should be the - * only place it's used.</blockquote> - * - * @see ACE.SOCK_SAP.SOCKAcceptor,ACE.netsvcs.Time.TSClerkProcessor - */ - -public class TSRequestAcceptor extends Acceptor implements Runnable -{ - /** - * Create an instance of TSRequestAcceptor. Default constructor. - */ - public TSRequestAcceptor (TSClerkProcessor parent) - { - this.parent_ = parent; - } - - /** - * - * Process command line arguments (port), and start this instance - * in its own thread. - * - */ - public int init(String [] args) - { - this.parseArgs (args); - - new Thread (this).start(); - return 0; - } - - /** - * - * Called when the thread starts. Open the port and accept - * connections. - */ - public void run () - { - try { - this.open (this.port_); - while (true) - this.accept(); - } - catch (SocketException e) - { - ACE.ERROR (e); - } - catch (InstantiationException e) - { - ACE.ERROR (e); - } - catch (IllegalAccessException e) - { - ACE.ERROR (e); - } - catch (IOException e) - { - ACE.ERROR (e); - } - - System.err.println("Stopped accepting"); - } - - /** - * - * Parse the command line. This only looks for -p <port number>. - * - */ - protected void parseArgs (String args[]) - { - String s; - GetOpt opt = new GetOpt (args, "p:"); - - for (int c; (c = opt.next ()) != -1; ) - { - switch (c) - { - case 'p': - s = opt.optarg (); - this.port_ = (new Integer (s)).intValue (); - break; - default: - ACE.ERROR("Invalid argument: " + c); - break; - } - } - } - - /** - * - * Modifies to behavior of Acceptor accept() so the TSClerkProcessor - * reference can be passed to the TSRequestHandler. - * - */ - - protected SvcHandler makeSvcHandler () - throws InstantiationException, IllegalAccessException - { - return (SvcHandler) new TSRequestHandler(parent_); - } - - // Port to monitor - private int port_ = 7990; - - // Reference to the Clerk Processor (which holds the time value) - private TSClerkProcessor parent_; -}; - diff --git a/java/netsvcs/Time/TSRequestHandler.java b/java/netsvcs/Time/TSRequestHandler.java deleted file mode 100755 index dbeded22250..00000000000 --- a/java/netsvcs/Time/TSRequestHandler.java +++ /dev/null @@ -1,106 +0,0 @@ -package netsvcs.Time; -/************************************************* - * - * = PACKAGE - * netsvcs.Time - * - * = FILENAME - * TSRequestHandler.java - * - *@author Prashant Jain, Everett Anderson - * - *************************************************/ -import java.io.*; -import java.util.*; -import JACE.OS.*; -import JACE.Connection.*; -import JACE.Reactor.*; - -/** - * <hr> - * <p><h2>SYNOPSIS</h2> - * - * <blockquote>Handles giving the client the average difference between - * the local time and the server times.</blockquote> - * - * <p><h2>DESCRIPTION</h2> - * - * <blockquote>Whenever the RequestHandler receives input to the port, it - * sends the current delta (average difference time) in return as a string. - * Instances of this class are created by TSRequestAcceptor.</blockquote> - */ -public class TSRequestHandler extends SvcHandler -{ - /** - * Constructor. Takes in a reference to the Clerk Processor - * so it can call TSClerkProcessor getDelta(). - */ - public TSRequestHandler (TSClerkProcessor processor) - { - this.processor_ = processor; - } - - /** - * - * Run this in a separate thread. - */ - public int open (Object obj) - { - new Thread (this).start (); - return 0; - } - - /** - * - * Called when the thread starts. This is the main code -- whenever - * input comes to the socket, it sends out the current delta time - * as a string. - */ - public void run () - { - int msgLen; - try - { - while (true) - { - StringBuffer msg = new StringBuffer (); - - msgLen = this.peer ().recv (msg); - - if (msgLen < 0) - break; - else { - - // No matter what was sent in, send the average difference back - - String msgOut = new String("" + this.processor_.getDelta() + '\n'); - this.peer ().send (msgOut); - - } - } - } - catch (NullPointerException e) - { - ACE.ERROR ("Connection reset by peer"); - } - catch (IOException e) - { - ACE.ERROR (e); - } - finally - { - try - { - this.peer ().close (); - } - catch (IOException e) - { - ACE.ERROR (e); - } - } - } - - - // Reference to the Clerk Processor to call getDelta() - TSClerkProcessor processor_; -} diff --git a/java/netsvcs/Time/TSServerAcceptor.java b/java/netsvcs/Time/TSServerAcceptor.java deleted file mode 100755 index 2d54f7b740b..00000000000 --- a/java/netsvcs/Time/TSServerAcceptor.java +++ /dev/null @@ -1,100 +0,0 @@ -/************************************************* - * - * = PACKAGE - * netsvcs.Time - * - * = FILENAME - * TS_Server_Acceptor.java - * - *@author Prashant Jain - * - *************************************************/ -package netsvcs.Time; - -import java.io.*; -import java.net.*; -import java.util.*; -import JACE.OS.*; -import JACE.Misc.*; -import JACE.Connection.*; -import JACE.Reactor.*; - -/** - * <hr> - * <p><h2>DESCRIPTION</h2> - * - * Acceptor: listens to a port and launches TSServerHandlers - * when connections are made. - * - * @see netsvcs.Time.TSServerHandler, JACE.Connection.Acceptor - */ -public class TSServerAcceptor extends Acceptor implements Runnable -{ - // Run this in its own thread - public int init (String [] args) - { - // Parse arguments - this.parseArgs (args); - - // Run in own thread of control so that we don't block the caller - new Thread (this).start (); - return 0; - } - - // Create a TSServerHandler for each client that wants to connect - public void run () - { - try - { - this.setHandlerFactory (Class.forName ("netsvcs.Time.TSServerHandler")); - this.open (this.port_); - while (true) - this.accept (); - } - catch (ClassNotFoundException e) - { - ACE.ERROR (e); - } - catch (SocketException e) - { - ACE.ERROR ("Socket Exception: " + e); - } - catch (InstantiationException e) - { - ACE.ERROR (e); - } - catch (IllegalAccessException e) - { - ACE.ERROR (e); - } - catch (IOException e) - { - ACE.ERROR (e); - } - - System.err.println("Stopped accepting"); - } - - // Process the command line - protected void parseArgs (String args[]) - { - String s; - GetOpt opt = new GetOpt (args, "p:"); - for (int c; (c = opt.next ()) != -1; ) - { - switch (c) - { - case 'p': - s = opt.optarg (); - this.port_ = (new Integer (s)).intValue (); - break; - default: - ACE.ERROR ("Unknown argument: " + c); - break; - } - } - } - - private int port_ = 7989; -} - diff --git a/java/netsvcs/Time/TSServerHandler.java b/java/netsvcs/Time/TSServerHandler.java deleted file mode 100755 index 4ee700254ed..00000000000 --- a/java/netsvcs/Time/TSServerHandler.java +++ /dev/null @@ -1,99 +0,0 @@ -/************************************************* - * - * = PACKAGE - * netsvcs.Time - * - * = FILENAME - * TS_Server_Handler.java - * - *@author Prashant Jain, Everett Anderson - * - *************************************************/ -package netsvcs.Time; - -import java.io.*; -import java.util.*; -import JACE.OS.*; -import JACE.Connection.*; -import JACE.Reactor.*; - -/** - * <hr> - * <p><h2>DESCRIPTION</h2> - * - * <blockquote>Handles requests from a TSClerkHandler and sends - * back the current local time.</blockquote> - * - * @see netsvcs.Time.TSClerkHandler. netsvcs.Time.TSServerAcceptor - */ - -public class TSServerHandler extends SvcHandler -{ - // Constructor - public TSServerHandler () - { - } - - // Start this handler in its own thread - public int open (Object obj) - { - - new Thread (this).start (); - return 0; - } - - // Wait for messages from the Client and send the current local - // time back as a string. - public void run () - { - int msgLen; - try - { - while (true) - { - // Use a new one each time since recv appends - StringBuffer msg = new StringBuffer (); - - // Get the message from the client (blocks) - msgLen = this.peer ().recv (msg); - - // Just keep waiting if there's a problem - if (msgLen <= 0) - break; - - // Is the message for the right thing? - if (msg.toString().compareTo ("TIME_UPDATE_REQUEST") != 0) { - System.err.println("Unknown message: \"" + msg + '\"'); - this.peer().send("\n"); // send so other side isn't stuck - break; - } - - // Get local time - long time = System.currentTimeMillis(); - - // Send as a string - this.peer ().send ("" + time); - - ACE.DEBUG("Time: " + new Date(time)); - } - } - catch (NullPointerException e) - { - ACE.ERROR ("Connection reset by peer"); - } - catch (IOException e) - { - ACE.ERROR (e); - } - finally - { - try - { - this.peer ().close (); - } - catch (IOException e) - { - } - } - } -} |