You can subscribe to this list here.
2006 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(123) |
Dec
(100) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2007 |
Jan
(12) |
Feb
(80) |
Mar
(35) |
Apr
|
May
|
Jun
(28) |
Jul
(10) |
Aug
(6) |
Sep
|
Oct
|
Nov
(16) |
Dec
|
2008 |
Jan
|
Feb
|
Mar
(8) |
Apr
|
May
|
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
|
Nov
(1) |
Dec
(6) |
2009 |
Jan
(20) |
Feb
(1) |
Mar
(19) |
Apr
(12) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(3) |
Dec
|
From: Jonathan L. <le...@us...> - 2009-11-19 01:39:05
|
Update of /cvsroot/pyxida/AsyncJ/src/edu/harvard/syrah/sbon/async In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv32476/edu/harvard/syrah/sbon/async Modified Files: Config.java Log Message: new methods for helping to test for localhost Index: Config.java =================================================================== RCS file: /cvsroot/pyxida/AsyncJ/src/edu/harvard/syrah/sbon/async/Config.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** Config.java 20 Jul 2007 13:32:29 -0000 1.2 --- Config.java 19 Nov 2009 01:38:47 -0000 1.3 *************** *** 64,68 **** //log.debug("cleanProps=" + cleanProps.toString()); } catch (FileNotFoundException e1) { ! log.error("Could not open config file: " + e1); } catch (IOException e2) { log.error("Could not load config properties from file: " + e2); --- 64,68 ---- //log.debug("cleanProps=" + cleanProps.toString()); } catch (FileNotFoundException e1) { ! log.warn("Could not open config file: " + e1); } catch (IOException e2) { log.error("Could not load config properties from file: " + e2); |
From: Jonathan L. <le...@us...> - 2009-11-19 01:39:03
|
Update of /cvsroot/pyxida/AsyncJ/src/edu/harvard/syrah/sbon/async/comm In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv32476/edu/harvard/syrah/sbon/async/comm Modified Files: AddressIF.java Comm.java CommIF.java NetAddress.java Log Message: new methods for helping to test for localhost Index: Comm.java =================================================================== RCS file: /cvsroot/pyxida/AsyncJ/src/edu/harvard/syrah/sbon/async/comm/Comm.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** Comm.java 23 Apr 2009 20:55:47 -0000 1.2 --- Comm.java 19 Nov 2009 01:38:47 -0000 1.3 *************** *** 9,20 **** import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.ClosedChannelException; import java.nio.channels.SelectableChannel; import java.nio.channels.SelectionKey; import edu.harvard.syrah.prp.Log; import edu.harvard.syrah.sbon.async.EL; ! import edu.harvard.syrah.sbon.async.CallbacksIF.*; /** --- 9,28 ---- import java.io.IOException; + import java.net.InetAddress; + import java.net.NetworkInterface; + import java.net.SocketException; + import java.net.UnknownHostException; import java.nio.ByteBuffer; import java.nio.channels.ClosedChannelException; import java.nio.channels.SelectableChannel; import java.nio.channels.SelectionKey; + import java.util.Enumeration; import edu.harvard.syrah.prp.Log; + import edu.harvard.syrah.sbon.async.CBResult; import edu.harvard.syrah.sbon.async.EL; ! import edu.harvard.syrah.sbon.async.CallbacksIF.CB0; ! import edu.harvard.syrah.sbon.async.CallbacksIF.CB1; ! import edu.harvard.syrah.sbon.async.CallbacksIF.CB1R; /** *************** *** 35,38 **** --- 43,48 ---- public NetAddress localNetAddress; + public NetAddress localNetPublicAddress; + // The handler for accepting incoming connections protected AcceptConnHandler acceptConnHandler = null; *************** *** 42,45 **** --- 52,60 ---- return localNetAddress; } + + public AddressIF getLocalPublicAddress() { + assert localNetPublicAddress != null : "local public addr is null"; + return localNetPublicAddress; + } public int getLocalPort() { return localNetAddress.getPort(); } *************** *** 51,67 **** this.localNetAddress = (NetAddress) localAddress; } /* * @see edu.harvard.syrah.sbon.communication.CommIF#init(edu.harvard.syrah.sbon.communication.AddressIF) */ ! public void initServer(AddressIF bindAddress, CB0 cbInit) { if (!(bindAddress instanceof NetAddress)) log.error("Can only understand NetAddresses."); log.debug("initServer with bindAddress=" + bindAddress); ! NetAddress bindNetAddress = (NetAddress) bindAddress; setLocalAddress(AddressFactory.createLocal(bindNetAddress.getPort())); ! // Don't pass in a net handler here -- no one's interested ! acceptConnHandler = getAcceptConnHandler(bindNetAddress, cbInit); } --- 66,110 ---- this.localNetAddress = (NetAddress) localAddress; } + + public void setLocalPublicAddress(AddressIF localAddress) { + if (!(localAddress instanceof NetAddress)) + log.error("Can only understand NetAddresses."); + + this.localNetPublicAddress = (NetAddress) localAddress; + } + /* * @see edu.harvard.syrah.sbon.communication.CommIF#init(edu.harvard.syrah.sbon.communication.AddressIF) */ ! public void initServer(AddressIF bindAddress, final CB0 cbInit) { if (!(bindAddress instanceof NetAddress)) log.error("Can only understand NetAddresses."); log.debug("initServer with bindAddress=" + bindAddress); ! final NetAddress bindNetAddress = (NetAddress) bindAddress; setLocalAddress(AddressFactory.createLocal(bindNetAddress.getPort())); ! String external = getCurrentEnvironmentNetworkIp(); ! AddressFactory.createResolved (external, new CB1<AddressIF>() { ! protected void cb (CBResult result, AddressIF addr) { ! switch (result.state) { ! case OK: { ! log.warn ("local addr "+addr); ! setLocalPublicAddress ((NetAddress)addr); ! ! // Don't pass in a net handler here -- no one's interested ! acceptConnHandler = getAcceptConnHandler(bindNetAddress, cbInit); ! ! break; ! } ! case ERROR: ! case TIMEOUT: { ! log.error ("Could not determine public address"); ! } ! } ! } ! }); ! ! } *************** *** 236,239 **** --- 279,309 ---- public String toString() { return String.valueOf(buffer.capacity()); } } + + // hack to get external public IP + public static String getCurrentEnvironmentNetworkIp() { + Enumeration<NetworkInterface> netInterfaces = null; + try { + netInterfaces = NetworkInterface.getNetworkInterfaces(); + } catch (SocketException e) { + log.error("Somehow we have a socket error..."); + } + + while (netInterfaces.hasMoreElements()) { + NetworkInterface ni = netInterfaces.nextElement(); + Enumeration<InetAddress> address = ni.getInetAddresses(); + while (address.hasMoreElements()) { + InetAddress addr = address.nextElement(); + if (!addr.isLoopbackAddress() && !addr.isSiteLocalAddress() + && !(addr.getHostAddress().indexOf(":") > -1)) { + return addr.getHostAddress(); + } + } + } + try { + return InetAddress.getLocalHost().getHostAddress(); + } catch (UnknownHostException e) { + return "127.0.0.1"; + } + } } Index: CommIF.java =================================================================== RCS file: /cvsroot/pyxida/AsyncJ/src/edu/harvard/syrah/sbon/async/comm/CommIF.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** CommIF.java 4 Jun 2007 17:55:41 -0000 1.1 --- CommIF.java 19 Nov 2009 01:38:47 -0000 1.2 *************** *** 29,32 **** --- 29,34 ---- public AddressIF getLocalAddress(); + public AddressIF getLocalPublicAddress(); + public void setLocalAddress(AddressIF localAddress); Index: NetAddress.java =================================================================== RCS file: /cvsroot/pyxida/AsyncJ/src/edu/harvard/syrah/sbon/async/comm/NetAddress.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** NetAddress.java 4 Jun 2007 17:55:41 -0000 1.1 --- NetAddress.java 19 Nov 2009 01:38:47 -0000 1.2 *************** *** 303,309 **** NetAddress cmpAddress = (NetAddress) obj; ! if (unresolvable) return hostname.equals(cmpAddress.hostname); ! return byteIPAddr[0] == cmpAddress.byteIPAddr[0] && byteIPAddr[1] == cmpAddress.byteIPAddr[1] && byteIPAddr[2] == cmpAddress.byteIPAddr[2] && byteIPAddr[3] == cmpAddress.byteIPAddr[3] --- 303,319 ---- NetAddress cmpAddress = (NetAddress) obj; ! //log.warn("equals"); ! if (unresolvable) { ! log.warn("unresolve"); return hostname.equals(cmpAddress.hostname); ! } ! //log.warn("bytes"); ! ! /* ! for (int i = 0; i < 4; i++) { ! log.warn (i+": "+byteIPAddr[i]+" , "+cmpAddress.byteIPAddr[i]); ! } ! log.warn ("port: "+ port +" , "+cmpAddress.port); ! */ return byteIPAddr[0] == cmpAddress.byteIPAddr[0] && byteIPAddr[1] == cmpAddress.byteIPAddr[1] && byteIPAddr[2] == cmpAddress.byteIPAddr[2] && byteIPAddr[3] == cmpAddress.byteIPAddr[3] *************** *** 311,314 **** --- 321,349 ---- } + public boolean isSameHost(Object obj) { + assert obj instanceof NetAddress : "Cannot compare NetAddress to non-NetAddress."; + + NetAddress cmpAddress = (NetAddress) obj; + + //log.warn("equals"); + if (unresolvable) { + log.warn("unresolve"); + return hostname.equals(cmpAddress.hostname); + } + /* + log.warn("bytes"); + + for (int i = 0; i < 4; i++) { + log.warn (i+": "+byteIPAddr[i]+" , "+cmpAddress.byteIPAddr[i]); + } + log.warn ("port: "+ port +" , "+cmpAddress.port); + */ + return byteIPAddr[0] == cmpAddress.byteIPAddr[0] && byteIPAddr[1] == cmpAddress.byteIPAddr[1] + && byteIPAddr[2] == cmpAddress.byteIPAddr[2] && byteIPAddr[3] == cmpAddress.byteIPAddr[3]; + } + + + + public int compareTo(Object obj) { assert obj instanceof NetAddress : "Cannot compare NetAddress to non-NetAddress."; Index: AddressIF.java =================================================================== RCS file: /cvsroot/pyxida/AsyncJ/src/edu/harvard/syrah/sbon/async/comm/AddressIF.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** AddressIF.java 14 Aug 2007 11:18:14 -0000 1.2 --- AddressIF.java 19 Nov 2009 01:38:47 -0000 1.3 *************** *** 26,30 **** public boolean isResolved(); ! /** * Determines if two addresses are the same. --- 26,30 ---- public boolean isResolved(); ! /** * Determines if two addresses are the same. *************** *** 34,37 **** --- 34,39 ---- public boolean equals(Object obj); + public boolean isSameHost(Object obj); + public String toString(); |
From: Jonathan L. <le...@us...> - 2009-11-19 01:39:00
|
Update of /cvsroot/pyxida/AsyncJ/src/edu/harvard/syrah/sbon/async/comm/obj In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv32476/edu/harvard/syrah/sbon/async/comm/obj Modified Files: ObjComm.java Log Message: new methods for helping to test for localhost Index: ObjComm.java =================================================================== RCS file: /cvsroot/pyxida/AsyncJ/src/edu/harvard/syrah/sbon/async/comm/obj/ObjComm.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** ObjComm.java 14 Aug 2007 11:18:13 -0000 1.3 --- ObjComm.java 19 Nov 2009 01:38:47 -0000 1.4 *************** *** 44,55 **** private static final long SEND_RETRY_DELAY = 2500; ! // Timeout for all request/response calls (3min) ! private static final long RR_MSG_TIMEOUT = 180000; // Timeout for the CB that handles an RR ObjComm msg (30s) ! private static final long RR_CB_TIMEOUT = 30000; ! // Timeout for the CB that handles a regular ObjComm msg (60s) ! private static final long CB_TIMEOUT = 60 * 1000; private static final int MAX_OUTSTANDING_CBS = 3; // was: 10 --- 44,55 ---- private static final long SEND_RETRY_DELAY = 2500; ! // Timeout for all request/response calls (30s) ! private static final long RR_MSG_TIMEOUT = 10000; // Timeout for the CB that handles an RR ObjComm msg (30s) ! private static final long RR_CB_TIMEOUT = 10000; ! // Timeout for the CB that handles a regular ObjComm msg (30s) ! private static final long CB_TIMEOUT = 30000; private static final int MAX_OUTSTANDING_CBS = 3; // was: 10 |
From: Jonathan L. <le...@us...> - 2009-04-23 20:56:06
|
Update of /cvsroot/pyxida/AsyncJ/src/edu/harvard/syrah/sbon/async In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv31027/edu/harvard/syrah/sbon/async Modified Files: EL.java Sync.java Log Message: converted Sync.callBlocking to use thread pool (untested) Index: EL.java =================================================================== RCS file: /cvsroot/pyxida/AsyncJ/src/edu/harvard/syrah/sbon/async/EL.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** EL.java 14 Aug 2007 11:18:13 -0000 1.2 --- EL.java 23 Apr 2009 20:55:47 -0000 1.3 *************** *** 317,321 **** SelectionKey key = channel.keyFor(selector); ! assert key != null; // Deregister with selector while preserving previous registrations channel.register(selector, key.interestOps() & (~selectionKey), channelSub); --- 317,324 ---- SelectionKey key = channel.keyFor(selector); ! if (key == null) { ! log.warn("key==null channel=" + channel + " Ignoring."); ! return; ! } // Deregister with selector while preserving previous registrations channel.register(selector, key.interestOps() & (~selectionKey), channelSub); Index: Sync.java =================================================================== RCS file: /cvsroot/pyxida/AsyncJ/src/edu/harvard/syrah/sbon/async/Sync.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** Sync.java 15 Jun 2007 16:13:23 -0000 1.2 --- Sync.java 23 Apr 2009 20:55:47 -0000 1.3 *************** *** 9,12 **** --- 9,13 ---- import edu.harvard.syrah.sbon.async.CallbacksIF.CB0; + import java.util.concurrent.Executors; public class Sync { *************** *** 14,17 **** --- 15,22 ---- private static int threadCounter = 0; + + static final java.util.concurrent.ScheduledExecutorService scheduler = + Executors.newScheduledThreadPool(10); + /* *************** *** 42,46 **** }; ! blockingThread.run(); } } --- 47,54 ---- }; ! //blockingThread.run(); ! ! scheduler.execute (blockingThread); ! } } |
From: Jonathan L. <le...@us...> - 2009-04-23 20:55:59
|
Update of /cvsroot/pyxida/AsyncJ/src/edu/harvard/syrah/sbon/async/comm In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv31027/edu/harvard/syrah/sbon/async/comm Modified Files: Comm.java Log Message: converted Sync.callBlocking to use thread pool (untested) Index: Comm.java =================================================================== RCS file: /cvsroot/pyxida/AsyncJ/src/edu/harvard/syrah/sbon/async/comm/Comm.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** Comm.java 4 Jun 2007 17:55:41 -0000 1.1 --- Comm.java 23 Apr 2009 20:55:47 -0000 1.2 *************** *** 182,186 **** EL.get().registerCommCB(channel, SelectionKey.OP_READ); } catch (ClosedChannelException e) { ! log.error(e.toString()); } } --- 182,186 ---- EL.get().registerCommCB(channel, SelectionKey.OP_READ); } catch (ClosedChannelException e) { ! log.error("remoteAddr="+remoteAddr+" "+e.toString()); } } *************** *** 190,194 **** EL.get().deregisterCommCB(channel, SelectionKey.OP_READ); } catch (ClosedChannelException e) { ! log.error(e.toString()); } } --- 190,194 ---- EL.get().deregisterCommCB(channel, SelectionKey.OP_READ); } catch (ClosedChannelException e) { ! log.error("remoteAddr="+remoteAddr+" "+e.toString()); } } *************** *** 217,221 **** EL.get().registerCommCB(channel, SelectionKey.OP_WRITE); } catch (ClosedChannelException e) { ! log.warn(e.toString()); } } --- 217,221 ---- EL.get().registerCommCB(channel, SelectionKey.OP_WRITE); } catch (ClosedChannelException e) { ! log.warn("remoteAddr="+remoteAddr+" "+e.toString()); } } *************** *** 226,230 **** EL.get().deregisterCommCB(channel, SelectionKey.OP_WRITE); } catch (ClosedChannelException e) { ! log.warn(e.toString()); } } --- 226,230 ---- EL.get().deregisterCommCB(channel, SelectionKey.OP_WRITE); } catch (ClosedChannelException e) { ! log.warn("remoteAddr="+remoteAddr+" "+e.toString()); } } |
From: Jonathan L. <le...@us...> - 2009-04-13 16:08:22
|
Update of /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv17855/src/edu/harvard/syrah/pyxida Modified Files: Pyxida.java Log Message: ping code stable and appears to give correct results Index: Pyxida.java =================================================================== RCS file: /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/Pyxida.java,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -d -r1.27 -r1.28 *** Pyxida.java 9 Apr 2009 19:47:53 -0000 1.27 --- Pyxida.java 13 Apr 2009 16:08:02 -0000 1.28 *************** *** 42,46 **** private static final int MINOR_VERSION = 1; private static final int MINOR_MINOR_VERSION = 5; ! public static final String VERSION = MAJOR_VERSION + "." + MINOR_VERSION + "." + MINOR_MINOR_VERSION; static { --- 42,47 ---- private static final int MINOR_VERSION = 1; private static final int MINOR_MINOR_VERSION = 5; ! private static final String VERSION_COMMENT = "a"; ! public static final String VERSION = MAJOR_VERSION + "." + MINOR_VERSION + "." + MINOR_MINOR_VERSION+"."+VERSION_COMMENT; static { |
From: Jonathan L. <le...@us...> - 2009-04-13 16:08:17
|
Update of /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/ping In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv17855/src/edu/harvard/syrah/pyxida/ping Modified Files: ICMPPinger.java JpcapPinger.java Log Message: ping code stable and appears to give correct results Index: ICMPPinger.java =================================================================== RCS file: /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/ping/ICMPPinger.java,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** ICMPPinger.java 10 Apr 2009 17:52:22 -0000 1.17 --- ICMPPinger.java 13 Apr 2009 16:08:02 -0000 1.18 *************** *** 44,47 **** --- 44,53 ---- super.init(defaultPingAddr, cbDone); } + + // TODO something higher up is asking us to ping 127.0.0.1. + // It shouldn't be. + // Hmm. It's actually: Ping to /127.0.1.1:55506 failed on + // planetlab-4.imperial.ac.uk + // This address is working from the command line. public void ping(AddressIF remoteNode, final CB1<Double> cbPing) throws UnsupportedOperationException { *************** *** 67,70 **** --- 73,77 ---- // since it appears we need to do it at the app level :-( pd.sendTS = System.currentTimeMillis(); + if(rawSender!=null) { rawSender.sendPacket(pd.sendPacket); *************** *** 78,84 **** ICMPPacket icmp = (ICMPPacket) pd.sendPacket; ! String data = new String (icmp.data); ! log.debug("SENT data="+data+" seq="+icmp.seq+" id="+icmp.id+ " orig="+icmp.orig_timestamp+" trans="+icmp.trans_timestamp+" recv="+icmp.recv_timestamp); //pd.sendTS = System.nanoTime() / 1000; --- 85,91 ---- ICMPPacket icmp = (ICMPPacket) pd.sendPacket; ! //String data = new String (icmp.data); ! log.debug("SENT seq="+icmp.seq+" id="+icmp.id+ " orig="+icmp.orig_timestamp+" trans="+icmp.trans_timestamp+" recv="+icmp.recv_timestamp); //pd.sendTS = System.nanoTime() / 1000; *************** *** 184,191 **** } ! String data = new String (icmp.data); log.debug("Finished parseICMP icmp="+icmp.toString()); ! log.debug("RECV data="+data+" seq= "+icmp.seq+" id="+icmp.id+ " orig="+icmp.orig_timestamp+" trans="+icmp.trans_timestamp+" recv="+icmp.recv_timestamp); /* --- 191,198 ---- } ! //String data = new String (icmp.data); log.debug("Finished parseICMP icmp="+icmp.toString()); ! log.debug("RECV seq= "+icmp.seq+" id="+icmp.id+ " orig="+icmp.orig_timestamp+" trans="+icmp.trans_timestamp+" recv="+icmp.recv_timestamp); /* Index: JpcapPinger.java =================================================================== RCS file: /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/ping/JpcapPinger.java,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** JpcapPinger.java 10 Apr 2009 17:52:22 -0000 1.12 --- JpcapPinger.java 13 Apr 2009 16:08:02 -0000 1.13 *************** *** 342,346 **** */ ! public JpcapPingData addJpcapRequest(final short ident, AddressIF remoteNode, final CB1<Double> cbPing) { final JpcapPingData pd = new JpcapPingData(); pd.pingAddr = remoteNode; --- 342,346 ---- */ ! public JpcapPingData addJpcapRequest(final short ident, final AddressIF remoteNode, final CB1<Double> cbPing) { final JpcapPingData pd = new JpcapPingData(); pd.pingAddr = remoteNode; *************** *** 355,366 **** if (pd.recvTS > 0) { assert pd.sendTS > 0; ! assert pd.recvTS > pd.sendTS : "send TS > recv TS ?"; long lat = pd.recvTS - pd.sendTS; ! log.debug("lat=" + lat + " pd.recvTS=" + pd.recvTS); //cbPing.call(result, lat / 1000.0); // already in milliseconds cbPing.call(result, (double)lat); } else { ! log.debug("ignoring recvTS="+pd.recvTS); } break; --- 355,385 ---- if (pd.recvTS > 0) { assert pd.sendTS > 0; ! long lat = pd.recvTS - pd.sendTS; ! ! // Doing a little fudging because kernel can timestamp ! // ping receipts from nodes in the same cluster ! // a millisecond or two earlier than we stamped the ! // send on the way out. ! ! if (lat < -3) { ! String msg = "Ignoring latency node="+remoteNode+" recvTS="+pd.recvTS+" sendTS="+pd.sendTS; ! log.warn (msg); ! cbPing.call(CBResult.ERROR("Invalid latency: "+msg), 0.); ! return; ! } ! ! if (lat >= -3 && lat <= 0) { ! // TODO check that in same subnet ! log.info ("Nearby node negative latency="+remoteNode+" recvTS="+pd.recvTS+" sendTS="+pd.sendTS); ! lat = 1; ! } ! ! log.debug("node="+remoteNode+" lat=" + lat + " pd.recvTS=" + pd.recvTS); //cbPing.call(result, lat / 1000.0); // already in milliseconds cbPing.call(result, (double)lat); } else { ! log.debug("ignoring negative recvTS="+pd.recvTS); } break; |
From: Jonathan L. <le...@us...> - 2009-04-10 17:58:37
|
Update of /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/ping In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv21040/src/edu/harvard/syrah/pyxida/ping Modified Files: TCPSynPinger.java Log Message: fixed method in TCPSyn Index: TCPSynPinger.java =================================================================== RCS file: /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/ping/TCPSynPinger.java,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** TCPSynPinger.java 9 Apr 2009 19:47:51 -0000 1.12 --- TCPSynPinger.java 10 Apr 2009 17:58:28 -0000 1.13 *************** *** 44,48 **** public void ping(AddressIF remoteNode, final CB1<Double> cbPing) throws UnsupportedOperationException { log.debug("Sending new ping to remoteNode=" + remoteNode + ":" + PING_DST_PORT + " using TCPSyn"); ! JpcapPingData pd = addJpcapRequest(remoteNode, cbPing); pd.packetType = TCPPacket.class; sendTCPSyn(pd); --- 44,48 ---- public void ping(AddressIF remoteNode, final CB1<Double> cbPing) throws UnsupportedOperationException { log.debug("Sending new ping to remoteNode=" + remoteNode + ":" + PING_DST_PORT + " using TCPSyn"); ! JpcapPingData pd = addJpcapRequest((short)0, remoteNode, cbPing); pd.packetType = TCPPacket.class; sendTCPSyn(pd); *************** *** 96,100 **** */ ! protected long parsePacket(Packet p) { log.debug("p=" + p + " p.class=" + (p != null ? p.getClass() : null)); --- 96,100 ---- */ ! protected long parsePacket(short ident, Packet p) { log.debug("p=" + p + " p.class=" + (p != null ? p.getClass() : null)); |
From: Jonathan L. <le...@us...> - 2009-04-10 17:52:34
|
Update of /cvsroot/pyxida/Pyxida/config In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv19808/config Modified Files: pyxida.cfg Log Message: Ping using jpcap now returns latency to the nearest millisecond. It is currently being run overnight to test for problems. Setting the timestamps in the kernel proved to be futile using Jpcap. They weren't being set before, and they aren't being set now. As before, they are being set in the application on the way out, but by the kernel on the way in. The pcap filter was tightened so we are notified of fewer packets. The whole thing still drops more packets than ping, and I don't know why. Index: pyxida.cfg =================================================================== RCS file: /cvsroot/pyxida/Pyxida/config/pyxida.cfg,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** pyxida.cfg 11 Mar 2009 16:16:12 -0000 1.15 --- pyxida.cfg 10 Apr 2009 17:52:22 -0000 1.16 *************** *** 13,17 **** # Port number over which overlay communication will take place. # default=55504 ! # pyxida.port=55500 # Api.Port = integer in port range --- 13,17 ---- # Port number over which overlay communication will take place. # default=55504 ! pyxida.port=55506 # Api.Port = integer in port range *************** *** 26,30 **** # pyxida.bootstraplist=glenora.eecs.harvard.edu sb01.eecs.harvard.edu sb02.eecs.harvard.edu sb10.eecs.harvard.edu sb11.eecs.harvard.edu ! pyxida.bootstraplist=mitsoko.nrcc.noklab.com #pyxida.bootstraplist=righthand.eecs.harvard.edu pl1.ucs.indiana.edu neu1.6planetlab.edu.cn ds-pl1.technion.ac.il pl1.cs.utk.edu planet1.scs.cs.nyu.edu planet3.seattle.intel-research.net planetlab-01.naist.jp planetlab10.millennium.berkeley.edu planetlab1.cis.upenn.edu planetlab1.csail.mit.edu planetlab1.cs.duke.edu planetlab1.flux.utah.edu planetlab-1.imperial.ac.uk planetlab-2.cs.princeton.edu planetlab2.cs.umass.edu planetlab2.upc.es ricepl-1.cs.rice.edu vn2.cs.wustl.edu --- 26,32 ---- # pyxida.bootstraplist=glenora.eecs.harvard.edu sb01.eecs.harvard.edu sb02.eecs.harvard.edu sb10.eecs.harvard.edu sb11.eecs.harvard.edu ! #pyxida.bootstraplist=mitsoko.nrcc.noklab.com ! pyxida.bootstraplist=128.42.142.42 ! #pyxida.bootstraplist=righthand.eecs.harvard.edu pl1.ucs.indiana.edu neu1.6planetlab.edu.cn ds-pl1.technion.ac.il pl1.cs.utk.edu planet1.scs.cs.nyu.edu planet3.seattle.intel-research.net planetlab-01.naist.jp planetlab10.millennium.berkeley.edu planetlab1.cis.upenn.edu planetlab1.csail.mit.edu planetlab1.cs.duke.edu planetlab1.flux.utah.edu planetlab-1.imperial.ac.uk planetlab-2.cs.princeton.edu planetlab2.cs.umass.edu planetlab2.upc.es ricepl-1.cs.rice.edu vn2.cs.wustl.edu *************** *** 38,42 **** # accurate and consistent results but requires # that you run the code as root. ! pyxida.use_icmp=false # Hostname of a centralised log server that periodically logs the coordinate --- 40,44 ---- # accurate and consistent results but requires # that you run the code as root. ! pyxida.use_icmp=true # Hostname of a centralised log server that periodically logs the coordinate |
From: Jonathan L. <le...@us...> - 2009-04-10 17:52:31
|
Update of /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/ping In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv19808/src/edu/harvard/syrah/pyxida/ping Modified Files: ICMPPinger.java JpcapPinger.java Log Message: Ping using jpcap now returns latency to the nearest millisecond. It is currently being run overnight to test for problems. Setting the timestamps in the kernel proved to be futile using Jpcap. They weren't being set before, and they aren't being set now. As before, they are being set in the application on the way out, but by the kernel on the way in. The pcap filter was tightened so we are notified of fewer packets. The whole thing still drops more packets than ping, and I don't know why. Index: ICMPPinger.java =================================================================== RCS file: /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/ping/ICMPPinger.java,v retrieving revision 1.16 retrieving revision 1.17 diff -C2 -d -r1.16 -r1.17 *** ICMPPinger.java 9 Apr 2009 19:47:52 -0000 1.16 --- ICMPPinger.java 10 Apr 2009 17:52:22 -0000 1.17 *************** *** 39,42 **** --- 39,43 ---- protected static JpcapSender rawSender=null; + protected static short counter = 1; public void init(AddressIF defaultPingAddr, final CB0 cbDone) { *************** *** 47,54 **** log.debug("Sending new ping to remoteNode=" + remoteNode + " using ICMP"); ! JpcapPingData pd = addJpcapRequest(remoteNode, cbPing); pd.packetType = ICMPPacket.class; ! pd.sendPacket = createICMP(pd.pingAddr); boolean usedRawSender = false; try { --- 48,59 ---- log.debug("Sending new ping to remoteNode=" + remoteNode + " using ICMP"); ! short ident = counter; ! counter++; ! if (counter > 8192) counter=0; ! ! JpcapPingData pd = addJpcapRequest(ident, remoteNode, cbPing); pd.packetType = ICMPPacket.class; ! pd.sendPacket = createICMP(ident, pd.pingAddr); boolean usedRawSender = false; try { *************** *** 59,62 **** --- 64,70 ---- rawSender=JpcapSender.openRawSocket(); } + // we set the timestamp before sending the packet + // since it appears we need to do it at the app level :-( + pd.sendTS = System.currentTimeMillis(); if(rawSender!=null) { rawSender.sendPacket(pd.sendPacket); *************** *** 68,72 **** log.warn("Failed sending packet: " + e + " "+ e.getMessage()); } ! pd.sendTS = System.nanoTime() / 1000; log.debug("sendPacket [raw="+usedRawSender+"]=" + pd.sendPacket + " sendTS=" + pd.sendTS); assert pd.sendTS > 0; --- 76,87 ---- log.warn("Failed sending packet: " + e + " "+ e.getMessage()); } ! ! ICMPPacket icmp = (ICMPPacket) pd.sendPacket; ! String data = new String (icmp.data); ! ! log.debug("SENT data="+data+" seq="+icmp.seq+" id="+icmp.id+ " orig="+icmp.orig_timestamp+" trans="+icmp.trans_timestamp+" recv="+icmp.recv_timestamp); ! ! //pd.sendTS = System.nanoTime() / 1000; ! log.debug("sendPacket [raw="+usedRawSender+"]=" + pd.sendPacket + " sendTS=" + pd.sendTS); assert pd.sendTS > 0; *************** *** 78,105 **** } ! private ICMPPacket createICMP(AddressIF addr) { assert device != null; log.debug("Creating ICMP ping to " + addr); ICMPPacket icmp = new ICMPPacket(); - //icmp.type = ICMPPacket.ICMP_ECHO; - //icmp.type = ICMPPacket.ICMP_TSTAMP; icmp.type = ICMPPacket.ICMP_ECHO; ! icmp.seq = (short) Pyxida.random.nextInt(); ! icmp.id = (short) Pyxida.random.nextInt(); ! ! icmp.orig_timestamp=1; ! icmp.trans_timestamp=1; ! icmp.recv_timestamp=1; ! ! icmp.setIPv4Parameter(0,false,false,false,0,false,false,false,0,1010101,100,IPPacket.IPPROTO_ICMP, ! thisIP, addr.getInetAddress()); ! ! // icmp.setIPv4Parameter(0, false, false, false, 0, false, false, false, 0, 0, ! //100, IPPacket.IPPROTO_ICMP, thisIP, addr.getInetAddress()); ! ! icmp.data = "data".getBytes(); EthernetPacket ether = new EthernetPacket(); --- 93,132 ---- } ! private ICMPPacket createICMP(short ident, AddressIF addr) { assert device != null; log.debug("Creating ICMP ping to " + addr); + /* + * Ledlie attempted using ICMP_TSTAMP so as to have + * recv/orig/trans_timestamp set, but this didn't occur. + */ + ICMPPacket icmp = new ICMPPacket(); icmp.type = ICMPPacket.ICMP_ECHO; + + // We are not getting back ICMP_TSTAMPREPLYs + // when sending TSTAMPs, nor are the timestamps being set :-( + //icmp.type = ICMPPacket.ICMP_TSTAMP; ! //icmp.seq = (short)0; ! //icmp.seq = (short)0; ! //icmp.id = ident; ! ! icmp.seq = (short)ident; ! icmp.id = (short) (Pyxida.random.nextInt (8192)); ! ! // This does not work :-( ! //icmp.orig_timestamp = (int) System.currentTimeMillis(); ! ! icmp.setIPv4Parameter ! (0, false, false, false, 0, false, false, false, 0, 0, ! 100, IPPacket.IPPROTO_ICMP, thisIP, addr.getInetAddress()); ! ! //icmp.data = ("data-"+ident).getBytes(); ! ! // Weird. When this is longer, we tend to get more responses. ! // Ping has a 64 byte payload. ! icmp.data = ("datadatadatadatadatadatadatadatadatadatadatadatadatadata").getBytes(); EthernetPacket ether = new EthernetPacket(); *************** *** 114,118 **** } ! protected long parsePacket(Packet p) { log.debug("p=" + p + " p.class=" + (p != null ? p.getClass() : null)); --- 141,145 ---- } ! protected long parsePacket(short ident, Packet p) { log.debug("p=" + p + " p.class=" + (p != null ? p.getClass() : null)); *************** *** 138,142 **** long usec = p.usec; log.debug("ICMP_ECHOREPLY: " + icmp.src_ip + " sec=" + sec + " usec=" + usec); ! recvTS = (sec * 1000 * 1000) + usec; log.debug("recvTS=" + recvTS); break; --- 165,171 ---- long usec = p.usec; log.debug("ICMP_ECHOREPLY: " + icmp.src_ip + " sec=" + sec + " usec=" + usec); ! //recvTS = (sec * 1000 * 1000) + usec; ! // convert to milliseconds ! recvTS = (sec * 1000) + (usec/1000); log.debug("recvTS=" + recvTS); break; *************** *** 145,149 **** break; case ICMPPacket.ICMP_TSTAMP: ! log.debug("got TSTAMPREPLY"); break; case ICMPPacket.ICMP_ECHO: --- 174,178 ---- break; case ICMPPacket.ICMP_TSTAMP: ! log.debug("got TSTAMP"); break; case ICMPPacket.ICMP_ECHO: *************** *** 155,160 **** } log.debug("Finished parseICMP icmp="+icmp.toString()); ! log.debug("seq= "+icmp.seq+" id="+icmp.id+ " orig="+icmp.orig_timestamp+" trans="+icmp.trans_timestamp+" recv="+icmp.recv_timestamp); return recvTS; } --- 184,199 ---- } + String data = new String (icmp.data); + log.debug("Finished parseICMP icmp="+icmp.toString()); ! log.debug("RECV data="+data+" seq= "+icmp.seq+" id="+icmp.id+ " orig="+icmp.orig_timestamp+" trans="+icmp.trans_timestamp+" recv="+icmp.recv_timestamp); ! ! /* ! if (icmp.id != ident) { ! log.warn ("RECV icmp.id="+icmp.id+"!=ident="+ident); ! return 0; ! } ! */ ! return recvTS; } Index: JpcapPinger.java =================================================================== RCS file: /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/ping/JpcapPinger.java,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** JpcapPinger.java 9 Apr 2009 19:47:52 -0000 1.11 --- JpcapPinger.java 10 Apr 2009 17:52:22 -0000 1.12 *************** *** 31,34 **** --- 31,35 ---- import jpcap.JpcapCaptor; import jpcap.JpcapSender; + import jpcap.PacketReceiver; import jpcap.NetworkInterface; import jpcap.NetworkInterfaceAddress; *************** *** 207,211 **** public void run() { try { ! captor.setFilter("dst host " + thisIP.getHostAddress() + " and (icmp or (tcp and tcp[tcpflags] & (tcp-syn|tcp-ack) != 0))", true); //captor.setFilter("icmp", true); } catch (IOException ex) { --- 208,286 ---- public void run() { try { ! //captor.setFilter("dst host " + thisIP.getHostAddress() + " and (icmp or (tcp and tcp[tcpflags] & (tcp-syn|tcp-ack) != 0))", true); ! ! captor.setFilter("dst host " + thisIP.getHostAddress() + " and icmp and icmp[icmptype] == icmp-echoreply", false); ! ! //captor.setFilter("icmp", true); ! } catch (IOException ex) { ! log.error ("Could not set captor filter: "+ex); ! } ! ! //captor.setNonBlockingMode (true); ! ! // It appears that the handler is only called so fast ! // and that this misses some packets if we aren't ready. ! // We try to only receive packets we might be interested in ! // with a stricter filter above :-( ! ! captor.setPacketReadTimeout (0); ! PingPacketReceiver handler = new PingPacketReceiver (); ! //captor.processPacket (0, handler); ! captor.loopPacket (-1, handler); ! ! log.error ("exited loop packet handler"); ! // while (true) { } ! ! } ! ! class PingPacketReceiver implements PacketReceiver { ! ! public void receivePacket (final Packet packet) { ! ! log.debug("in receivePacket packet="+packet); ! ! if (packet != null && packet instanceof ICMPPacket) { ! IPPacket ip = (IPPacket) packet; ! ! if (ip.src_ip != null) { ! log.debug("Captured a packet from src=" + ip.src_ip); ! ! synchronized(currentPingList) { ! boolean foundMatch = false; ! for (Iterator<JpcapPingData> it = currentPingList.iterator(); it.hasNext();) { ! ! // Note that this is not very robust: ! // we will ignore both packets if they cross in flight ! // and we receive one ident before the other. ! // That seems better than wrongly assuming low or high latency. ! // A perhaps better approach would be to parse the packet first, ! // extract the ident and the timestamps, and then match ! // it up with the right pending request to this node. ! // However, parsing outside of the handler thread ! // seems like the right idea. ! ! JpcapPingData currentPing = it.next(); ! if (ip.getClass() == currentPing.packetType && ip.src_ip.equals(currentPing.pingAddr.getInetAddress())) { ! it.remove(); ! currentPing.recvPacket = ip; ! log.debug("Found a matching ping request"); ! foundMatch = true; ! EL.get().registerTimerCB(currentPing.cbDone); ! } ! } ! } ! } ! } ! } ! } ! ! /* ! public void run() { ! try { ! //captor.setFilter("dst host " + thisIP.getHostAddress() + " and (icmp or (tcp and tcp[tcpflags] & (tcp-syn|tcp-ack) != 0))", true); ! //captor.setFilter("dst host " + thisIP.getHostAddress() + " and icmp", true); ! captor.setFilter("icmp", false); ! ! //captor.setFilter("icmp", true); } catch (IOException ex) { *************** *** 216,229 **** IPPacket ip = null; while(true) { ! /* ! * TODO is this a busy wait? ! */ log.debug("Waiting for a packet..."); ip = (IPPacket) captor.getPacket(); ! log.debug("Captured a packet from src=" + ip.src_ip); synchronized(currentPingList) { boolean foundMatch = false; for (Iterator<JpcapPingData> it = currentPingList.iterator(); it.hasNext();) { JpcapPingData currentPing = it.next(); if (ip.getClass() == currentPing.packetType && ip.src_ip.equals(currentPing.pingAddr.getInetAddress())) { --- 291,313 ---- IPPacket ip = null; while(true) { ! // TODO is this a busy wait? ! log.debug("Waiting for a packet..."); ip = (IPPacket) captor.getPacket(); ! if (ip != null && ip.src_ip != null) { ! log.debug("Captured a packet from src=" + ip.src_ip); synchronized(currentPingList) { boolean foundMatch = false; for (Iterator<JpcapPingData> it = currentPingList.iterator(); it.hasNext();) { + + // Note that this is not very robust: + // we will ignore both packets if they cross in flight + // and we receive one ident before the other. + // That seems better than wrongly assuming low or high latency. + // A perhaps better approach would be to parse the packet first, + // extract the ident and the timestamps, and then match + // it up with the right pending request to this node. + JpcapPingData currentPing = it.next(); if (ip.getClass() == currentPing.packetType && ip.src_ip.equals(currentPing.pingAddr.getInetAddress())) { *************** *** 237,252 **** if (!foundMatch) { ! log.debug("Did not find a matching ping request"); ! if (ip instanceof ICMPPacket) { ! parsePacket(ip); ! } } ! } } } } ! public JpcapPingData addJpcapRequest(AddressIF remoteNode, final CB1<Double> cbPing) { final JpcapPingData pd = new JpcapPingData(); pd.pingAddr = remoteNode; --- 321,346 ---- if (!foundMatch) { ! ! // Our own ECHO requests land here on their way out to the wire. ! // so no need to parse them. ! ! log.debug("Did not find a matching ping request"); ! if (ip instanceof ICMPPacket) { ! parsePacket((short)0, ip); ! } } ! } ! ! } else { ! log.warn("Captured a null packet"); ! } ! } } } + */ ! public JpcapPingData addJpcapRequest(final short ident, AddressIF remoteNode, final CB1<Double> cbPing) { final JpcapPingData pd = new JpcapPingData(); pd.pingAddr = remoteNode; *************** *** 257,267 **** case OK : { log.debug("pd.recvPacket=" + pd.recvPacket); ! pd.recvTS = parsePacket(pd.recvPacket); if (pd.recvTS > 0) { ! assert pd.sendTS > 0; ! assert pd.recvTS > pd.sendTS : "send TS > recv TS ?"; ! long lat = pd.recvTS - pd.sendTS; ! log.debug("lat=" + lat + " pd.recvTS=" + pd.recvTS); ! cbPing.call(result, lat / 1000.0); } else { log.debug("ignoring recvTS="+pd.recvTS); --- 351,364 ---- case OK : { log.debug("pd.recvPacket=" + pd.recvPacket); ! pd.recvTS = parsePacket(ident, pd.recvPacket); ! // returns 0 if idents do not match if (pd.recvTS > 0) { ! assert pd.sendTS > 0; ! assert pd.recvTS > pd.sendTS : "send TS > recv TS ?"; ! long lat = pd.recvTS - pd.sendTS; ! log.debug("lat=" + lat + " pd.recvTS=" + pd.recvTS); ! //cbPing.call(result, lat / 1000.0); ! // already in milliseconds ! cbPing.call(result, (double)lat); } else { log.debug("ignoring recvTS="+pd.recvTS); *************** *** 270,274 **** --- 367,377 ---- } case TIMEOUT: + log.warn ("timeout ident="+ident); + removeRequest(pd); + cbPing.call(result, 0.0); + break; case ERROR: { + // would be nice to use this to track loss + log.warn ("error ident="+ident); removeRequest(pd); cbPing.call(result, 0.0); *************** *** 283,287 **** } ! protected abstract long parsePacket(Packet p); } --- 386,390 ---- } ! protected abstract long parsePacket(short ident, Packet p); } |
From: Jonathan L. <le...@us...> - 2009-04-10 17:52:26
|
Update of /cvsroot/pyxida/Pyxida In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv19808 Modified Files: TODO Log Message: Ping using jpcap now returns latency to the nearest millisecond. It is currently being run overnight to test for problems. Setting the timestamps in the kernel proved to be futile using Jpcap. They weren't being set before, and they aren't being set now. As before, they are being set in the application on the way out, but by the kernel on the way in. The pcap filter was tightened so we are notified of fewer packets. The whole thing still drops more packets than ping, and I don't know why. Index: TODO =================================================================== RCS file: /cvsroot/pyxida/Pyxida/TODO,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** TODO 21 Feb 2007 13:20:11 -0000 1.19 --- TODO 10 Apr 2009 17:52:22 -0000 1.20 *************** *** 2,41 **** V0.1 OVERLAY NCs ! - JL: merge Azureus updates into Pyxida library ! - Fix log server so that logs are rolled over into web accessible directory Currently in hourglass:/nc/log-pyxida - [DONE] Make webpage generated by PL nodes with coord nicer (e.g. http://planetlab-1.imperial.ac.uk:55501) - - Put logs with coordinate data online - - Test the XMLRPC service to make sure that it works - - Update SF webpage ###################################################################### ! V0.2 Proxy coordinates - - change PingManager to fail over to TCP Syns if ICMP fails for a particular IP address ###################################################################### ! V0.3 Web Interface ! - add pl script to web page that does query ! - maybe add Rohan's 3D visualisation applet to webpage (we already have the code) ! - add a web interface (ideally, it should work when a web browser is pointed ! to the xmlrpc port) ###################################################################### ! V0.4 App-level Coordinates ! - add app-level coords for stability ###################################################################### FUTURE VERSIONS ! - nifty web features ! - add startup/shutdown functionality so that coords are restored on restart - add routing fns --- 2,39 ---- V0.1 OVERLAY NCs ! - [DONE] merge Azureus updates into Pyxida library ! - [DONE] Fix log server so that logs are rolled over into web accessible directory Currently in hourglass:/nc/log-pyxida + - Not put into web accessible dir, but they are being rolled over. - [DONE] Make webpage generated by PL nodes with coord nicer (e.g. http://planetlab-1.imperial.ac.uk:55501) - Test the XMLRPC service to make sure that it works ###################################################################### ! V0.4 App-level Coordinates ! ! - [DONE] add app-level coords for stability ###################################################################### ! V0.5 ! - add error and other stats to ReportCoordReqMsg; version info ! - set up monthly cron to store .coord files ###################################################################### ! NEAR FUTURE VERSION Proxy coordinates ! - change PingManager to fail over to TCP Syns if ICMP fails for a particular IP address ###################################################################### FUTURE VERSIONS ! - nifty web features + better visualization ! - add pl script to web page that does query - add routing fns + - Put logs with coordinate data online |
From: Jonathan L. <le...@us...> - 2009-04-09 19:48:10
|
Update of /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/ping In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv27676/src/edu/harvard/syrah/pyxida/ping Modified Files: TCPSynPinger.java JpcapPinger.java ICMPPinger.java Log Message: Attempting to fix ICMP ping problem -- we're not there yet. Index: ICMPPinger.java =================================================================== RCS file: /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/ping/ICMPPinger.java,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** ICMPPinger.java 27 Aug 2008 18:18:18 -0000 1.15 --- ICMPPinger.java 9 Apr 2009 19:47:52 -0000 1.16 *************** *** 21,25 **** import jpcap.JpcapSender; ! import jpcap.packet.*; import edu.harvard.syrah.prp.ANSI; import edu.harvard.syrah.prp.Log; --- 21,28 ---- import jpcap.JpcapSender; ! import jpcap.packet.EthernetPacket; ! import jpcap.packet.ICMPPacket; ! import jpcap.packet.IPPacket; ! import jpcap.packet.Packet; import edu.harvard.syrah.prp.ANSI; import edu.harvard.syrah.prp.Log; *************** *** 47,51 **** pd.packetType = ICMPPacket.class; ! pd.sendPacket = createICMP(pd.pingAddr); try { //need to change this to sending an ICMP message on a raw socket --- 50,55 ---- pd.packetType = ICMPPacket.class; ! pd.sendPacket = createICMP(pd.pingAddr); ! boolean usedRawSender = false; try { //need to change this to sending an ICMP message on a raw socket *************** *** 55,67 **** rawSender=JpcapSender.openRawSocket(); } ! if(rawSender!=null) rawSender.sendPacket(pd.sendPacket); ! else sender.sendPacket(pd.sendPacket); } catch (Exception e) { log.warn("Failed sending packet: " + e + " "+ e.getMessage()); } pd.sendTS = System.nanoTime() / 1000; ! log.debug("sendPacket=" + pd.sendPacket + " sendTS=" + pd.sendTS); assert pd.sendTS > 0; } --- 59,73 ---- rawSender=JpcapSender.openRawSocket(); } ! if(rawSender!=null) { rawSender.sendPacket(pd.sendPacket); ! usedRawSender = true; ! } else { sender.sendPacket(pd.sendPacket); + } } catch (Exception e) { log.warn("Failed sending packet: " + e + " "+ e.getMessage()); } pd.sendTS = System.nanoTime() / 1000; ! log.debug("sendPacket [raw="+usedRawSender+"]=" + pd.sendPacket + " sendTS=" + pd.sendTS); assert pd.sendTS > 0; } *************** *** 78,86 **** ICMPPacket icmp = new ICMPPacket(); icmp.type = ICMPPacket.ICMP_ECHO; ! icmp.seq = 0; ! icmp.id = 0; ! icmp.setIPv4Parameter(0, false, false, false, 0, false, false, false, 0, 0, ! 100, IPPacket.IPPROTO_ICMP, thisIP, addr.getInetAddress()); icmp.data = "data".getBytes(); --- 84,104 ---- ICMPPacket icmp = new ICMPPacket(); + //icmp.type = ICMPPacket.ICMP_ECHO; + //icmp.type = ICMPPacket.ICMP_TSTAMP; icmp.type = ICMPPacket.ICMP_ECHO; ! ! icmp.seq = (short) Pyxida.random.nextInt(); ! icmp.id = (short) Pyxida.random.nextInt(); ! ! icmp.orig_timestamp=1; ! icmp.trans_timestamp=1; ! icmp.recv_timestamp=1; ! ! icmp.setIPv4Parameter(0,false,false,false,0,false,false,false,0,1010101,100,IPPacket.IPPROTO_ICMP, ! thisIP, addr.getInetAddress()); ! ! // icmp.setIPv4Parameter(0, false, false, false, 0, false, false, false, 0, 0, ! //100, IPPacket.IPPROTO_ICMP, thisIP, addr.getInetAddress()); ! icmp.data = "data".getBytes(); *************** *** 104,124 **** if (icmp == null) { log.debug("Timeout"); ! } else ! if (icmp.type == ICMPPacket.ICMP_TIMXCEED) { ! icmp.src_ip.getHostName(); ! log.debug("ICMP_TIMXCEED: " + icmp.src_ip.toString()); ! } else ! if (icmp.type == ICMPPacket.ICMP_UNREACH) { ! icmp.src_ip.getHostName(); ! log.debug("ICMP_UNREACH: " + icmp.src_ip.toString()); ! } else ! if (icmp.type == ICMPPacket.ICMP_ECHOREPLY) { ! long sec = p.sec; ! long usec = p.usec; ! log.debug("ICMP_ECHOREPLY: " + icmp.src_ip + " sec=" + sec + " usec=" + usec); ! recvTS = (sec * 1000 * 1000) + usec; ! log.debug("recvTS=" + recvTS); ! } ! log.debug("Finished parseICMP"); return recvTS; } --- 122,160 ---- if (icmp == null) { log.debug("Timeout"); ! return recvTS; ! } ! ! switch (icmp.type) { ! case ICMPPacket.ICMP_TIMXCEED: ! icmp.src_ip.getHostName(); ! log.debug("ICMP_TIMXCEED: " + icmp.src_ip.toString()); ! break; ! case ICMPPacket.ICMP_UNREACH: ! icmp.src_ip.getHostName(); ! log.debug("ICMP_UNREACH: " + icmp.src_ip.toString()); ! break; ! case ICMPPacket.ICMP_ECHOREPLY: ! long sec = p.sec; ! long usec = p.usec; ! log.debug("ICMP_ECHOREPLY: " + icmp.src_ip + " sec=" + sec + " usec=" + usec); ! recvTS = (sec * 1000 * 1000) + usec; ! log.debug("recvTS=" + recvTS); ! break; ! case ICMPPacket.ICMP_TSTAMPREPLY: ! log.debug("got TSTAMPREPLY"); ! break; ! case ICMPPacket.ICMP_TSTAMP: ! log.debug("got TSTAMPREPLY"); ! break; ! case ICMPPacket.ICMP_ECHO: ! log.debug("got ECHO"); ! break; ! default: ! log.debug("got "+icmp.type); ! break; ! } ! ! log.debug("Finished parseICMP icmp="+icmp.toString()); ! log.debug("seq= "+icmp.seq+" id="+icmp.id+ " orig="+icmp.orig_timestamp+" trans="+icmp.trans_timestamp+" recv="+icmp.recv_timestamp); return recvTS; } Index: TCPSynPinger.java =================================================================== RCS file: /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/ping/TCPSynPinger.java,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** TCPSynPinger.java 27 Mar 2008 18:33:01 -0000 1.11 --- TCPSynPinger.java 9 Apr 2009 19:47:51 -0000 1.12 *************** *** 18,23 **** package edu.harvard.syrah.pyxida.ping; ! import jpcap.packet.*; ! import edu.harvard.syrah.prp.*; import edu.harvard.syrah.pyxida.Pyxida; import edu.harvard.syrah.sbon.async.CBResult; --- 18,28 ---- package edu.harvard.syrah.pyxida.ping; ! import jpcap.packet.EthernetPacket; ! import jpcap.packet.IPPacket; ! import jpcap.packet.Packet; ! import jpcap.packet.TCPPacket; ! import edu.harvard.syrah.prp.ANSI; ! import edu.harvard.syrah.prp.Log; ! import edu.harvard.syrah.prp.PUtil; import edu.harvard.syrah.pyxida.Pyxida; import edu.harvard.syrah.sbon.async.CBResult; Index: JpcapPinger.java =================================================================== RCS file: /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/ping/JpcapPinger.java,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** JpcapPinger.java 13 Mar 2009 01:41:50 -0000 1.10 --- JpcapPinger.java 9 Apr 2009 19:47:52 -0000 1.11 *************** *** 20,29 **** import java.io.IOException; import java.io.InputStream; ! import java.net.*; ! import java.util.*; ! import jpcap.*; import jpcap.NetworkInterface; ! import jpcap.packet.*; import edu.harvard.syrah.prp.Log; import edu.harvard.syrah.prp.POut; --- 20,40 ---- import java.io.IOException; import java.io.InputStream; ! import java.net.Inet4Address; ! import java.net.InetAddress; ! import java.net.MalformedURLException; ! import java.util.ArrayList; ! import java.util.Arrays; ! import java.util.Collections; ! import java.util.Iterator; ! import java.util.List; ! import jpcap.JpcapCaptor; ! import jpcap.JpcapSender; import jpcap.NetworkInterface; ! import jpcap.NetworkInterfaceAddress; ! import jpcap.packet.EthernetPacket; ! import jpcap.packet.ICMPPacket; ! import jpcap.packet.IPPacket; ! import jpcap.packet.Packet; import edu.harvard.syrah.prp.Log; import edu.harvard.syrah.prp.POut; *************** *** 213,216 **** --- 224,228 ---- synchronized(currentPingList) { + boolean foundMatch = false; for (Iterator<JpcapPingData> it = currentPingList.iterator(); it.hasNext();) { JpcapPingData currentPing = it.next(); *************** *** 219,225 **** currentPing.recvPacket = ip; log.debug("Found a matching ping request"); ! EL.get().registerTimerCB(currentPing.cbDone); } } } } --- 231,246 ---- currentPing.recvPacket = ip; log.debug("Found a matching ping request"); ! foundMatch = true; ! EL.get().registerTimerCB(currentPing.cbDone); } } + + if (!foundMatch) { + log.debug("Did not find a matching ping request"); + if (ip instanceof ICMPPacket) { + parsePacket(ip); + } + } + } } *************** *** 237,240 **** --- 258,262 ---- log.debug("pd.recvPacket=" + pd.recvPacket); pd.recvTS = parsePacket(pd.recvPacket); + if (pd.recvTS > 0) { assert pd.sendTS > 0; assert pd.recvTS > pd.sendTS : "send TS > recv TS ?"; *************** *** 242,245 **** --- 264,270 ---- log.debug("lat=" + lat + " pd.recvTS=" + pd.recvTS); cbPing.call(result, lat / 1000.0); + } else { + log.debug("ignoring recvTS="+pd.recvTS); + } break; } |
From: Jonathan L. <le...@us...> - 2009-04-09 19:48:05
|
Update of /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv27676/src/edu/harvard/syrah/pyxida Modified Files: Pyxida.java Log Message: Attempting to fix ICMP ping problem -- we're not there yet. Index: Pyxida.java =================================================================== RCS file: /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/Pyxida.java,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -d -r1.26 -r1.27 *** Pyxida.java 27 Mar 2008 18:33:01 -0000 1.26 --- Pyxida.java 9 Apr 2009 19:47:53 -0000 1.27 *************** *** 20,29 **** import java.util.Random; ! import edu.harvard.syrah.prp.*; import edu.harvard.syrah.pyxida.api.APIManager; import edu.harvard.syrah.pyxida.log.LogManager; import edu.harvard.syrah.pyxida.nc.NCManager; import edu.harvard.syrah.pyxida.ping.PingManager; ! import edu.harvard.syrah.sbon.async.*; import edu.harvard.syrah.sbon.async.CallbacksIF.CB0; import edu.harvard.syrah.sbon.async.comm.AddressFactory; --- 20,33 ---- import java.util.Random; ! import edu.harvard.syrah.prp.ANSI; ! import edu.harvard.syrah.prp.Log; ! import edu.harvard.syrah.prp.PUtil; import edu.harvard.syrah.pyxida.api.APIManager; import edu.harvard.syrah.pyxida.log.LogManager; import edu.harvard.syrah.pyxida.nc.NCManager; import edu.harvard.syrah.pyxida.ping.PingManager; ! import edu.harvard.syrah.sbon.async.CBResult; ! import edu.harvard.syrah.sbon.async.Config; ! import edu.harvard.syrah.sbon.async.EL; import edu.harvard.syrah.sbon.async.CallbacksIF.CB0; import edu.harvard.syrah.sbon.async.comm.AddressFactory; *************** *** 37,41 **** private static final int MAJOR_VERSION = 0; private static final int MINOR_VERSION = 1; ! private static final int MINOR_MINOR_VERSION = 4; public static final String VERSION = MAJOR_VERSION + "." + MINOR_VERSION + "." + MINOR_MINOR_VERSION; --- 41,45 ---- private static final int MAJOR_VERSION = 0; private static final int MINOR_VERSION = 1; ! private static final int MINOR_MINOR_VERSION = 5; public static final String VERSION = MAJOR_VERSION + "." + MINOR_VERSION + "." + MINOR_MINOR_VERSION; |
From: Jonathan L. <le...@us...> - 2009-04-09 19:48:05
|
Update of /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/log In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv27676/src/edu/harvard/syrah/pyxida/log Modified Files: LogManager.java Log Message: Attempting to fix ICMP ping problem -- we're not there yet. Index: LogManager.java =================================================================== RCS file: /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/log/LogManager.java,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** LogManager.java 22 Jan 2009 17:51:14 -0000 1.9 --- LogManager.java 9 Apr 2009 19:47:53 -0000 1.10 *************** *** 63,67 **** if (LOG_SERVER_HOSTNAME == null) { ! log.debug("Not logging to log server"); cb0.callOK(); return; --- 63,67 ---- if (LOG_SERVER_HOSTNAME == null) { ! log.main("Not logging to log server"); cb0.callOK(); return; |
From: Jonathan L. <le...@us...> - 2009-03-27 17:40:06
|
Update of /cvsroot/pyxida/AsyncJ/src/edu/harvard/syrah/sbon/async/comm/xmlrpc In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv26792/src/edu/harvard/syrah/sbon/async/comm/xmlrpc Modified Files: XMLRPCComm.java Log Message: made http server act more according to standard, untested with XML/RPC functionality Index: XMLRPCComm.java =================================================================== RCS file: /cvsroot/pyxida/AsyncJ/src/edu/harvard/syrah/sbon/async/comm/xmlrpc/XMLRPCComm.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** XMLRPCComm.java 4 Jun 2007 17:55:40 -0000 1.1 --- XMLRPCComm.java 27 Mar 2009 17:39:58 -0000 1.2 *************** *** 128,133 **** registerHandler(XMLRPC_PATH, new HTTPCallbackHandler() { ! ! protected void cb(CBResult result, AddressIF remoteAddr, String path, String httpRequest, final CB2<String, byte[]> cbHTTPResponse) { --- 128,136 ---- registerHandler(XMLRPC_PATH, new HTTPCallbackHandler() { ! ! protected void cb(CBResult result, AddressIF remoteAddr, String method, ! String path, ! Map<String,String> headers, Map<String,String> parameters, ! String httpRequest, final CB2<String, byte[]> cbHTTPResponse) { *************** *** 141,144 **** --- 144,148 ---- XmlRpcServerRequest request = requestProcessor.decodeRequest(is); + // TODO take this from headers if (request == null) { byte[] error = responseProcessor.encodeException(new Exception( |
From: Jonathan L. <le...@us...> - 2009-03-27 17:40:05
|
Update of /cvsroot/pyxida/AsyncJ/src/edu/harvard/syrah/sbon/async/comm/http In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv26792/src/edu/harvard/syrah/sbon/async/comm/http Modified Files: HTTPCallbackHandler.java HTTPComm.java Log Message: made http server act more according to standard, untested with XML/RPC functionality Index: HTTPCallbackHandler.java =================================================================== RCS file: /cvsroot/pyxida/AsyncJ/src/edu/harvard/syrah/sbon/async/comm/http/HTTPCallbackHandler.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** HTTPCallbackHandler.java 4 Jun 2007 17:55:41 -0000 1.1 --- HTTPCallbackHandler.java 27 Mar 2009 17:39:57 -0000 1.2 *************** *** 6,11 **** package edu.harvard.syrah.sbon.async.comm.http; import edu.harvard.syrah.sbon.async.CallbacksIF.CB2; ! import edu.harvard.syrah.sbon.async.CallbacksIF.CB4; import edu.harvard.syrah.sbon.async.comm.AddressIF; --- 6,13 ---- package edu.harvard.syrah.sbon.async.comm.http; + import java.util.Map; + import edu.harvard.syrah.sbon.async.CallbacksIF.CB2; ! import edu.harvard.syrah.sbon.async.CallbacksIF.CB7; import edu.harvard.syrah.sbon.async.comm.AddressIF; *************** *** 24,28 **** */ public abstract class HTTPCallbackHandler extends ! CB4<AddressIF, String, String, CB2<String, byte[]>> { /* empty */ --- 26,30 ---- */ public abstract class HTTPCallbackHandler extends ! CB7<AddressIF, String, String, Map<String,String>, Map<String,String>, String, CB2<String, byte[]>> { /* empty */ Index: HTTPComm.java =================================================================== RCS file: /cvsroot/pyxida/AsyncJ/src/edu/harvard/syrah/sbon/async/comm/http/HTTPComm.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** HTTPComm.java 25 Mar 2009 12:17:29 -0000 1.3 --- HTTPComm.java 27 Mar 2009 17:39:58 -0000 1.4 *************** *** 16,20 **** import java.nio.channels.SelectionKey; import java.nio.channels.SocketChannel; ! import java.util.*; import edu.harvard.syrah.prp.Log; --- 16,26 ---- import java.nio.channels.SelectionKey; import java.nio.channels.SocketChannel; ! import java.util.HashMap; ! import java.util.Iterator; ! import java.util.LinkedList; ! import java.util.List; ! import java.util.Map; ! import java.util.NoSuchElementException; ! import java.util.StringTokenizer; import edu.harvard.syrah.prp.Log; *************** *** 27,31 **** import edu.harvard.syrah.sbon.async.CallbacksIF.CB1; import edu.harvard.syrah.sbon.async.CallbacksIF.CB2; ! import edu.harvard.syrah.sbon.async.comm.*; public class HTTPComm extends TCPComm implements HTTPCommIF { --- 33,41 ---- import edu.harvard.syrah.sbon.async.CallbacksIF.CB1; import edu.harvard.syrah.sbon.async.CallbacksIF.CB2; ! import edu.harvard.syrah.sbon.async.comm.AddressFactory; ! import edu.harvard.syrah.sbon.async.comm.AddressIF; ! import edu.harvard.syrah.sbon.async.comm.Comm; ! import edu.harvard.syrah.sbon.async.comm.NetAddress; ! import edu.harvard.syrah.sbon.async.comm.TCPComm; public class HTTPComm extends TCPComm implements HTTPCommIF { *************** *** 40,44 **** private static final long HTTP_HANDLER_TIMEOUT = 300000; ! private static final String HTTP_IMPL_VERSION = "SBON HTTP 0.1"; private static final String HTTP_11 = "HTTP/1.1"; protected static final byte[] HTTP_OK = NetUtil.toHTTPBytes(" 200 OK\r\n"); --- 50,54 ---- private static final long HTTP_HANDLER_TIMEOUT = 300000; ! private static final String HTTP_IMPL_VERSION = "AsyncJ HTTP 0.1.5"; private static final String HTTP_11 = "HTTP/1.1"; protected static final byte[] HTTP_OK = NetUtil.toHTTPBytes(" 200 OK\r\n"); *************** *** 171,175 **** --- 181,224 ---- } + private Map<String,String> getParameters(String uri) { + log.debug ("getParameters uri="+uri); + int qmark = uri.indexOf("?"); + if (qmark > 0 && uri.length() > qmark+1) { + String params = uri.substring(qmark+1, uri.length()); + log.debug("params="+params); + String[] kvs = params.split("&"); + Map<String,String> map = new HashMap<String,String> (); + log.debug ("kvs length="+kvs.length); + for (int i = 0; i < kvs.length; i++) { + String[] kv = kvs[i].split("="); + log.debug ("kv length="+kv.length); + if (kv.length == 2) { + //String key = NetUtil.fromHTTPBytes(kv[0]); + map.put (kv[0],kv[1]); + log.debug ("key="+kv[0]+" value="+kv[1]); + } + } + return map; + + } else { + return null; + } + } + + /* + private String getMessageBody (String httpRequest, int dataStartMarker) { + // drop the first new line + if (dataStartMarker == 0) { + return null; + } + return httpRequest.substring(dataStartMarker, httpRequest.length()); + } + */ + private HTTPCallbackHandler getRequestHandler(String path) { + // Remove trailing slash for matching purposes + if (path.endsWith("/")) + path = path.substring(0, path.length() - 1); + int qmark = path.indexOf("?"); if (qmark > 0) { *************** *** 828,831 **** --- 877,882 ---- * Callback to read request data from an existing connection */ + enum RequestState {REQUEST, HEADERS, BODY}; + class ReadRequestConnHandler extends TCPComm.ReadConnHandler { protected final Log log = new Log(ReadRequestConnHandler.class); *************** *** 837,847 **** protected InputStream is = null; protected String httpVersion; protected int contentLength = UNKNOWN_LENGTH; protected String uri; ! // Marker for the begining of the XML code protected int httpMarker = UNKNOWN_LENGTH; ReadRequestConnHandler(SelectableChannel channel, NetAddress remoteAddr) { super(channel, remoteAddr); --- 888,910 ---- protected InputStream is = null; + protected int bytesRead = 0; protected String httpVersion; protected int contentLength = UNKNOWN_LENGTH; protected String uri; ! protected String method; ! protected Map<String,String> headers; ! protected Map<String,String> parameters; ! ! //protected int dataStartMarker = 0; ! ! protected RequestState state = RequestState.REQUEST; ! ! protected boolean receivedEmptyLine = false; ! // Marker for the begining of the XML code protected int httpMarker = UNKNOWN_LENGTH; + + ReadRequestConnHandler(SelectableChannel channel, NetAddress remoteAddr) { super(channel, remoteAddr); *************** *** 863,868 **** log.debug("new buffer=" + buffer); } else { ! log.error("Buffer larger than MAX_BUFFER_SIZE: buffer=" + buffer + " remoteAddr=" + remoteAddr + " channel=" + channel); } } --- 926,932 ---- log.debug("new buffer=" + buffer); } else { ! log.warn("Buffer larger than MAX_BUFFER_SIZE: buffer=" + buffer + " remoteAddr=" + remoteAddr + " channel=" + channel); + return false; } } *************** *** 886,889 **** --- 950,954 ---- switch (result.state) { case OK: { + int linecount = 0; remoteAddr = (NetAddress) resolvedAddr; *************** *** 913,965 **** log.debug("buffer.position=" + buffer.position()); ! ! // Try to find the content length ! if (contentLength == UNKNOWN_LENGTH) { ! String line = null; ! int bytesRead = 0; do { try { line = br.readLine(); } catch (IOException e) { log.error("Failed reading line from buffer: " + e); } ! if (line != null) { ! log.debug("line='" + line + "'"); bytesRead += line.length() + 2; ! ! if (httpVersion == null) { try { StringTokenizer tokenizer = new StringTokenizer(line); ! String method = tokenizer.nextToken(); uri = tokenizer.nextToken(); httpVersion = tokenizer.nextToken(); } catch (NoSuchElementException e) { log.warn("Could not parse HTTP: " + e + " line=" + line); return; } serverKeepAlive = serverKeepAlive && HTTP_11.equals(httpVersion); ! } ! ! String lineLower = line.toLowerCase(); ! if (lineLower.startsWith("content-length:")) { ! contentLength = Integer.parseInt(line.substring(15).trim()); ! log.debug("Content-length: " + contentLength); ! } ! if (lineLower.startsWith("connection:")) { ! serverKeepAlive = serverKeepAlive ! && lineLower.indexOf("keep-alive") > -1; } } } while (line != null && line.length() != 0); - log.debug("line is null or empty. contentLength=" + contentLength); ! if ( /* (contentLength != UNKNOWN_LENGTH) && */(line == null || line ! .length() == 0)) { ! httpMarker = bytesRead; ! log.debug("httpMark=" + httpMarker); ! } } --- 978,1054 ---- log.debug("buffer.position=" + buffer.position()); ! ! // keep parsing until we get to the body ! if (state != RequestState.BODY) { ! String line = null; ! do { try { line = br.readLine(); + } catch (IOException e) { log.error("Failed reading line from buffer: " + e); } ! linecount++; ! log.debug ("line ("+linecount+")="+line); ! if (line != null) { ! bytesRead += line.length() + 2; ! ! switch (state) { ! case REQUEST: try { StringTokenizer tokenizer = new StringTokenizer(line); ! method = tokenizer.nextToken().toUpperCase(); uri = tokenizer.nextToken(); httpVersion = tokenizer.nextToken(); + parameters = getParameters(uri); } catch (NoSuchElementException e) { log.warn("Could not parse HTTP: " + e + " line=" + line); + deregister(); + closeConnection(remoteAddr, socketChannel); return; } serverKeepAlive = serverKeepAlive && HTTP_11.equals(httpVersion); ! state = RequestState.HEADERS; ! break; ! ! case HEADERS: ! if (line.length() == 0) { ! state = RequestState.BODY; ! httpMarker = bytesRead; ! log.debug("httpMark=" + httpMarker); ! ! } else { ! String kv[] = line.split(": "); ! if (kv.length == 2) { ! if (headers == null) { ! headers = new HashMap<String,String> (); ! } ! headers.put(kv[0], kv[1]); ! ! String key = kv[0].toLowerCase(); ! String value = kv[1].toLowerCase(); ! if (key.equals("content-length")) { ! contentLength = Integer.parseInt(value); ! log.debug("Content-length: " + contentLength); ! } else if (key.equals("connection:")) { ! serverKeepAlive = serverKeepAlive ! && value.equals("keep-alive"); ! } ! ! } ! } ! break; } } } while (line != null && line.length() != 0); ! log.debug("Null or empty line. contentLength=" + contentLength); ! ! } *************** *** 973,990 **** ReadRequestConnHandler.this.deregister(); ! final String httpRequest = new String(buffer.array(), buffer.position(), buffer.remaining()); EL.get().registerTimerCB(new CB0() { protected void cb(CBResult resultOK) { - /* Remove trailing slash */ - - if (uri.endsWith("/")) - uri = uri.substring(0, uri.length() - 1); - final HTTPCallbackHandler httpRequestHandler = getRequestHandler(uri); if (httpRequestHandler != null) { ! httpRequestHandler.call(CBResult.OK(), remoteAddr, uri, httpRequest, new CB2<String, byte[]>(HTTP_HANDLER_TIMEOUT) { --- 1062,1078 ---- ReadRequestConnHandler.this.deregister(); ! // Note that this potentially includes more data than ! // content-length said it would ! ! final String body = new String(buffer.array(), buffer.position(), buffer.remaining()); EL.get().registerTimerCB(new CB0() { protected void cb(CBResult resultOK) { final HTTPCallbackHandler httpRequestHandler = getRequestHandler(uri); if (httpRequestHandler != null) { ! httpRequestHandler.call(CBResult.OK(), remoteAddr, method, uri, ! headers, parameters, body, new CB2<String, byte[]>(HTTP_HANDLER_TIMEOUT) { |
From: Jonathan L. <le...@us...> - 2009-03-25 12:17:45
|
Update of /cvsroot/pyxida/AsyncJ In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv31963 Modified Files: .classpath .project Log Message: Only match up to question mark when matching requests to handlers. Index: .project =================================================================== RCS file: /cvsroot/pyxida/AsyncJ/.project,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** .project 4 Jun 2007 17:55:40 -0000 1.1 --- .project 25 Mar 2009 12:17:29 -0000 1.2 *************** *** 7,10 **** --- 7,20 ---- <buildSpec> <buildCommand> + <name>com.trolltech.qtjambi.juicBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>com.trolltech.qtjambi.juicBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> <name>org.eclipse.jdt.core.javabuilder</name> <arguments> Index: .classpath =================================================================== RCS file: /cvsroot/pyxida/AsyncJ/.classpath,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** .classpath 24 Jan 2009 18:06:02 -0000 1.2 --- .classpath 25 Mar 2009 12:17:29 -0000 1.3 *************** *** 2,8 **** <classpath> <classpathentry kind="src" path="src"/> - <classpathentry combineaccessrules="false" kind="src" path="/Util-PRP"/> <classpathentry kind="lib" path="lib/xmlrpc-2.0-a1-dev.jar"/> ! <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/JVM 1.6"/> <classpathentry kind="output" path="classes"/> </classpath> --- 2,8 ---- <classpath> <classpathentry kind="src" path="src"/> <classpathentry kind="lib" path="lib/xmlrpc-2.0-a1-dev.jar"/> ! <classpathentry kind="lib" path="lib/util-prp.jar"/> ! <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="output" path="classes"/> </classpath> |
From: Jonathan L. <le...@us...> - 2009-03-25 12:17:35
|
Update of /cvsroot/pyxida/AsyncJ/lib In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv31963/lib Modified Files: util-prp.jar Log Message: Only match up to question mark when matching requests to handlers. Index: util-prp.jar =================================================================== RCS file: /cvsroot/pyxida/AsyncJ/lib/util-prp.jar,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 Binary files /tmp/cvs8XcBY0 and /tmp/cvsBhHSdp differ |
From: Jonathan L. <le...@us...> - 2009-03-25 12:17:34
|
Update of /cvsroot/pyxida/AsyncJ/src/edu/harvard/syrah/sbon/async/comm/http In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv31963/src/edu/harvard/syrah/sbon/async/comm/http Modified Files: HTTPComm.java Log Message: Only match up to question mark when matching requests to handlers. Index: HTTPComm.java =================================================================== RCS file: /cvsroot/pyxida/AsyncJ/src/edu/harvard/syrah/sbon/async/comm/http/HTTPComm.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** HTTPComm.java 15 Jun 2007 16:13:23 -0000 1.2 --- HTTPComm.java 25 Mar 2009 12:17:29 -0000 1.3 *************** *** 172,175 **** --- 172,179 ---- private HTTPCallbackHandler getRequestHandler(String path) { + int qmark = path.indexOf("?"); + if (qmark > 0) { + path = path.substring(0, qmark); + } HTTPCallbackHandler handler = httpRequestHandlers.get(path); return handler; *************** *** 933,937 **** httpVersion = tokenizer.nextToken(); } catch (NoSuchElementException e) { ! log.error("Could not parse HTTP: " + e + " line=" + line); } serverKeepAlive = serverKeepAlive && HTTP_11.equals(httpVersion); --- 937,942 ---- httpVersion = tokenizer.nextToken(); } catch (NoSuchElementException e) { ! log.warn("Could not parse HTTP: " + e + " line=" + line); ! return; } serverKeepAlive = serverKeepAlive && HTTP_11.equals(httpVersion); |
From: Jonathan L. <le...@us...> - 2009-03-13 02:17:12
|
Update of /cvsroot/pyxida/Pyxida/lib In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv19636/lib Modified Files: libjpcap.so Log Message: upgraded to jpcap 0.7 from 0.5.1 Index: libjpcap.so =================================================================== RCS file: /cvsroot/pyxida/Pyxida/lib/libjpcap.so,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 Binary files /tmp/cvskRWQSF and /tmp/cvs4F3OCR differ |
From: Jonathan L. <le...@us...> - 2009-03-13 02:17:00
|
Update of /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/ping In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv19279/src/edu/harvard/syrah/pyxida/ping Modified Files: JpcapPinger.java Log Message: upgraded to jpcap 0.7 from 0.5.1 Index: JpcapPinger.java =================================================================== RCS file: /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/ping/JpcapPinger.java,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** JpcapPinger.java 27 Mar 2008 18:33:01 -0000 1.9 --- JpcapPinger.java 13 Mar 2009 01:41:50 -0000 1.10 *************** *** 124,128 **** InetAddress pingAddr = JpcapPinger.this.defaultPingAddr.getInetAddress(); log.debug("defaultPingAddr=" + pingAddr); ! captor.setFilter("icmp and dst host " + pingAddr.getHostAddress(), false); InputStream is = null; Packet ping = null; --- 124,132 ---- InetAddress pingAddr = JpcapPinger.this.defaultPingAddr.getInetAddress(); log.debug("defaultPingAddr=" + pingAddr); ! try { ! captor.setFilter("icmp and dst host " + pingAddr.getHostAddress(), false); ! } catch (IOException ex) { ! log.error ("Could not set captor filter: "+ex); ! } InputStream is = null; Packet ping = null; *************** *** 191,196 **** public void run() { ! captor.setFilter("dst host " + thisIP.getHostAddress() + " and (icmp or (tcp and tcp[tcpflags] & (tcp-syn|tcp-ack) != 0))", true); //captor.setFilter("icmp", true); while (!jpcapThread.isInterrupted()) { --- 195,204 ---- public void run() { ! try { ! captor.setFilter("dst host " + thisIP.getHostAddress() + " and (icmp or (tcp and tcp[tcpflags] & (tcp-syn|tcp-ack) != 0))", true); //captor.setFilter("icmp", true); + } catch (IOException ex) { + log.error ("Could not set captor filter: "+ex); + } while (!jpcapThread.isInterrupted()) { |
From: Jonathan L. <le...@us...> - 2009-03-13 02:16:56
|
Update of /cvsroot/pyxida/Pyxida/lib In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv19279/lib Modified Files: jpcap.jar Log Message: upgraded to jpcap 0.7 from 0.5.1 Index: jpcap.jar =================================================================== RCS file: /cvsroot/pyxida/Pyxida/lib/jpcap.jar,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 Binary files /tmp/cvsiylsEw and /tmp/cvs9ucMsv differ |
From: Jonathan L. <le...@us...> - 2009-03-11 16:45:18
|
Update of /cvsroot/pyxida/Pyxida/web/javadoc/edu/harvard/syrah/pyxida/ping In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv7306/web/javadoc/edu/harvard/syrah/pyxida/ping Modified Files: PingManager.html package-summary.html Log Message: updated files for doing releases Index: PingManager.html =================================================================== RCS file: /cvsroot/pyxida/Pyxida/web/javadoc/edu/harvard/syrah/pyxida/ping/PingManager.html,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** PingManager.html 21 Feb 2007 15:40:50 -0000 1.1 --- PingManager.html 11 Mar 2009 16:44:49 -0000 1.2 *************** *** 1,5 **** ! <?xml version="1.0" encoding="UTF-8"?> ! <!DOCTYPE html PUBLIC "-//gnu.org///DTD XHTML 1.1 plus Target 1.0//EN" "../../../../../resources/xhtml11-target10.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><title>PingManager</title><script src="../../../../../resources/gjdoc.js" type="text/javascript"><!-- this comment required for konqueror 3.2.2 --></script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/><meta name="generator" content="GNU Gjdoc Standard Doclet"/><meta name="keywords" content="edu.harvard.syrah.pyxida.ping.PingManager class"/><meta name="keywords" content="init()"/><meta name="keywords" content="printStats()"/><meta name="keywords" content="addPingRequest()"/><link rel="stylesheet" type="text/css" href="../../../../../resources/gjdochtml-clean-layout.css" title="GNU Clean"/><link rel="stylesheet" type="text/css" href="../../../../../resources/gjdochtml-clean-color1.css" title="GNU Clean"/></head><body class="content class" onload="if(parent.contentPageLoaded)parent.contentPageLoaded(document.title)"><table class="navbar div top"><tr><td class="navbar div top"><div class="navbar div top"><span class="navbar item enabled"><a href="../../../../../overview-summary.html">Overview</a></span> <span class="navbar item enabled"><a href="package-summary.html">Package</a></span> <span class="navbar item enabled"><a href="tree.html">Tree</a></span> <span class="navbar item enabled"><a href="../../../../../alphaindex.html">Index</a></span> <span class="navbar item enabled"><a href="../../../../../deprecated.html">Deprecated</a></span> <span class="navbar item enabled"><a href="../../../../../about.html">About</a></span></div></td></tr><tr><td class="navi">Prev Class | Next Class</td><td class="navi"><a href="../../../../../index.html" title="Show in a frameset" target="_top">Frames</a> | <a href="PingManager.html" title="Show without frames" target="_top">No Frames</a> </td></tr><tr><td class="navi">Summary: Nested | Field | <a href="#summary-methods">Method</a> | <a href="#summary-constructors">Constr</a></td><td class="navi">Detail: Nested | Field | <a href="#detail-methods">Method</a> | <a href="#detail-constructors">Constr</a></td></tr></table><div class="class title outer"><h3 class="class title-package">edu.harvard.syrah.pyxida.ping</h3><h1 class="class title-class">Class PingManager</h1></div><div class="class inheritance-tree"><ul class="inheritance 0"><li class="inheritance 0"><code>java.lang.Object</code></li><li><ul class="inheritance 1"><li class="inheritance 1"><code>edu.harvard.syrah.pyxida.ping.PingManager</code></li><li></li></ul></li></ul></div><hr/><div class="class synopsis outer"><div class="class synopsis declaration"><code>public class <b class="class synopsis name">PingManager</b></code></div><div class="class synopsis superclass"><code>extends java.lang.Object</code></div></div><hr/><div class="class description"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><a name="summary-constructors" id="summary-constructors"/><dl class="table container"><dd><table class="class summary" border="1" width="100%"><tr class="table header"><td colspan="2"><h2 class="table header">Constructor Summary</h2></td></tr><tr><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#PingManager()">PingManager</a>()</code></dt></dl></td></tr></table></dd></dl><a name="summary-methods" id="summary-methods"/><dl class="table container"><dd><table class="class summary" border="1" width="100%"><tr class="table header"><td colspan="2"><h2 class="table header">Method Summary</h2></td></tr><tr><td class="left" valign="top"><code class="synopsis"> void</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#addPingRequest(AddressIF,AddressIF,CB1<Float>)">addPingRequest</a>(AddressIF nodeA, AddressIF nodeB, CB1<Float> cbMeasurement)</code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis"> void</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#addPingRequest(AddressIF,CB1<Double>)">addPingRequest</a>(AddressIF remoteNode, CB1<Double> cbMeasurement)</code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis"> void</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#init(CB0)">init</a>(CB0 cbDone)</code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis"> void</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#printStats()">printStats</a>()</code></dt></dl></td></tr></table></dd></dl><a name="detail-constructors" id="detail-constructors"/><h2 class="section header">Constructor Details</h2><div class="section"><a name="PingManager()" id="PingManager()"/><div class="member detail outer"><h3 class="member detail name">PingManager</h3><pre class="member detail synopsis">public PingManager()</pre><blockquote class="member detail name"><div class="member detail description"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div></blockquote></div></div><a name="detail-methods" id="detail-methods"/><h2 class="section header">Method Details</h2><div class="section"><a name="addPingRequest(AddressIF,AddressIF,CB1<Float>)" id="addPingRequest(AddressIF,AddressIF,CB1<Float>)"/><div class="member detail outer"><h3 class="member detail name">addPingRequest</h3><pre class="member detail synopsis">public void addPingRequest(AddressIF nodeA, ! AddressIF nodeB, ! CB1<Float> cbMeasurement)</pre><blockquote class="member detail name"><div class="member detail description"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div></blockquote></div><hr/><a name="addPingRequest(AddressIF,CB1<Double>)" id="addPingRequest(AddressIF,CB1<Double>)"/><div class="member detail outer"><h3 class="member detail name">addPingRequest</h3><pre class="member detail synopsis">public void addPingRequest(AddressIF remoteNode, ! CB1<Double> cbMeasurement)</pre><blockquote class="member detail name"><div class="member detail description"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div></blockquote></div><hr/><a name="init(CB0)" id="init(CB0)"/><div class="member detail outer"><h3 class="member detail name">init</h3><pre class="member detail synopsis">public void init(CB0 cbDone)</pre><blockquote class="member detail name"><div class="member detail description"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div></blockquote></div><hr/><a name="printStats()" id="printStats()"/><div class="member detail outer"><h3 class="member detail name">printStats</h3><pre class="member detail synopsis">public void printStats()</pre><blockquote class="member detail name"><div class="member detail description"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div></blockquote></div></div><p class="navbar bottom spacer"> </p><table class="navbar div bottom"><tr><td><div class="navbar div top"><span class="navbar item enabled"><a href="../../../../../overview-summary.html">Overview</a></span> <span class="navbar item enabled"><a href="package-summary.html">Package</a></span> <span class="navbar item enabled"><a href="tree.html">Tree</a></span> <span class="navbar item enabled"><a href="../../../../../alphaindex.html">Index</a></span> <span class="navbar item enabled"><a href="../../../../../deprecated.html">Deprecated</a></span> <span class="navbar item enabled"><a href="../../../../../about.html">About</a></span></div></td></tr></table></body></html> \ No newline at end of file --- 1,313 ---- ! <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> ! <!--NewPage--> ! <HTML> ! <HEAD> ! <!-- Generated by javadoc (build 1.6.0_11) on Wed Mar 11 12:38:27 EDT 2009 --> ! <TITLE> ! PingManager ! </TITLE> ! ! <META NAME="date" CONTENT="2009-03-11"> ! ! <LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style"> ! ! <SCRIPT type="text/javascript"> ! function windowTitle() ! { ! if (location.href.indexOf('is-external=true') == -1) { ! parent.document.title="PingManager"; ! } ! } ! </SCRIPT> ! <NOSCRIPT> ! </NOSCRIPT> ! ! </HEAD> ! ! <BODY BGCOLOR="white" onload="windowTitle();"> ! <HR> ! ! ! <!-- ========= START OF TOP NAVBAR ======= --> ! <A NAME="navbar_top"><!-- --></A> ! <A HREF="#skip-navbar_top" title="Skip navigation links"></A> ! <TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY=""> ! <TR> ! <TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> ! <A NAME="navbar_top_firstrow"><!-- --></A> ! <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY=""> ! <TR ALIGN="center" VALIGN="top"> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD> ! <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD> ! </TR> ! </TABLE> ! </TD> ! <TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> ! </EM> ! </TD> ! </TR> ! ! <TR> ! <TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2"> ! PREV CLASS ! NEXT CLASS</FONT></TD> ! <TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2"> ! <A HREF="../../../../../index.html?edu/harvard/syrah/pyxida/ping/PingManager.html" target="_top"><B>FRAMES</B></A> ! <A HREF="PingManager.html" target="_top"><B>NO FRAMES</B></A> ! <SCRIPT type="text/javascript"> ! <!-- ! if(window==top) { ! document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>'); ! } ! //--> ! </SCRIPT> ! <NOSCRIPT> ! <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A> ! </NOSCRIPT> ! ! ! </FONT></TD> ! </TR> ! <TR> ! <TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2"> ! SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> ! <TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2"> ! DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> ! </TR> ! </TABLE> ! <A NAME="skip-navbar_top"></A> ! <!-- ========= END OF TOP NAVBAR ========= --> ! ! <HR> ! <!-- ======== START OF CLASS DATA ======== --> ! <H2> ! <FONT SIZE="-1"> ! edu.harvard.syrah.pyxida.ping</FONT> ! <BR> ! Class PingManager</H2> ! <PRE> ! java.lang.Object ! <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by "><B>edu.harvard.syrah.pyxida.ping.PingManager</B> ! </PRE> ! <HR> ! <DL> ! <DT><PRE>public class <B>PingManager</B><DT>extends java.lang.Object</DL> ! </PRE> ! ! <P> ! <HR> ! ! <P> ! ! <!-- ======== CONSTRUCTOR SUMMARY ======== --> ! ! <A NAME="constructor_summary"><!-- --></A> ! <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> ! <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> ! <TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2"> ! <B>Constructor Summary</B></FONT></TH> ! </TR> ! <TR BGCOLOR="white" CLASS="TableRowColor"> ! <TD><CODE><B><A HREF="../../../../../edu/harvard/syrah/pyxida/ping/PingManager.html#PingManager()">PingManager</A></B>()</CODE> ! ! <BR> ! </TD> ! </TR> ! </TABLE> ! ! <!-- ========== METHOD SUMMARY =========== --> ! ! <A NAME="method_summary"><!-- --></A> ! <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> ! <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> ! <TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2"> ! <B>Method Summary</B></FONT></TH> ! </TR> ! <TR BGCOLOR="white" CLASS="TableRowColor"> ! <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> ! <CODE> void</CODE></FONT></TD> ! <TD><CODE><B><A HREF="../../../../../edu/harvard/syrah/pyxida/ping/PingManager.html#addPingRequest(AddressIF, )">addPingRequest</A></B>(AddressIF remoteNode, ! <any> cbMeasurement)</CODE> ! ! <BR> ! </TD> ! </TR> ! <TR BGCOLOR="white" CLASS="TableRowColor"> ! <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> ! <CODE> void</CODE></FONT></TD> ! <TD><CODE><B><A HREF="../../../../../edu/harvard/syrah/pyxida/ping/PingManager.html#addPingRequest(AddressIF, AddressIF, )">addPingRequest</A></B>(AddressIF nodeA, ! AddressIF nodeB, ! <any> cbMeasurement)</CODE> ! ! <BR> ! </TD> ! </TR> ! <TR BGCOLOR="white" CLASS="TableRowColor"> ! <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> ! <CODE> void</CODE></FONT></TD> ! <TD><CODE><B><A HREF="../../../../../edu/harvard/syrah/pyxida/ping/PingManager.html#init(CB0)">init</A></B>(CB0 cbDone)</CODE> ! ! <BR> ! </TD> ! </TR> ! <TR BGCOLOR="white" CLASS="TableRowColor"> ! <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> ! <CODE> void</CODE></FONT></TD> ! <TD><CODE><B><A HREF="../../../../../edu/harvard/syrah/pyxida/ping/PingManager.html#printStats()">printStats</A></B>()</CODE> ! ! <BR> ! </TD> ! </TR> ! </TABLE> ! <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A> ! <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> ! <TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor"> ! <TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH> ! </TR> ! <TR BGCOLOR="white" CLASS="TableRowColor"> ! <TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD> ! </TR> ! </TABLE> ! ! <P> ! ! <!-- ========= CONSTRUCTOR DETAIL ======== --> ! ! <A NAME="constructor_detail"><!-- --></A> ! <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> ! <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> ! <TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2"> ! <B>Constructor Detail</B></FONT></TH> ! </TR> ! </TABLE> ! ! <A NAME="PingManager()"><!-- --></A><H3> ! PingManager</H3> ! <PRE> ! public <B>PingManager</B>()</PRE> ! <DL> ! </DL> ! ! <!-- ============ METHOD DETAIL ========== --> ! ! <A NAME="method_detail"><!-- --></A> ! <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> ! <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> ! <TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2"> ! <B>Method Detail</B></FONT></TH> ! </TR> ! </TABLE> ! ! <A NAME="init(CB0)"><!-- --></A><H3> ! init</H3> ! <PRE> ! public void <B>init</B>(CB0 cbDone)</PRE> ! <DL> ! <DD><DL> ! </DL> ! </DD> ! </DL> ! <HR> ! ! <A NAME="printStats()"><!-- --></A><H3> ! printStats</H3> ! <PRE> ! public void <B>printStats</B>()</PRE> ! <DL> ! <DD><DL> ! </DL> ! </DD> ! </DL> ! <HR> ! ! <A NAME="addPingRequest(AddressIF, )"><!-- --></A><H3> ! addPingRequest</H3> ! <PRE> ! public void <B>addPingRequest</B>(AddressIF remoteNode, ! <any> cbMeasurement)</PRE> ! <DL> ! <DD><DL> ! </DL> ! </DD> ! </DL> ! <HR> ! ! <A NAME="addPingRequest(AddressIF, AddressIF, )"><!-- --></A><H3> ! addPingRequest</H3> ! <PRE> ! public void <B>addPingRequest</B>(AddressIF nodeA, ! AddressIF nodeB, ! <any> cbMeasurement)</PRE> ! <DL> ! <DD><DL> ! </DL> ! </DD> ! </DL> ! <!-- ========= END OF CLASS DATA ========= --> ! <HR> ! ! ! <!-- ======= START OF BOTTOM NAVBAR ====== --> ! <A NAME="navbar_bottom"><!-- --></A> ! <A HREF="#skip-navbar_bottom" title="Skip navigation links"></A> ! <TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY=""> ! <TR> ! <TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> ! <A NAME="navbar_bottom_firstrow"><!-- --></A> ! <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY=""> ! <TR ALIGN="center" VALIGN="top"> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD> ! <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD> ! </TR> ! </TABLE> ! </TD> ! <TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> ! </EM> ! </TD> ! </TR> ! ! <TR> ! <TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2"> ! PREV CLASS ! NEXT CLASS</FONT></TD> ! <TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2"> ! <A HREF="../../../../../index.html?edu/harvard/syrah/pyxida/ping/PingManager.html" target="_top"><B>FRAMES</B></A> ! <A HREF="PingManager.html" target="_top"><B>NO FRAMES</B></A> ! <SCRIPT type="text/javascript"> ! <!-- ! if(window==top) { ! document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>'); ! } ! //--> ! </SCRIPT> ! <NOSCRIPT> ! <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A> ! </NOSCRIPT> ! ! ! </FONT></TD> ! </TR> ! <TR> ! <TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2"> ! SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> ! <TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2"> ! DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> ! </TR> ! </TABLE> ! <A NAME="skip-navbar_bottom"></A> ! <!-- ======== END OF BOTTOM NAVBAR ======= --> ! ! <HR> ! ! </BODY> ! </HTML> Index: package-summary.html =================================================================== RCS file: /cvsroot/pyxida/Pyxida/web/javadoc/edu/harvard/syrah/pyxida/ping/package-summary.html,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** package-summary.html 21 Feb 2007 15:40:50 -0000 1.1 --- package-summary.html 11 Mar 2009 16:44:49 -0000 1.2 *************** *** 1,3 **** ! <?xml version="1.0" encoding="UTF-8"?> ! <!DOCTYPE html PUBLIC "-//gnu.org///DTD XHTML 1.1 plus Target 1.0//EN" "../../../../../resources/xhtml11-target10.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><title>edu.harvard.syrah.pyxida.ping</title><script src="../../../../../resources/gjdoc.js" type="text/javascript"><!-- this comment required for konqueror 3.2.2 --></script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/><meta name="generator" content="GNU Gjdoc Standard Doclet"/><meta name="keywords" content="edu.harvard.syrah.pyxida.ping packages"/><link rel="stylesheet" type="text/css" href="../../../../../resources/gjdochtml-clean-layout.css" title="GNU Clean"/><link rel="stylesheet" type="text/css" href="../../../../../resources/gjdochtml-clean-color1.css" title="GNU Clean"/></head><body class="content package" onload="if(parent.contentPageLoaded)parent.contentPageLoaded(document.title)"><table class="navbar div top"><tr><td class="navbar div top"><div class="navbar div top"><span class="navbar item enabled"><a href="../../../../../overview-summary.html">Overview</a></span> <span class="navbar item active">Package</span> <span class="navbar item enabled"><a href="tree.html">Tree</a></span> <span class="navbar item enabled"><a href="../../../../../alphaindex.html">Index</a></span> <span class="navbar item enabled"><a href="../../../../../deprecated.html">Deprecated</a></span> <span class="navbar item enabled"><a href="../../../../../about.html">About</a></span></div></td></tr><tr><td class="navi"><a href="../../../../../edu/harvard/syrah/pyxida/nc/lib/package-summary.html">Prev Package</a> | Next Package</td><td class="navi"><a href="../../../../../index.html" title="Show in a frameset" target="_top">Frames</a> | <a href="package-summary.html" title="Show without frames" target="_top">No Frames</a> </td></tr></table><h1 class="package title">Package edu.harvard.syrah.pyxida.ping</h1><div class="package description top"></div><dl class="table container"><dd><table class="package summary" border="1" width="100%"><tr class="table header"><td colspan="2"><h2 class="table header">Class Summary</h2></td></tr><tr><td class="left"><a href="../../../../../edu/harvard/syrah/pyxida/ping/PingManager.html" title="Class in edu.harvard.syrah.pyxida.ping">PingManager</a></td><td class="right"></td></tr></table></dd></dl> ! <a name="description" id="description"/><div class="package description full"></div><p class="navbar bottom spacer"> </p><table class="navbar div bottom"><tr><td><div class="navbar div top"><span class="navbar item enabled"><a href="../../../../../overview-summary.html">Overview</a></span> <span class="navbar item active">Package</span> <span class="navbar item enabled"><a href="tree.html">Tree</a></span> <span class="navbar item enabled"><a href="../../../../../alphaindex.html">Index</a></span> <span class="navbar item enabled"><a href="../../../../../deprecated.html">Deprecated</a></span> <span class="navbar item enabled"><a href="../../../../../about.html">About</a></span></div></td></tr></table></body></html> \ No newline at end of file --- 1,155 ---- ! <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> ! <!--NewPage--> ! <HTML> ! <HEAD> ! <!-- Generated by javadoc (build 1.6.0_11) on Wed Mar 11 12:38:27 EDT 2009 --> ! <TITLE> ! edu.harvard.syrah.pyxida.ping ! </TITLE> ! ! <META NAME="date" CONTENT="2009-03-11"> ! ! <LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style"> ! ! <SCRIPT type="text/javascript"> ! function windowTitle() ! { ! if (location.href.indexOf('is-external=true') == -1) { ! parent.document.title="edu.harvard.syrah.pyxida.ping"; ! } ! } ! </SCRIPT> ! <NOSCRIPT> ! </NOSCRIPT> ! ! </HEAD> ! ! <BODY BGCOLOR="white" onload="windowTitle();"> ! <HR> ! ! ! <!-- ========= START OF TOP NAVBAR ======= --> ! <A NAME="navbar_top"><!-- --></A> ! <A HREF="#skip-navbar_top" title="Skip navigation links"></A> ! <TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY=""> ! <TR> ! <TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> ! <A NAME="navbar_top_firstrow"><!-- --></A> ! <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY=""> ! <TR ALIGN="center" VALIGN="top"> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD> ! <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> <FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT> </TD> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT> </TD> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD> ! </TR> ! </TABLE> ! </TD> ! <TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> ! </EM> ! </TD> ! </TR> ! ! <TR> ! <TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2"> ! <A HREF="../../../../../edu/harvard/syrah/pyxida/nc/lib/package-summary.html"><B>PREV PACKAGE</B></A> ! <A HREF="../../../../../edu/harvard/syrah/pyxida/sim/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD> ! <TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2"> ! <A HREF="../../../../../index.html?edu/harvard/syrah/pyxida/ping/package-summary.html" target="_top"><B>FRAMES</B></A> ! <A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A> ! <SCRIPT type="text/javascript"> ! <!-- ! if(window==top) { ! document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>'); ! } ! //--> ! </SCRIPT> ! <NOSCRIPT> ! <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A> ! </NOSCRIPT> ! ! ! </FONT></TD> ! </TR> ! </TABLE> ! <A NAME="skip-navbar_top"></A> ! <!-- ========= END OF TOP NAVBAR ========= --> ! ! <HR> ! <H2> ! Package edu.harvard.syrah.pyxida.ping ! </H2> ! ! <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> ! <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> ! <TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2"> ! <B>Class Summary</B></FONT></TH> ! </TR> ! <TR BGCOLOR="white" CLASS="TableRowColor"> ! <TD WIDTH="15%"><B><A HREF="../../../../../edu/harvard/syrah/pyxida/ping/PingManager.html" title="class in edu.harvard.syrah.pyxida.ping">PingManager</A></B></TD> ! <TD> </TD> ! </TR> ! </TABLE> ! ! ! <P> ! <DL> ! </DL> ! <HR> ! ! ! <!-- ======= START OF BOTTOM NAVBAR ====== --> ! <A NAME="navbar_bottom"><!-- --></A> ! <A HREF="#skip-navbar_bottom" title="Skip navigation links"></A> ! <TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY=""> ! <TR> ! <TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> ! <A NAME="navbar_bottom_firstrow"><!-- --></A> ! <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY=""> ! <TR ALIGN="center" VALIGN="top"> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD> ! <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> <FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT> </TD> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT> </TD> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD> ! </TR> ! </TABLE> ! </TD> ! <TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> ! </EM> ! </TD> ! </TR> ! ! <TR> ! <TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2"> ! <A HREF="../../../../../edu/harvard/syrah/pyxida/nc/lib/package-summary.html"><B>PREV PACKAGE</B></A> ! <A HREF="../../../../../edu/harvard/syrah/pyxida/sim/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD> ! <TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2"> ! <A HREF="../../../../../index.html?edu/harvard/syrah/pyxida/ping/package-summary.html" target="_top"><B>FRAMES</B></A> ! <A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A> ! <SCRIPT type="text/javascript"> ! <!-- ! if(window==top) { ! document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>'); ! } ! //--> ! </SCRIPT> ! <NOSCRIPT> ! <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A> ! </NOSCRIPT> ! ! ! </FONT></TD> ! </TR> ! </TABLE> ! <A NAME="skip-navbar_bottom"></A> ! <!-- ======== END OF BOTTOM NAVBAR ======= --> ! ! <HR> ! ! </BODY> ! </HTML> |
From: Jonathan L. <le...@us...> - 2009-03-11 16:45:17
|
Update of /cvsroot/pyxida/Pyxida/web/javadoc/edu/harvard/syrah/pyxida/nc/lib In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv7306/web/javadoc/edu/harvard/syrah/pyxida/nc/lib Modified Files: ApplicationObserver.html Coordinate.html EWMAStatistic.html NCClient.html NCClientIF.html ObserverList.html RemoteState.html Vec.html WindowStatistic.html package-summary.html Log Message: updated files for doing releases Index: EWMAStatistic.html =================================================================== RCS file: /cvsroot/pyxida/Pyxida/web/javadoc/edu/harvard/syrah/pyxida/nc/lib/EWMAStatistic.html,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** EWMAStatistic.html 21 Feb 2007 15:40:49 -0000 1.1 --- EWMAStatistic.html 11 Mar 2009 16:44:49 -0000 1.2 *************** *** 1,2 **** ! <?xml version="1.0" encoding="UTF-8"?> ! <!DOCTYPE html PUBLIC "-//gnu.org///DTD XHTML 1.1 plus Target 1.0//EN" "../../../../../../resources/xhtml11-target10.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><title>EWMAStatistic</title><script src="../../../../../../resources/gjdoc.js" type="text/javascript"><!-- this comment required for konqueror 3.2.2 --></script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/><meta name="generator" content="GNU Gjdoc Standard Doclet"/><meta name="keywords" content="edu.harvard.syrah.pyxida.nc.lib.EWMAStatistic class"/><meta name="keywords" content="GAIN"/><meta name="keywords" content="gain"/><meta name="keywords" content="value"/><meta name="keywords" content="add()"/><meta name="keywords" content="get()"/><link rel="stylesheet" type="text/css" href="../../../../../../resources/gjdochtml-clean-layout.css" title="GNU Clean"/><link rel="stylesheet" type="text/css" href="../../../../../../resources/gjdochtml-clean-color1.css" title="GNU Clean"/></head><body class="content class" onload="if(parent.contentPageLoaded)parent.contentPageLoaded(document.title)"><table class="navbar div top"><tr><td class="navbar div top"><div class="navbar div top"><span class="navbar item enabled"><a href="../../../../../../overview-summary.html">Overview</a></span> <span class="navbar item enabled"><a href="package-summary.html">Package</a></span> <span class="navbar item enabled"><a href="tree.html">Tree</a></span> <span class="navbar item enabled"><a href="../../../../../../alphaindex.html">Index</a></span> <span class="navbar item enabled"><a href="../../../../../../deprecated.html">Deprecated</a></span> <span class="navbar item enabled"><a href="../../../../../../about.html">About</a></span></div></td></tr><tr><td class="navi"><a href="../../../../../../edu/harvard/syrah/pyxida/nc/lib/Coordinate.html">Prev Class</a> | <a href="../../../../../../edu/harvard/syrah/pyxida/nc/lib/NCClient.html">Next Class</a></td><td class="navi"><a href="../../../../../../index.html" title="Show in a frameset" target="_top">Frames</a> | <a href="EWMAStatistic.html" title="Show without frames" target="_top">No Frames</a> </td></tr><tr><td class="navi">Summary: Nested | <a href="#summary-fields">Field</a> | <a href="#summary-methods">Method</a> | <a href="#summary-constructors">Constr</a></td><td class="navi">Detail: Nested | <a href="#detail-fields">Field</a> | <a href="#detail-methods">Method</a> | <a href="#detail-constructors">Constr</a></td></tr></table><div class="class title outer"><h3 class="class title-package">edu.harvard.syrah.pyxida.nc.lib</h3><h1 class="class title-class">Class EWMAStatistic</h1></div><div class="class inheritance-tree"><ul class="inheritance 0"><li class="inheritance 0"><code>java.lang.Object</code></li><li><ul class="inheritance 1"><li class="inheritance 1"><code>edu.harvard.syrah.pyxida.nc.lib.EWMAStatistic</code></li><li></li></ul></li></ul></div><hr/><div class="class synopsis outer"><div class="class synopsis declaration"><code>public class <b class="class synopsis name">EWMAStatistic</b></code></div><div class="class synopsis superclass"><code>extends java.lang.Object</code></div></div><hr/><div class="class description"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><a name="summary-fields" id="summary-fields"/><dl class="table container"><dd><table class="class summary" border="1" width="100%"><tr class="table header"><td colspan="2"><h2 class="table header">Field Summary</h2></td></tr><tr><td class="left" valign="top"><code class="synopsis">static double</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#GAIN">GAIN</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected double</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#gain">gain</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected double</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#value">value</a></code></dt></dl></td></tr></table></dd></dl><a name="summary-constructors" id="summary-constructors"/><dl class="table container"><dd><table class="class summary" border="1" width="100%"><tr class="table header"><td colspan="2"><h2 class="table header">Constructor Summary</h2></td></tr><tr><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#EWMAStatistic()">EWMAStatistic</a>()</code></dt></dl></td></tr><tr><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#EWMAStatistic(double)">EWMAStatistic</a>(double g)</code></dt></dl></td></tr></table></dd></dl><a name="summary-methods" id="summary-methods"/><dl class="table container"><dd><table class="class summary" border="1" width="100%"><tr class="table header"><td colspan="2"><h2 class="table header">Method Summary</h2></td></tr><tr><td class="left" valign="top"><code class="synopsis"> void</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#add(double)">add</a>(double item)</code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis"> double</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#get()">get</a>()</code></dt></dl></td></tr></table></dd></dl><a name="detail-fields" id="detail-fields"/><h2 class="section header">Field Details</h2><div class="section"><a name="GAIN" id="GAIN"/><div class="member detail outer"><h3 class="member detail name">GAIN</h3><pre class="member detail synopsis">public static final double GAIN</pre><blockquote class="member detail name"><div class="member detail description"></div><div class="member detail thrown list"><dl><dt class="member detail thrown header"><b>Field Value:</b></dt><dd class="member detail thrown item">0.0</dd></dl></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div></blockquote></div><hr/><a name="gain" id="gain"/><div class="member detail outer"><h3 class="member detail name">gain</h3><pre class="member detail synopsis">protected final double gain</pre><blockquote class="member detail name"><div class="member detail description"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div></blockquote></div><hr/><a name="value" id="value"/><div class="member detail outer"><h3 class="member detail name">value</h3><pre class="member detail synopsis">protected double value</pre><blockquote class="member detail name"><div class="member detail description"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div></blockquote></div></div><a name="detail-constructors" id="detail-constructors"/><h2 class="section header">Constructor Details</h2><div class="section"><a name="EWMAStatistic()" id="EWMAStatistic()"/><div class="member detail outer"><h3 class="member detail name">EWMAStatistic</h3><pre class="member detail synopsis">public EWMAStatistic()</pre><blockquote class="member detail name"><div class="member detail description"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div></blockquote></div><hr/><a name="EWMAStatistic(double)" id="EWMAStatistic(double)"/><div class="member detail outer"><h3 class="member detail name">EWMAStatistic</h3><pre class="member detail synopsis">public EWMAStatistic(double g)</pre><blockquote class="member detail name"><div class="member detail description"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div></blockquote></div></div><a name="detail-methods" id="detail-methods"/><h2 class="section header">Method Details</h2><div class="section"><a name="add(double)" id="add(double)"/><div class="member detail outer"><h3 class="member detail name">add</h3><pre class="member detail synopsis">public void add(double item)</pre><blockquote class="member detail name"><div class="member detail description"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div></blockquote></div><hr/><a name="get()" id="get()"/><div class="member detail outer"><h3 class="member detail name">get</h3><pre class="member detail synopsis">public double get()</pre><blockquote class="member detail name"><div class="member detail description"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div></blockquote></div></div><p class="navbar bottom spacer"> </p><table class="navbar div bottom"><tr><td><div class="navbar div top"><span class="navbar item enabled"><a href="../../../../../../overview-summary.html">Overview</a></span> <span class="navbar item enabled"><a href="package-summary.html">Package</a></span> <span class="navbar item enabled"><a href="tree.html">Tree</a></span> <span class="navbar item enabled"><a href="../../../../../../alphaindex.html">Index</a></span> <span class="navbar item enabled"><a href="../../../../../../deprecated.html">Deprecated</a></span> <span class="navbar item enabled"><a href="../../../../../../about.html">About</a></span></div></td></tr></table></body></html> \ No newline at end of file --- 1,355 ---- ! <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> ! <!--NewPage--> ! <HTML> ! <HEAD> ! <!-- Generated by javadoc (build 1.6.0_11) on Wed Mar 11 12:38:27 EDT 2009 --> ! <TITLE> ! EWMAStatistic ! </TITLE> ! ! <META NAME="date" CONTENT="2009-03-11"> ! ! <LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style"> ! ! <SCRIPT type="text/javascript"> ! function windowTitle() ! { ! if (location.href.indexOf('is-external=true') == -1) { ! parent.document.title="EWMAStatistic"; ! } ! } ! </SCRIPT> ! <NOSCRIPT> ! </NOSCRIPT> ! ! </HEAD> ! ! <BODY BGCOLOR="white" onload="windowTitle();"> ! <HR> ! ! ! <!-- ========= START OF TOP NAVBAR ======= --> ! <A NAME="navbar_top"><!-- --></A> ! <A HREF="#skip-navbar_top" title="Skip navigation links"></A> ! <TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY=""> ! <TR> ! <TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> ! <A NAME="navbar_top_firstrow"><!-- --></A> ! <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY=""> ! <TR ALIGN="center" VALIGN="top"> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD> ! <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD> ! </TR> ! </TABLE> ! </TD> ! <TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> ! </EM> ! </TD> ! </TR> ! ! <TR> ! <TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2"> ! <A HREF="../../../../../../edu/harvard/syrah/pyxida/nc/lib/Coordinate.html" title="class in edu.harvard.syrah.pyxida.nc.lib"><B>PREV CLASS</B></A> ! <A HREF="../../../../../../edu/harvard/syrah/pyxida/nc/lib/NCClient.html" title="class in edu.harvard.syrah.pyxida.nc.lib"><B>NEXT CLASS</B></A></FONT></TD> ! <TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2"> ! <A HREF="../../../../../../index.html?edu/harvard/syrah/pyxida/nc/lib/EWMAStatistic.html" target="_top"><B>FRAMES</B></A> ! <A HREF="EWMAStatistic.html" target="_top"><B>NO FRAMES</B></A> ! <SCRIPT type="text/javascript"> ! <!-- ! if(window==top) { ! document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>'); ! } ! //--> ! </SCRIPT> ! <NOSCRIPT> ! <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A> ! </NOSCRIPT> ! ! ! </FONT></TD> ! </TR> ! <TR> ! <TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2"> ! SUMMARY: NESTED | <A HREF="#field_summary">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> ! <TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2"> ! DETAIL: <A HREF="#field_detail">FIELD</A> | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> ! </TR> ! </TABLE> ! <A NAME="skip-navbar_top"></A> ! <!-- ========= END OF TOP NAVBAR ========= --> ! ! <HR> ! <!-- ======== START OF CLASS DATA ======== --> ! <H2> ! <FONT SIZE="-1"> ! edu.harvard.syrah.pyxida.nc.lib</FONT> ! <BR> ! Class EWMAStatistic</H2> ! <PRE> ! java.lang.Object ! <IMG SRC="../../../../../../resources/inherit.gif" ALT="extended by "><B>edu.harvard.syrah.pyxida.nc.lib.EWMAStatistic</B> ! </PRE> ! <HR> ! <DL> ! <DT><PRE>public class <B>EWMAStatistic</B><DT>extends java.lang.Object</DL> ! </PRE> ! ! <P> ! <HR> ! ! <P> ! <!-- =========== FIELD SUMMARY =========== --> ! ! <A NAME="field_summary"><!-- --></A> ! <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> ! <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> ! <TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2"> ! <B>Field Summary</B></FONT></TH> ! </TR> ! <TR BGCOLOR="white" CLASS="TableRowColor"> ! <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> ! <CODE>protected double</CODE></FONT></TD> ! <TD><CODE><B><A HREF="../../../../../../edu/harvard/syrah/pyxida/nc/lib/EWMAStatistic.html#gain">gain</A></B></CODE> ! ! <BR> ! </TD> ! </TR> ! <TR BGCOLOR="white" CLASS="TableRowColor"> ! <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> ! <CODE>static double</CODE></FONT></TD> ! <TD><CODE><B><A HREF="../../../../../../edu/harvard/syrah/pyxida/nc/lib/EWMAStatistic.html#GAIN">GAIN</A></B></CODE> ! ! <BR> ! </TD> ! </TR> ! <TR BGCOLOR="white" CLASS="TableRowColor"> ! <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> ! <CODE>protected double</CODE></FONT></TD> ! <TD><CODE><B><A HREF="../../../../../../edu/harvard/syrah/pyxida/nc/lib/EWMAStatistic.html#value">value</A></B></CODE> ! ! <BR> ! </TD> ! </TR> ! </TABLE> ! ! <!-- ======== CONSTRUCTOR SUMMARY ======== --> ! ! <A NAME="constructor_summary"><!-- --></A> ! <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> ! <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> ! <TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2"> ! <B>Constructor Summary</B></FONT></TH> ! </TR> ! <TR BGCOLOR="white" CLASS="TableRowColor"> ! <TD><CODE><B><A HREF="../../../../../../edu/harvard/syrah/pyxida/nc/lib/EWMAStatistic.html#EWMAStatistic()">EWMAStatistic</A></B>()</CODE> ! ! <BR> ! </TD> ! </TR> ! <TR BGCOLOR="white" CLASS="TableRowColor"> ! <TD><CODE><B><A HREF="../../../../../../edu/harvard/syrah/pyxida/nc/lib/EWMAStatistic.html#EWMAStatistic(double)">EWMAStatistic</A></B>(double g)</CODE> ! ! <BR> ! </TD> ! </TR> ! </TABLE> ! ! <!-- ========== METHOD SUMMARY =========== --> ! ! <A NAME="method_summary"><!-- --></A> ! <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> ! <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> ! <TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2"> ! <B>Method Summary</B></FONT></TH> ! </TR> ! <TR BGCOLOR="white" CLASS="TableRowColor"> ! <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> ! <CODE> void</CODE></FONT></TD> ! <TD><CODE><B><A HREF="../../../../../../edu/harvard/syrah/pyxida/nc/lib/EWMAStatistic.html#add(double)">add</A></B>(double item)</CODE> ! ! <BR> ! </TD> ! </TR> ! <TR BGCOLOR="white" CLASS="TableRowColor"> ! <TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1"> ! <CODE> double</CODE></FONT></TD> ! <TD><CODE><B><A HREF="../../../../../../edu/harvard/syrah/pyxida/nc/lib/EWMAStatistic.html#get()">get</A></B>()</CODE> ! ! <BR> ! </TD> ! </TR> ! </TABLE> ! <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A> ! <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> ! <TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor"> ! <TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH> ! </TR> ! <TR BGCOLOR="white" CLASS="TableRowColor"> ! <TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD> ! </TR> ! </TABLE> ! ! <P> ! ! <!-- ============ FIELD DETAIL =========== --> ! ! <A NAME="field_detail"><!-- --></A> ! <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> ! <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> ! <TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2"> ! <B>Field Detail</B></FONT></TH> ! </TR> ! </TABLE> ! ! <A NAME="GAIN"><!-- --></A><H3> ! GAIN</H3> ! <PRE> ! public static final double <B>GAIN</B></PRE> ! <DL> ! <DL> ! <DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#edu.harvard.syrah.pyxida.nc.lib.EWMAStatistic.GAIN">Constant Field Values</A></DL> ! </DL> ! <HR> ! ! <A NAME="gain"><!-- --></A><H3> ! gain</H3> ! <PRE> ! protected final double <B>gain</B></PRE> ! <DL> ! <DL> ! </DL> ! </DL> ! <HR> ! ! <A NAME="value"><!-- --></A><H3> ! value</H3> ! <PRE> ! protected double <B>value</B></PRE> ! <DL> ! <DL> ! </DL> ! </DL> ! ! <!-- ========= CONSTRUCTOR DETAIL ======== --> ! ! <A NAME="constructor_detail"><!-- --></A> ! <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> ! <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> ! <TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2"> ! <B>Constructor Detail</B></FONT></TH> ! </TR> ! </TABLE> ! ! <A NAME="EWMAStatistic(double)"><!-- --></A><H3> ! EWMAStatistic</H3> ! <PRE> ! public <B>EWMAStatistic</B>(double g)</PRE> ! <DL> ! </DL> ! <HR> ! ! <A NAME="EWMAStatistic()"><!-- --></A><H3> ! EWMAStatistic</H3> ! <PRE> ! public <B>EWMAStatistic</B>()</PRE> ! <DL> ! </DL> ! ! <!-- ============ METHOD DETAIL ========== --> ! ! <A NAME="method_detail"><!-- --></A> ! <TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY=""> ! <TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor"> ! <TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2"> ! <B>Method Detail</B></FONT></TH> ! </TR> ! </TABLE> ! ! <A NAME="add(double)"><!-- --></A><H3> ! add</H3> ! <PRE> ! public void <B>add</B>(double item)</PRE> ! <DL> ! <DD><DL> ! </DL> ! </DD> ! </DL> ! <HR> ! ! <A NAME="get()"><!-- --></A><H3> ! get</H3> ! <PRE> ! public double <B>get</B>()</PRE> ! <DL> ! <DD><DL> ! </DL> ! </DD> ! </DL> ! <!-- ========= END OF CLASS DATA ========= --> ! <HR> ! ! ! <!-- ======= START OF BOTTOM NAVBAR ====== --> ! <A NAME="navbar_bottom"><!-- --></A> ! <A HREF="#skip-navbar_bottom" title="Skip navigation links"></A> ! <TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY=""> ! <TR> ! <TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> ! <A NAME="navbar_bottom_firstrow"><!-- --></A> ! <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY=""> ! <TR ALIGN="center" VALIGN="top"> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD> ! <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD> ! <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD> ! </TR> ! </TABLE> ! </TD> ! <TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM> ! </EM> ! </TD> ! </TR> ! ! <TR> ! <TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2"> ! <A HREF="../../../../../../edu/harvard/syrah/pyxida/nc/lib/Coordinate.html" title="class in edu.harvard.syrah.pyxida.nc.lib"><B>PREV CLASS</B></A> ! <A HREF="../../../../../../edu/harvard/syrah/pyxida/nc/lib/NCClient.html" title="class in edu.harvard.syrah.pyxida.nc.lib"><B>NEXT CLASS</B></A></FONT></TD> ! <TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2"> ! <A HREF="../../../../../../index.html?edu/harvard/syrah/pyxida/nc/lib/EWMAStatistic.html" target="_top"><B>FRAMES</B></A> ! <A HREF="EWMAStatistic.html" target="_top"><B>NO FRAMES</B></A> ! <SCRIPT type="text/javascript"> ! <!-- ! if(window==top) { ! document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>'); ! } ! //--> ! </SCRIPT> ! <NOSCRIPT> ! <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A> ! </NOSCRIPT> ! ! ! </FONT></TD> ! </TR> ! <TR> ! <TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2"> ! SUMMARY: NESTED | <A HREF="#field_summary">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> ! <TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2"> ! DETAIL: <A HREF="#field_detail">FIELD</A> | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> ! </TR> ! </TABLE> ! <A NAME="skip-navbar_bottom"></A> ! <!-- ======== END OF BOTTOM NAVBAR ======= --> ! ! <HR> ! ! </BODY> ! </HTML> Index: NCClient.html =================================================================== RCS file: /cvsroot/pyxida/Pyxida/web/javadoc/edu/harvard/syrah/pyxida/nc/lib/NCClient.html,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** NCClient.html 21 Feb 2007 15:40:49 -0000 1.1 --- NCClient.html 11 Mar 2009 16:44:49 -0000 1.2 *************** *** 1,77 **** ! <?xml version="1.0" encoding="UTF-8"?> ! <!DOCTYPE html PUBLIC "-//gnu.org///DTD XHTML 1.1 plus Target 1.0//EN" "../../../../../../resources/xhtml11-target10.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><title>NCClient</title><script src="../../../../../../resources/gjdoc.js" type="text/javascript"><!-- this comment required for konqueror 3.2.2 --></script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/><meta name="generator" content="GNU Gjdoc Standard Doclet"/><meta name="keywords" content="edu.harvard.syrah.pyxida.nc.lib.NCClient class"/><meta name="keywords" content="crawler_log"/><meta name="keywords" content="SIMULATION"/><meta name="keywords" content="debug"/><meta name="keywords" content="debugCrawler"/><meta name="keywords" content="debugGood"/><meta name="keywords" content="VERSION_02"/><meta name="keywords" content="VERSION_03"/><meta name="keywords" content="VERSION_04"/><meta name="keywords" content="CURRENT_VERSION"/><meta name="keywords" content="COORD_ERROR"/><meta name="keywords" content="COORD_CONTROL"/><meta name="keywords" content="USE_HEIGHT"/><meta name="keywords" content="MAX_NEIGHBORS"/><meta name="keywords" content="WINDOW_SIZE"/><meta name="keywords" content="RS_EXPIRATION"/><meta name="keywords" content="MAINTENANCE_PERIOD"/><meta name="keywords" content="MAX_RS_MAP_SIZE"/><meta name="keywords" content="random"/><meta name="keywords" content="APP_UPDATE_THRESHOLD"/><meta name="keywords" content="OUTRAGEOUSLY_LARGE_RTT"/><meta name="keywords" content="GRAVITY_DIAMETER"/><meta name="keywords" content="MAX_DIST_FROM_ORIGIN"/><meta name="keywords" content="nf"/><meta name="keywords" content="NFDigits"/><meta name="keywords" content="num_dims"/><meta name="keywords" content="app_coord"/><meta name="keywords" content="sys_coord"/><meta name="keywords" content="error"/><meta name="keywords" content="MAX_ERROR"/><meta name="keywords" content="keepStatistics"/><meta name="keywords" content="RUNNING_STAT_HISTORY"/><meta name="keywords" content="running_sys_error"/><meta name="keywords" content="running_app_error"/><meta name="keywords" content="running_sys_dd"/><meta name="keywords" content="running_app_dd"/><meta name="keywords" content="running_neighbors_used"/><meta name="keywords" content="running_relative_diff"/><meta name="keywords" content="running_sys_update_frequency"/><meta name="keywords" content="running_app_update_frequency"/><meta name="keywords" content="running_age"/><meta name="keywords" content="running_gravity"/><meta name="keywords" content="time_of_last_app_update"/><meta name="keywords" content="neighbors"/><meta name="keywords" content="time_of_last_sys_update"/><meta name="keywords" content="obs_list"/><meta name="keywords" content="RemoteState<T>>rs_map"/><meta name="keywords" content="hosts"/><meta name="keywords" content="start_centroid"/><meta name="keywords" content="updated_app_coord_at_least_once"/><meta name="keywords" content="start_coords"/><meta name="keywords" content="current_coords"/><meta name="keywords" content="nearest_neighbor"/><meta name="keywords" content="local_addr"/><meta name="keywords" content="setLocalID()"/><meta name="keywords" content="computeApplicationStatistics()"/><meta name="keywords" content="toString()"/><meta name="keywords" content="Double> getStatistics()"/><meta name="keywords" content="reset()"/><meta name="keywords" content="updatedYet()"/><meta name="keywords" content="getNumDimensions()"/><meta name="keywords" content="getApplicationCoords()"/><meta name="keywords" content="getSystemCoords()"/><meta name="keywords" content="getSystemError()"/><meta name="keywords" content="getAge()"/><meta name="keywords" content="getObserverList()"/><meta name="keywords" content="addHost()"/><meta name="keywords" content="removeHost()"/><meta name="keywords" content="containsHost()"/><meta name="keywords" content="getHosts()"/><meta name="keywords" content="processSample()"/><meta name="keywords" content="updateError()"/><meta name="keywords" content="addNeighbor()"/><meta name="keywords" content="removeNeighbor()"/><meta name="keywords" content="getNeighborToPing()"/><meta name="keywords" content="updateSystemCoordinate()"/><meta name="keywords" content="performMaintenance()"/><meta name="keywords" content="tryUpdateAppCoordinate()"/><meta name="keywords" content="setRandomSeed()"/><meta name="keywords" content="startUp()"/><meta name="keywords" content="shutDown()"/><link rel="stylesheet" type="text/css" href="../../../../../../resources/gjdochtml-clean-layout.css" title="GNU Clean"/><link rel="stylesheet" type="text/css" href="../../../../../../resources/gjdochtml-clean-color1.css" title="GNU Clean"/></head><body class="content class" onload="if(parent.contentPageLoaded)parent.contentPageLoaded(document.title)"><table class="navbar div top"><tr><td class="navbar div top"><div class="navbar div top"><span class="navbar item enabled"><a href="../../../../../../overview-summary.html">Overview</a></span> <span class="navbar item enabled"><a href="package-summary.html">Package</a></span> <span class="navbar item enabled"><a href="tree.html">Tree</a></span> <span class="navbar item enabled"><a href="../../../../../../alphaindex.html">Index</a></span> <span class="navbar item enabled"><a href="../../../../../../deprecated.html">Deprecated</a></span> <span class="navbar item enabled"><a href="../../../../../../about.html">About</a></span></div></td></tr><tr><td class="navi"><a href="../../../../../../edu/harvard/syrah/pyxida/nc/lib/EWMAStatistic.html">Prev Class</a> | <a href="../../../../../../edu/harvard/syrah/pyxida/nc/lib/NCClientIF.html">Next Class</a></td><td class="navi"><a href="../../../../../../index.html" title="Show in a frameset" target="_top">Frames</a> | <a href="NCClient.html" title="Show without frames" target="_top">No Frames</a> </td></tr><tr><td class="navi">Summary: Nested | <a href="#summary-fields">Field</a> | <a href="#summary-methods">Method</a> | <a href="#summary-constructors">Constr</a></td><td class="navi">Detail: Nested | <a href="#detail-fields">Field</a> | <a href="#detail-methods">Method</a> | <a href="#detail-constructors">Constr</a></td></tr></table><div class="class title outer"><h3 class="class title-package">edu.harvard.syrah.pyxida.nc.lib</h3><h1 class="class title-class">Class NCClient<T></h1></div><div class="class inheritance-tree"><ul class="inheritance 0"><li class="inheritance 0"><code>java.lang.Object</code></li><li><ul class="inheritance 1"><li class="inheritance 1"><code>edu.harvard.syrah.pyxida.nc.lib.NCClient<T></code></li><li></li></ul></li></ul></div><dl class="class knownimplementing"><dt class="header"><b>Implemented Interfaces:</b></dt><dd class="item">NCClientIF</dd></dl><hr/><div class="class synopsis outer"><div class="class synopsis declaration"><code>public class <b class="class synopsis name">NCClient<T></b></code></div><div class="class synopsis superclass"><code>extends java.lang.Object</code></div><div class="class synopsis implements"><code>implements NCClientIF</code></div></div><hr/><div class="class description"> A class that is responsible for updating the local Vivaldi coordinates, both at the system and application level, and also maintaining the state of remote hosts that support Vivaldi. ! </div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><a name="summary-fields" id="summary-fields"/><dl class="table container"><dd><table class="class summary" border="1" width="100%"><tr class="table header"><td colspan="2"><h2 class="table header">Field Summary</h2></td></tr><tr><td class="left" valign="top"><code class="synopsis">static double</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#APP_UPDATE_THRESHOLD">APP_UPDATE_THRESHOLD</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">static double</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#COORD_CONTROL">COORD_CONTROL</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">static double</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#COORD_ERROR">COORD_ERROR</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">static byte</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#CURRENT_VERSION">CURRENT_VERSION</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">static double</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#GRAVITY_DIAMETER">GRAVITY_DIAMETER</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">static long</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#MAINTENANCE_PERIOD">MAINTENANCE_PERIOD</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">static double</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#MAX_DIST_FROM_ORIGIN">MAX_DIST_FROM_ORIGIN</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">static double</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#MAX_ERROR">MAX_ERROR</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">static int</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#MAX_NEIGHBORS">MAX_NEIGHBORS</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">static int</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#MAX_RS_MAP_SIZE">MAX_RS_MAP_SIZE</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected static int</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#NFDigits">NFDigits</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">static double</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#OUTRAGEOUSLY_LARGE_RTT">OUTRAGEOUSLY_LARGE_RTT</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">static long</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#RS_EXPIRATION">RS_EXPIRATION</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">static int</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#RUNNING_STAT_HISTORY">RUNNING_STAT_HISTORY</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected HashMap<T,</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#RemoteState<T>>rs_map">RemoteState<T>>rs_map</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">static boolean</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#SIMULATION">SIMULATION</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">static boolean</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#USE_HEIGHT">USE_HEIGHT</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">static byte</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#VERSION_02">VERSION_02</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">static byte</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#VERSION_03">VERSION_03</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">static byte</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#VERSION_04">VERSION_04</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected static int</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#WINDOW_SIZE">WINDOW_SIZE</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected Coordinate</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#app_coord">app_coord</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected static Logger</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#crawler_log">crawler_log</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected List<Coordinate></code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#current_coords">current_coords</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">static boolean</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#debug">debug</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">static boolean</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#debugCrawler">debugCrawler</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">static boolean</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#debugGood">debugGood</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected double</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#error">error</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected Set<T></code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#hosts">hosts</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">static boolean</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#keepStatistics">keepStatistics</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected T</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#local_addr">local_addr</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected Coordinate</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#nearest_neighbor">nearest_neighbor</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected List<RemoteState<T>></code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#neighbors">neighbors</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected static NumberFormat</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#nf">nf</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected int</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#num_dims">num_dims</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected ObserverList</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#obs_list">obs_list</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">static Random</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#random">random</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected EWMAStatistic</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#running_age">running_age</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected EWMAStatistic</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#running_app_dd">running_app_dd</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected WindowStatistic</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#running_app_error">running_app_error</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected EWMAStatistic</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#running_app_update_frequency">running_app_update_frequency</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected EWMAStatistic</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#running_gravity">running_gravity</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected EWMAStatistic</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#running_neighbors_used">running_neighbors_used</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected EWMAStatistic</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#running_relative_diff">running_relative_diff</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected EWMAStatistic</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#running_sys_dd">running_sys_dd</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected WindowStatistic</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#running_sys_error">running_sys_error</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected EWMAStatistic</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#running_sys_update_frequency">running_sys_update_frequency</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected Coordinate</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#start_centroid">start_centroid</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected List<Coordinate></code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#start_coords">start_coords</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected Coordinate</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#sys_coord">sys_coord</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected long</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#time_of_last_app_update">time_of_last_app_update</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected long</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#time_of_last_sys_update">time_of_last_sys_update</a></code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected boolean</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#updated_app_coord_at_least_once">updated_app_coord_at_least_once</a></code></dt></dl></td></tr></table></dd></dl><a name="summary-constructors" id="summary-constructors"/><dl class="table container"><dd><table class="class summary" border="1" width="100%"><tr class="table header"><td colspan="2"><h2 class="table header">Constructor Summary</h2></td></tr><tr><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#NCClient(int)">NCClient</a>(int _num_dims)</code></dt><dd class="description"> Creates a new instance.</dd></dl></td></tr></table></dd></dl><a name="summary-methods" id="summary-methods"/><dl class="table container"><dd><table class="class summary" border="1" width="100%"><tr class="table header"><td colspan="2"><h2 class="table header">Method Summary</h2></td></tr><tr><td class="left" valign="top"><code class="synopsis"> Hashtable<String,</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#Double> getStatistics()">Double> getStatistics</a>()</code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis"> boolean</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#addHost(T)">addHost</a>(T addr)</code></dt><dd class="description"> Notifies this <code>VivaldiClient</code> object that a host that supports ! Vivaldi has joined the system.</dd></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis"> boolean</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#addHost(T,Coordinate,double,long,boolean)">addHost</a>(T addr, Coordinate _r_coord, double r_error, long curr_time, boolean can_update)</code></dt><dd class="description"> Notifies this <code>VivaldiClient</code> object that a host that supports ! Vivaldi and has the provided coordinates and error has joined the system.</dd></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected boolean</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#addNeighbor(RemoteState<T>)">addNeighbor</a>(RemoteState<T> guy)</code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected edu.harvard.syrah.pyxida.nc.lib.NCClient.ApplicationStatistics</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#computeApplicationStatistics()">computeApplicationStatistics</a>()</code></dt></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis"> boolean</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#containsHost(T)">containsHost</a>(T addr)</code></dt><dd class="description"> Returns whether the given host has been registered with this ! <code>VivaldiClient</code> object.</dd></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis"> long</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#getAge(long)">getAge</a>(long curr_time)</code></dt><dd class="description"> Returns the age of our coordinate Note that this does not require ! clock-synchronization because it is relative to our coordinate ! </dd></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis"> Coordinate</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#getApplicationCoords()">getApplicationCoords</a>()</code></dt><dd class="description"> Returns the application-level Vivaldi coordinates.</dd></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis"> Set<T></code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#getHosts()">getHosts</a>()</code></dt><dd class="description"> Returns all hosts that support Vivaldi and have been registered with this [...1785 lines suppressed...] ! <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A> ! </NOSCRIPT> ! ! ! </FONT></TD> ! </TR> ! <TR> ! <TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2"> ! SUMMARY: NESTED | <A HREF="#field_summary">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD> ! <TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2"> ! DETAIL: <A HREF="#field_detail">FIELD</A> | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD> ! </TR> ! </TABLE> ! <A NAME="skip-navbar_bottom"></A> ! <!-- ======== END OF BOTTOM NAVBAR ======= --> ! ! <HR> ! ! </BODY> ! </HTML> Index: ObserverList.html =================================================================== RCS file: /cvsroot/pyxida/Pyxida/web/javadoc/edu/harvard/syrah/pyxida/nc/lib/ObserverList.html,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** ObserverList.html 21 Feb 2007 15:40:49 -0000 1.1 --- ObserverList.html 11 Mar 2009 16:44:49 -0000 1.2 *************** *** 1,23 **** ! <?xml version="1.0" encoding="UTF-8"?> ! <!DOCTYPE html PUBLIC "-//gnu.org///DTD XHTML 1.1 plus Target 1.0//EN" "../../../../../../resources/xhtml11-target10.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><title>ObserverList</title><script src="../../../../../../resources/gjdoc.js" type="text/javascript"><!-- this comment required for konqueror 3.2.2 --></script><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/><meta name="generator" content="GNU Gjdoc Standard Doclet"/><meta name="keywords" content="edu.harvard.syrah.pyxida.nc.lib.ObserverList class"/><meta name="keywords" content="obs_list"/><meta name="keywords" content="size()"/><meta name="keywords" content="isEmpty()"/><meta name="keywords" content="contains()"/><meta name="keywords" content="iterator()"/><meta name="keywords" content="add()"/><meta name="keywords" content="remove()"/><meta name="keywords" content="clear()"/><link rel="stylesheet" type="text/css" href="../../../../../../resources/gjdochtml-clean-layout.css" title="GNU Clean"/><link rel="stylesheet" type="text/css" href="../../../../../../resources/gjdochtml-clean-color1.css" title="GNU Clean"/></head><body class="content class" onload="if(parent.contentPageLoaded)parent.contentPageLoaded(document.title)"><table class="navbar div top"><tr><td class="navbar div top"><div class="navbar div top"><span class="navbar item enabled"><a href="../../../../../../overview-summary.html">Overview</a></span> <span class="navbar item enabled"><a href="package-summary.html">Package</a></span> <span class="navbar item enabled"><a href="tree.html">Tree</a></span> <span class="navbar item enabled"><a href="../../../../../../alphaindex.html">Index</a></span> <span class="navbar item enabled"><a href="../../../../../../deprecated.html">Deprecated</a></span> <span class="navbar item enabled"><a href="../../../../../../about.html">About</a></span></div></td></tr><tr><td class="navi"><a href="../../../../../../edu/harvard/syrah/pyxida/nc/lib/NCClientIF.html">Prev Class</a> | <a href="../../../../../../edu/harvard/syrah/pyxida/nc/lib/RemoteState.html">Next Class</a></td><td class="navi"><a href="../../../../../../index.html" title="Show in a frameset" target="_top">Frames</a> | <a href="ObserverList.html" title="Show without frames" target="_top">No Frames</a> </td></tr><tr><td class="navi">Summary: Nested | <a href="#summary-fields">Field</a> | <a href="#summary-methods">Method</a> | <a href="#summary-constructors">Constr</a></td><td class="navi">Detail: Nested | <a href="#detail-fields">Field</a> | <a href="#detail-methods">Method</a> | <a href="#detail-constructors">Constr</a></td></tr></table><div class="class title outer"><h3 class="class title-package">edu.harvard.syrah.pyxida.nc.lib</h3><h1 class="class title-class">Class ObserverList</h1></div><div class="class inheritance-tree"><ul class="inheritance 0"><li class="inheritance 0"><code>java.lang.Object</code></li><li><ul class="inheritance 1"><li class="inheritance 1"><code>edu.harvard.syrah.pyxida.nc.lib.ObserverList</code></li><li></li></ul></li></ul></div><hr/><div class="class synopsis outer"><div class="class synopsis declaration"><code>public class <b class="class synopsis name">ObserverList</b></code></div><div class="class synopsis superclass"><code>extends java.lang.Object</code></div></div><hr/><div class="class description"> A list of observers for the application-level coordinate. ! </div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><a name="summary-fields" id="summary-fields"/><dl class="table container"><dd><table class="class summary" border="1" width="100%"><tr class="table header"><td colspan="2"><h2 class="table header">Field Summary</h2></td></tr><tr><td class="left" valign="top"><code class="synopsis">protected List<ApplicationObserver></code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#obs_list">obs_list</a></code></dt></dl></td></tr></table></dd></dl><a name="summary-constructors" id="summary-constructors"/><dl class="table container"><dd><table class="class summary" border="1" width="100%"><tr class="table header"><td colspan="2"><h2 class="table header">Constructor Summary</h2></td></tr><tr><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#ObserverList()">ObserverList</a>()</code></dt></dl></td></tr></table></dd></dl><a name="summary-methods" id="summary-methods"/><dl class="table container"><dd><table class="class summary" border="1" width="100%"><tr class="table header"><td colspan="2"><h2 class="table header">Method Summary</h2></td></tr><tr><td class="left" valign="top"><code class="synopsis"> boolean</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#add(ApplicationObserver)">add</a>(ApplicationObserver obj)</code></dt><dd class="description"> Adds the given observer to the list of observers.</dd></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis"> void</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#clear()">clear</a>()</code></dt><dd class="description"> Removes all the observers from the list.</dd></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis"> boolean</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#contains(ApplicationObserver)">contains</a>(ApplicationObserver obj)</code></dt><dd class="description"> Returns whether the list contains the given observer.</dd></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis"> boolean</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#isEmpty()">isEmpty</a>()</code></dt><dd class="description"> Returns whether the observer list is empty, meaning its size equals ! <code>0</code>.</dd></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis"> Iterator<ApplicationObserver></code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#iterator()">iterator</a>()</code></dt><dd class="description"> Returns an iterator over the list of observers.</dd></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis"> boolean</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#remove(ApplicationObserver)">remove</a>(ApplicationObserver obj)</code></dt><dd class="description"> Removes the given observer from the list of observers.</dd></dl></td></tr><tr><td class="left" valign="top"><code class="synopsis"> int</code></td><td class="right"><dl class="list"><dt class="synopsis"><code><a href="#size()">size</a>()</code></dt><dd class="description"> Returns the number of observers in the list.</dd></dl></td></tr></table></dd></dl><a name="detail-fields" id="detail-fields"/><h2 class="section header">Field Details</h2><div class="section"><a name="obs_list" id="obs_list"/><div class="member detail outer"><h3 class="member detail name">obs_list</h3><pre class="member detail synopsis">protected final List<ApplicationObserver> obs_list</pre><blockquote class="member detail name"><div class="member detail description"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div></blockquote></div></div><a name="detail-constructors" id="detail-constructors"/><h2 class="section header">Constructor Details</h2><div class="section"><a name="ObserverList()" id="ObserverList()"/><div class="member detail outer"><h3 class="member detail name">ObserverList</h3><pre class="member detail synopsis">protected ObserverList()</pre><blockquote class="member detail name"><div class="member detail description"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div></blockquote></div></div><a name="detail-methods" id="detail-methods"/><h2 class="section header">Method Details</h2><div class="section"><a name="add(ApplicationObserver)" id="add(ApplicationObserver)"/><div class="member detail outer"><h3 class="member detail name">add</h3><pre class="member detail synopsis">public boolean add(ApplicationObserver obj)</pre><blockquote class="member detail name"><div class="member detail description"> Adds the given observer to the list of observers. If the parameter ! <code>obj</code> is <code>null</code>, this method returns ! <code>false</code> and the underlying list remains unchanged. ! </div><div class="parameter"><dl><dt class="header"><b>Parameters:</b></dt><dd class="item"><code class="name">obj</code><span class="separator"> - </span><span class="description">the observer to add to the list</span></dd></dl></div><div class="member detail return list"><dl><dt class="member detail return header"><b>Returns:</b></dt><dd class="member detail return item"><code>true</code> if the observer is added to the list, ! <code>false</code> otherwise</dd></dl></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div></blockquote></div><hr/><a name="clear()" id="clear()"/><div class="member detail outer"><h3 class="member detail name">clear</h3><pre class="member detail synopsis">public void clear()</pre><blockquote class="member detail name"><div class="member detail description"> Removes all the observers from the list. ! </div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div></blockquote></div><hr/><a name="contains(ApplicationObserver)" id="contains(ApplicationObserver)"/><div class="member detail outer"><h3 class="member detail name">contains</h3><pre class="member detail synopsis">public boolean contains(ApplicationObserver obj)</pre><blockquote class="member detail name"><div class="member detail description"> Returns whether the list contains the given observer. If the parameter ! <code>obj</code> is <code>null</code>, this method returns ! <code>false</code>. ! </div><div class="parameter"><dl><dt class="header"><b>Parameters:</b></dt><dd class="item"><code class="name">obj</code><span class="separator"> - </span><span class="description">the observer to query for membership in the list</span></dd></dl></div><div class="member detail return list"><dl><dt class="member detail return header"><b>Returns:</b></dt><dd class="member detail return item"><code>true</code> if the list contains the observer, ! <code>false</code> otherwise</dd></dl></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div></blockquote></div><hr/><a name="isEmpty()" id="isEmpty()"/><div class="member detail outer"><h3 class="member detail name">isEmpty</h3><pre class="member detail synopsis">public boolean isEmpty()</pre><blockquote class="member detail name"><div class="member detail description"> Returns whether the observer list is empty, meaning its size equals ! <code>0</code>. ! </div><div class="member detail return list"><dl><dt class="member detail return header"><b>Returns:</b></dt><dd class="member detail return item"><code>true</code> if the observer list is empty, ! <code>false</code> otherwise</dd></dl></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div></blockquote></div><hr/><a name="iterator()" id="iterator()"/><div class="member detail outer"><h3 class="member detail name">iterator</h3><pre class="member detail synopsis">public Iterator<ApplicationObserver> iterator()</pre><blockquote class="member detail name"><div class="member detail description"> Returns an iterator over the list of observers. ! </div><div class="member detail return list"><dl><dt class="member detail return header"><b>Returns:</b></dt><dd class="member detail return item">an iterator over the observer list</dd></dl></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><div class="taglet"></div><... [truncated message content] |