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: Peter P. <pr...@us...> - 2006-11-22 18:50:44
|
Update of /cvsroot/pyxida/Pyxida/lib/jpcap-0.5.1-lib/doc/javadoc/jpcap In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13177/lib/jpcap-0.5.1-lib/doc/javadoc/jpcap Log Message: Directory /cvsroot/pyxida/Pyxida/lib/jpcap-0.5.1-lib/doc/javadoc/jpcap added to the repository |
|
From: Peter P. <pr...@us...> - 2006-11-22 18:50:44
|
Update of /cvsroot/pyxida/Pyxida/lib/jpcap-0.5.1-lib/sample In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13177/lib/jpcap-0.5.1-lib/sample Log Message: Directory /cvsroot/pyxida/Pyxida/lib/jpcap-0.5.1-lib/sample added to the repository |
|
From: Peter P. <pr...@us...> - 2006-11-22 18:50:43
|
Update of /cvsroot/pyxida/Pyxida/lib/jpcap-0.5.1-lib/src/java In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13177/lib/jpcap-0.5.1-lib/src/java Log Message: Directory /cvsroot/pyxida/Pyxida/lib/jpcap-0.5.1-lib/src/java added to the repository |
|
From: Peter P. <pr...@us...> - 2006-11-22 18:50:40
|
Update of /cvsroot/pyxida/Pyxida/lib/jpcap-0.5.1-lib/src/java/jpcap/packet In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13177/lib/jpcap-0.5.1-lib/src/java/jpcap/packet Log Message: Directory /cvsroot/pyxida/Pyxida/lib/jpcap-0.5.1-lib/src/java/jpcap/packet added to the repository |
|
From: Peter P. <pr...@us...> - 2006-11-22 18:50:40
|
Update of /cvsroot/pyxida/Pyxida/lib/jpcap-0.5.1-lib/doc/javadoc/resources In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13177/lib/jpcap-0.5.1-lib/doc/javadoc/resources Log Message: Directory /cvsroot/pyxida/Pyxida/lib/jpcap-0.5.1-lib/doc/javadoc/resources added to the repository |
|
From: Peter P. <pr...@us...> - 2006-11-22 18:50:40
|
Update of /cvsroot/pyxida/Pyxida/lib/jpcap-0.5.1-lib/doc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13177/lib/jpcap-0.5.1-lib/doc Log Message: Directory /cvsroot/pyxida/Pyxida/lib/jpcap-0.5.1-lib/doc added to the repository |
|
From: Peter P. <pr...@us...> - 2006-11-22 18:50:40
|
Update of /cvsroot/pyxida/Pyxida/lib/jpcap-0.5.1-lib/doc/javadoc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13177/lib/jpcap-0.5.1-lib/doc/javadoc Log Message: Directory /cvsroot/pyxida/Pyxida/lib/jpcap-0.5.1-lib/doc/javadoc added to the repository |
|
From: Peter P. <pr...@us...> - 2006-11-22 18:46:50
|
Update of /cvsroot/pyxida/Pyxida/web/img In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11624/web/img Modified Files: imperial_logo-scaled.gif Added Files: harvard_logo-scaled.gif Log Message: Made ICMPPinger work (sort of) - the code still hangs every nth invocation - haven't tested the external NIC detection - external NIC detection is very hacky Fixed webpage to support transparency on IE Index: imperial_logo-scaled.gif =================================================================== RCS file: /cvsroot/pyxida/Pyxida/web/img/imperial_logo-scaled.gif,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 Binary files /tmp/cvsTKVawH and /tmp/cvsBys6yU differ --- NEW FILE: harvard_logo-scaled.gif --- (This appears to be a binary file; contents omitted.) |
|
From: Peter P. <pr...@us...> - 2006-11-22 18:46:48
|
Update of /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/ping In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11624/src/edu/harvard/syrah/pyxida/ping Modified Files: ICMPPinger.java PingManager.java UDPAppPinger.java JPCapPinger.java Added Files: Pinger.java Log Message: Made ICMPPinger work (sort of) - the code still hangs every nth invocation - haven't tested the external NIC detection - external NIC detection is very hacky Fixed webpage to support transparency on IE Index: PingManager.java =================================================================== RCS file: /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/ping/PingManager.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** PingManager.java 21 Nov 2006 21:14:59 -0000 1.2 --- PingManager.java 22 Nov 2006 18:46:44 -0000 1.3 *************** *** 30,34 **** pingerSet.add(pinger); pinger.init(defaultPingAddr); ! } }); --- 30,34 ---- pingerSet.add(pinger); pinger.init(defaultPingAddr); ! } }); --- NEW FILE: Pinger.java --- package edu.harvard.syrah.pyxida.ping; import edu.harvard.syrah.sbon.comm.AddressIF; abstract class Pinger implements PingerIF { protected AddressIF localAddr; protected AddressIF defaultPingAddr; protected Thread thread; protected boolean shutdown = false; } Index: JPCapPinger.java =================================================================== RCS file: /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/ping/JPCapPinger.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** JPCapPinger.java 21 Nov 2006 21:14:59 -0000 1.1 --- JPCapPinger.java 22 Nov 2006 18:46:44 -0000 1.2 *************** *** 1,4 **** --- 1,10 ---- package edu.harvard.syrah.pyxida.ping; + import java.net.InetAddress; + + import jpcap.JpcapCaptor; + import jpcap.JpcapSender; + import jpcap.NetworkInterface; + /** * This is the parent class of the Pingers that use the JPCap library *************** *** 6,10 **** * */ ! abstract class JPCapPinger implements PingerIF { } --- 12,24 ---- * */ ! abstract class JPCapPinger extends Pinger implements PingerIF { + protected JpcapCaptor captor; + protected JpcapSender sender; + protected NetworkInterface device; + + protected InetAddress thisIP; + byte[] gwMAC; + + } Index: UDPAppPinger.java =================================================================== RCS file: /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/ping/UDPAppPinger.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** UDPAppPinger.java 21 Nov 2006 21:14:59 -0000 1.1 --- UDPAppPinger.java 22 Nov 2006 18:46:44 -0000 1.2 *************** *** 4,8 **** import edu.harvard.syrah.sbon.comm.AddressIF; ! class UDPAppPinger implements PingerIF { private static final Log log = new Log(UDPAppPinger.class); --- 4,8 ---- import edu.harvard.syrah.sbon.comm.AddressIF; ! class UDPAppPinger extends Pinger implements PingerIF { private static final Log log = new Log(UDPAppPinger.class); Index: ICMPPinger.java =================================================================== RCS file: /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/ping/ICMPPinger.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** ICMPPinger.java 21 Nov 2006 21:14:59 -0000 1.1 --- ICMPPinger.java 22 Nov 2006 18:46:44 -0000 1.2 *************** *** 2,12 **** import java.io.IOException; import jpcap.JpcapCaptor; - import jpcap.JpcapSender; import jpcap.NetworkInterface; import jpcap.packet.EthernetPacket; import jpcap.packet.ICMPPacket; import jpcap.packet.IPPacket; import edu.harvard.syrah.prp.Log; import edu.harvard.syrah.prp.POut; --- 2,19 ---- import java.io.IOException; + import java.io.InputStream; + import java.net.Inet4Address; + import java.net.InetAddress; + import java.net.MalformedURLException; + import java.net.URL; + import java.util.Arrays; import jpcap.JpcapCaptor; 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; *************** *** 17,29 **** private static final Log log = new Log(ICMPPinger.class); - private JpcapSender sender; - - private AddressIF localAddr; - private AddressIF defaultPingAddr; - - private Thread thread; - - private boolean shutdown = false; - public void init(AddressIF defaultPingAddr) { this.localAddr = AddressFactory.createLocalAddress(); --- 24,27 ---- *************** *** 34,60 **** NetworkInterface[] devices = JpcapCaptor.getDeviceList(); log.debug("devices=" + POut.toString(devices)); ! assert devices.length > 0; ! for (int i = 0; i < devices.length; i++) { try { ! sender = JpcapSender.openDevice(devices[i]); } catch (IOException e) { log.debug("Could not open interface no " + i + ". Trying next one"); continue; } ! sendICMP(ICMPPinger.this.defaultPingAddr); } ICMPPinger.this.run(); ! } }; thread.start(); } - - public double ping(AddressIF remoteNode) throws UnsupportedOperationException { ! // TODO Auto-generated method stub ! return 0; } --- 32,111 ---- NetworkInterface[] devices = JpcapCaptor.getDeviceList(); log.debug("devices=" + POut.toString(devices)); ! assert devices.length > 0; ! ! nextDevice: for (int i = 0; i < devices.length; i++) { + + log.debug("Opening new device " + devices[i]); try { ! captor = JpcapCaptor.openDevice(devices[i], 2000, false, 5000); } catch (IOException e) { log.debug("Could not open interface no " + i + ". Trying next one"); continue; } + + log.debug("Device opened successfully."); + device = devices[i]; ! if (device.loopback) { ! log.debug("Ignoring loopback device."); ! captor.close(); ! continue; ! } ! ! for (NetworkInterfaceAddress addr : device.addresses) ! if (addr.address instanceof Inet4Address) { ! thisIP = addr.address; ! log.debug("thisIP=" + thisIP); ! break; ! } ! ! //obtain MAC address of the default gateway ! InetAddress pingAddr = ICMPPinger.this.defaultPingAddr.getInetAddress(); ! captor.setFilter("tcp and dst host " + pingAddr.getHostAddress(), true); ! InputStream is = null; ! Packet ping = null; ! while (true) { ! // TODO this is ugly -- is there a better way to obtain the MAC address? ! try { ! log.debug("Trying to open web connection"); ! is = new URL("http://www.google.com").openStream(); ! log.debug("Waiting for packet..."); ! ping = captor.getPacket(); ! is.close(); ! } catch (MalformedURLException e) { ! log.error(e.toString()); ! } catch (IOException e) { ! log.error(e.toString()); ! } ! log.debug("Got one: " + ping); ! if (ping == null) { ! log.warn("Cannot obtain MAC address of default gateway."); ! captor.close(); ! continue nextDevice; ! } else if (Arrays.equals(((EthernetPacket) ping.datalink).dst_mac, device.mac_address)) ! continue; ! gwMAC = ((EthernetPacket) ping.datalink).dst_mac; ! log.debug("gwMAC=" + POut.toString(gwMAC)); ! break; ! } ! break; } + + captor.setFilter("icmp and dst host " + thisIP.getHostAddress(), true); + sender = captor.getJpcapSenderInstance(); + sendICMP(ICMPPinger.this.defaultPingAddr); + ICMPPinger.this.run(); ! } }; + thread.start(); } ! public double ping(AddressIF remoteNode) throws UnsupportedOperationException { ! sendICMP(remoteNode); ! return 0.0; } *************** *** 62,107 **** throw new UnsupportedOperationException(); } ! ! private void sendICMP(AddressIF addr) { log.debug("Sending ICMP ping to " + addr); ! ! ICMPPacket p = new ICMPPacket(); ! p.type = ICMPPacket.ICMP_TSTAMP; ! p.seq = 1000; ! p.id = 999; ! p.orig_timestamp = 123; ! p.trans_timestamp = 456; ! p.recv_timestamp = 789; ! p.setIPv4Parameter(0, false, false, false, 0, false, false, false, 0, 1010101, 100, IPPacket.IPPROTO_ICMP, ! localAddr.getInetAddress(), addr.getInetAddress()); ! p.data="data".getBytes(); EthernetPacket ether = new EthernetPacket(); ether.frametype = EthernetPacket.ETHERTYPE_IP; ! ! // TODO fix this ! ether.src_mac = new byte[]{(byte)0,(byte)1,(byte)2,(byte)3,(byte)4,(byte)5}; ! ether.dst_mac = new byte[]{(byte)0,(byte)6,(byte)7,(byte)8,(byte)9,(byte)10}; ! p.datalink = ether; try { ! sender.sendPacket(p); } catch (Exception e) { log.warn("Failed sending packet: " + e); } } public void run() { try { while (!thread.isInterrupted()) { ! synchronized(thread) { thread.wait(); } ! // TODO do useful stuff here, i.e. wait for incoming ping and match it to the request ping ! } ! } catch (InterruptedException e) { /* ignore */ } } --- 113,174 ---- throw new UnsupportedOperationException(); } ! ! private void sendICMP(AddressIF addr) { log.debug("Sending ICMP ping to " + addr); ! ! ICMPPacket icmp = new ICMPPacket(); ! icmp.type = ICMPPacket.ICMP_ECHO; ! icmp.seq = 100; ! 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(); EthernetPacket ether = new EthernetPacket(); ether.frametype = EthernetPacket.ETHERTYPE_IP; ! ether.src_mac = device.mac_address; ! ether.dst_mac = gwMAC; ! icmp.datalink = ether; try { ! sender.sendPacket(icmp); } catch (Exception e) { log.warn("Failed sending packet: " + e); } } + + private void receiveICMP() { + ICMPPacket p = (ICMPPacket) captor.getPacket(); + log.debug("Received ICMP packet: " + p); + if (p == null) { + log.debug("Timeout"); + } else if (p.type == ICMPPacket.ICMP_TIMXCEED) { + p.src_ip.getHostName(); + log.debug("ICMP_TIMXCEED: " + p.src_ip.toString()); + } else if (p.type == ICMPPacket.ICMP_UNREACH) { + p.src_ip.getHostName(); + log.debug("ICMP_UNREACH: " + p.src_ip); + } else if (p.type == ICMPPacket.ICMP_ECHOREPLY) { + p.src_ip.getHostName(); + log.debug("ICMP_ECHOREPLY: " + p.src_ip); + } + log.debug("Finished receiveICMP"); + } public void run() { try { while (!thread.isInterrupted()) { + + receiveICMP(); ! synchronized (thread) { thread.wait(); } ! // TODO do useful stuff here, i.e. wait for incoming ping and match it to the request ping ! } ! } catch (InterruptedException e) { /* ignore */ ! } } |
|
From: Peter P. <pr...@us...> - 2006-11-22 18:46:46
|
Update of /cvsroot/pyxida/Pyxida/web In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11624/web Modified Files: index.html Log Message: Made ICMPPinger work (sort of) - the code still hangs every nth invocation - haven't tested the external NIC detection - external NIC detection is very hacky Fixed webpage to support transparency on IE Index: index.html =================================================================== RCS file: /cvsroot/pyxida/Pyxida/web/index.html,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** index.html 22 Nov 2006 11:42:37 -0000 1.4 --- index.html 22 Nov 2006 18:46:45 -0000 1.5 *************** *** 71,75 **** <td height="90" > <table><tr> ! <td align="center"><img src="img/harvard_logo-scaled.jpg" border="0"></td> </tr><tr> <td align="center"><img src="img/imperial_logo-scaled.gif" border="0"></td> --- 71,75 ---- <td height="90" > <table><tr> ! <td align="center"><img src="img/harvard_logo-scaled.gif" border="0"></td> </tr><tr> <td align="center"><img src="img/imperial_logo-scaled.gif" border="0"></td> |
|
From: Peter P. <pr...@us...> - 2006-11-22 18:46:46
|
Update of /cvsroot/pyxida/Pyxida In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11624 Modified Files: .classpath Log Message: Made ICMPPinger work (sort of) - the code still hangs every nth invocation - haven't tested the external NIC detection - external NIC detection is very hacky Fixed webpage to support transparency on IE Index: .classpath =================================================================== RCS file: /cvsroot/pyxida/Pyxida/.classpath,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** .classpath 20 Nov 2006 17:22:31 -0000 1.3 --- .classpath 22 Nov 2006 18:46:45 -0000 1.4 *************** *** 1,5 **** <?xml version="1.0" encoding="UTF-8"?> <classpath> ! <classpathentry kind="src" path="src"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="lib" path="lib/sbon-async.jar" sourcepath="/SBON"/> --- 1,5 ---- <?xml version="1.0" encoding="UTF-8"?> <classpath> ! <classpathentry excluding="edu/harvard/syrah/pyxida/ping/PingResult.java" kind="src" path="src"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="lib" path="lib/sbon-async.jar" sourcepath="/SBON"/> |
|
From: Peter P. <pr...@us...> - 2006-11-22 11:42:44
|
Update of /cvsroot/pyxida/Pyxida/web In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15977/web Modified Files: index.html Log Message: Updated web page Index: index.html =================================================================== RCS file: /cvsroot/pyxida/Pyxida/web/index.html,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** index.html 20 Nov 2006 17:22:31 -0000 1.3 --- index.html 22 Nov 2006 11:42:37 -0000 1.4 *************** *** 1,156 **** <html> <head> ! <title>Pyxida: An Open Source Network Coordinate Library and Application</title> ! </head> ! <body bgcolor="#ffffff" link="#9a3334" vlink="#3d1252" alink="#ff0000"> ! <table width=100% border=0> ! <tr> ! <td width=10% rowspan=2 bgcolor=#990033 valign=top> ! <table cellspacing=0 cellpadding=0 width=100%> ! <tr> ! <td width=3 rowspan=5> </td> ! <td> </td> ! <td width=3 rowspan=5> </td> ! </tr> ! <tr> ! <td align=center> ! <!-- you need the <center> tag or it doesn't center in netscape 4 --> ! <center> ! <br> ! <img src="http://www.eecs.harvard.edu/~syrah/images/temporary-navbar-logo.gif" border=0> ! <BR> ! <font color=#ffddee size="-1">(new logo coming)</font><br> ! <br> ! </center> ! </td> ! </tr> ! <tr> ! <td> </td> ! </tr> ! <tr> ! <td> ! <font color=#ffddee face=arial,utopia,baskerville,geneva,verdana> ! <!-- note: font color must be repeated with A HREF= blocks --> ! <table> ! <tr><td width=10> </td><td valign=top> ! <a href="#about"><font size="-1"color=#ffddee>About</font></a><BR> ! <a href="#people"><font size="-1"color=#ffddee>People</font></a><BR> ! <a href="#doc"><font size="-1"color=#ffddee>Documentation</font></a><BR> ! <a href="javadoc/index.html"><font size="-1"color=#ffddee>Java Doc</font></a><BR> ! <a href="#download"><font size="-1"color=#ffddee>Download</font></a><BR> ! <a href="http://www.eecs.harvard.edu/~syrah/nc"><font size="-1"color=#ffddee>Research</font></a><BR> ! <a href="mailto:jon...@ee..."><font ! size="-1"color=#ffddee>Contact</font></a><BR> ! Add SourgeForge Logo here<BR> ! <BR> ! <br> ! </td></tr> ! </table> ! <br> ! </font> ! </td> ! </tr> ! <tr> ! <td> </td> ! </tr> ! </table> ! </td> ! <td width=10 rowspan=2> </td> ! <td valign=top> ! <h3>Pyxida: An Open Source Network Coordinate Library and Application</h3> ! <a name="about"> ! <p> ! We have created an open source library and application that ! incorporates the ideas from our <a ! href="http://www.eecs.harvard.edu/~syrah/nc">research on network ! coordinates.</a> It is called <a ! href="http://pyxida.sourceforge.net/">Pyxida</a> (pronounced ! "peeks-ee-da" which means "compass" in Greek). ! In the short term, the Pyxida project will provide the following pieces of ! functionality: (a) estimate the latencies between hosts in a ! distributed system with stable and accurate network coordinates, (b) ! route to the host whose coordinate is nearest to a point in the ! abstract coordinate space (useful for distributed gaming ! applications), and (c) provide a stand-alone application that ! constructs a network coordinate system. ! <p> ! We are open to new developers; if you are interested, please send us an email. ! <P><table width="100%" bgcolor=#990033 valign=top><tr><td><a ! name="people"><font color="#ffddee"><b>Pyxida ! Users</b></font></td></tr></table> ! <ul> ! <li>The <a ! href="http://azureus.sourceforge.net/">Azureus BitTorrent Client</a> ! uses Pyxida for its decentralized tracker and to quickly and cheaply select ! between possible piece providers. ! <li>A slice on <a href="http://www.planet-lab.org">PlanetLab</a> uses ! Pyxida to dynamically track the coordinates of its hundreds of ! machines. ! <!-- li>Researchers at Boston University are using Pyxida for a new ! routing protocol. --> ! </ul> ! <P><table width="100%" bgcolor=#990033 valign=top><tr><td><a ! name="people"><font color="#ffddee"><b>People</b></font></td></tr></table> ! <P><B>Project Leaders</B> ! <ul> ! <li><a href="http://www.eecs.harvard.edu/~jonathan/">Jonathan Ledlie (Harvard University)</a> ! <li><a href="http://www.doc.ic.ac.uk/~prp/">Peter Pietzuch (Imperial College London)</a> ! </ul> ! <P><B>Developers</B> ! <ul> ! <li>Michael Parker (UCLA) ! </ul> ! <P><table width="100%" bgcolor=#990033 valign=top><tr><td><a ! name="doc"><font color="#ffddee"><b>Documentation</b></font></td></tr></table> ! <P> ! In the works... ! <P><table width="100%" bgcolor=#990033 valign=top><tr><td><a ! name="download"><font color="#ffddee"><b>Download</b></font></td></tr></table> ! <P><B>Library</B> ! <ul> ! <li>libpyxida-v0.1 ! </ul> ! <P><B>Application</B> ! <ul> ! <li>Pyxida-v0.1 ! </ul> ! </td> ! </tr> ! <tr> ! <td> </td> ! </tr> ! </table> </body> </html> --- 1,185 ---- <html> <head> ! <meta name="generator" content= ! "HTML Tidy for Linux/x86 (vers 1 September 2005), see www.w3.org"> ! <title>Pyxida: An Open Source Network Coordinate Library and ! Application</title> ! </head> ! <body bgcolor="#FFFFFF" link="#9A3334" vlink="#3D1252" alink= ! "#FF0000"> ! <table width="100%" border="0"> ! <tr> ! <td width="10%" rowspan="2" valign="top"> ! <table cellspacing="0" cellpadding="0" width="100%" style= ! "background-image: url('img/earth-panel-scaled.jpg');"> ! <tr> ! <td width="3" rowspan="6"> </td> ! <td> </td> ! <td width="3" rowspan="6"> </td> ! </tr> ! <tr> ! <td align="center"> ! <!-- you need the <center> tag or it doesn't center in netscape 4 --> ! <center> ! <br> ! <img src="img/pyxida4-scaled.png" border="0"><br> ! <br> ! <br> ! </center> ! </td> ! </tr> ! <tr> ! <td height="50"> </td> ! </tr> ! <tr> ! <td> ! <font color="#FFDDEE"> ! <!-- note: font color must be repeated with A HREF= blocks --></font> ! <table> ! <tr> ! <td width="10"> </td> ! <td valign="top"><a href="#about">About</a><br> ! <a href="#people">People</a><br> ! <a href="#doc">Documentation</a><br> ! <a href="javadoc/index.html">JavaDoc</a><br> ! <a href="#download">Download</a><br> ! <a href="http://www.eecs.harvard.edu/~syrah/nc">Research</a><br> ! <a href="mailto:hou...@ee...">Contact</a><br> ! <!-- we need a proper email alias here --> ! <br></td> ! </tr> ! </table><font color="#FFDDEE" face= ! "arial,utopia,baskerville,geneva,verdana"><br></font> ! </td> ! </tr> ! <tr> ! <td height="125" > </td> ! </tr> ! ! <tr> ! <td height="90" > ! <table><tr> ! <td align="center"><img src="img/harvard_logo-scaled.jpg" border="0"></td> ! </tr><tr> ! <td align="center"><img src="img/imperial_logo-scaled.gif" border="0"></td> ! </tr><tr> ! <td align="center"><img src="img/sf-logo.png" border="0"></td> ! </tr></table> ! </td> ! </tr> ! ! </table> ! </td> ! <td width="10" rowspan="2"> </td> ! <td valign="top"> ! <h3>Pyxida: An Open Source Network Coordinate Library and ! Application</h3><a name="about"></a> ! <p>We have created an open source library and application ! that incorporates the ideas from our <a href= ! "http://www.eecs.harvard.edu/~syrah/nc">research on network ! coordinates.</a> It is called <a href= ! "http://pyxida.sourceforge.net/">Pyxida</a> (pronounced ! "peeks-ee-da" which means "compass" in Greek). In the short ! term, the Pyxida project will provide the following pieces ! of functionality: (a) estimate the latencies between hosts ! in a distributed system with stable and accurate network ! coordinates, (b) route to the host whose coordinate is ! nearest to a point in the abstract coordinate space (useful ! for distributed gaming applications), and (c) provide a ! stand-alone application that constructs a network ! coordinate system.</p> + <p>We are open to new developers; if you are interested, + please send us an email.</p> ! <table width="100%" bgcolor="#9EB0FF" valign="top"> ! <tr> ! <td><a name="people"><font color="#FFFFFF"><b>Pyxida ! Users</b></font></a></td> ! </tr> ! </table> ! <ul> ! <li>The <a href="http://azureus.sourceforge.net/">Azureus ! BitTorrent Client</a> uses Pyxida for its decentralized ! tracker and to quickly and cheaply select between ! possible piece providers.</li> ! <li>A slice on <a href= ! "http://www.planet-lab.org">PlanetLab</a> uses Pyxida to ! dynamically track the coordinates of its hundreds of ! machines. ! <!-- li>Researchers at Boston University are using Pyxida for a new ! routing protocol. --></li> ! </ul> ! <table width="100%" bgcolor="#9EB0FF" valign="top"> ! <tr> ! <td><a name="people"><font color= ! "#FFFFFF"><b>People</b></font></a></td> ! </tr> ! </table> ! <p><b>Project Leaders</b></p> ! <ul> ! <li><a href= ! "http://www.eecs.harvard.edu/~jonathan/">Jonathan Ledlie ! (Harvard University)</a></li> ! <li><a href="http://www.doc.ic.ac.uk/~prp/">Peter ! Pietzuch (Imperial College London)</a></li> ! </ul> ! <p><b>Developers</b></p> ! <ul> ! <li>Michael Parker (UCLA)</li> ! </ul> ! <table width="100%" bgcolor="#9EB0FF" valign="top"> ! <tr> ! <td><a name="doc"><font color= ! "#FFFFFF"><b>Documentation</b></font></a></td> ! </tr> ! </table> ! <p>In the works...</p> ! <table width="100%" bgcolor="#9EB0FF" valign="top"> ! <tr> ! <td><a name="download"><font color="#FFFFFF"><b>Download</b></font></a></td> ! </tr> ! </table> ! <p><b>Library</b></p> ! <ul> ! <li>libpyxida-v0.1</li> ! </ul> ! <p><b>Application</b></p> ! <ul> ! <li>Pyxida-v0.1</li> ! </ul> ! </td> ! </tr> + </table> </body> </html> |
|
From: Peter P. <pr...@us...> - 2006-11-22 11:42:38
|
Update of /cvsroot/pyxida/Pyxida/web/img In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15977/web/img Added Files: earth-panel-scaled.jpg harvard_logo-scaled.jpg earth-panel.jpg pyxida4.jpg pyxida4-scaled.png sf-logo.png imperial_logo.gif imperial_logo-scaled.gif harvard_logo.jpg pyxida4-scaled.jpg Log Message: Updated web page --- NEW FILE: sf-logo.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: earth-panel-scaled.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: pyxida4-scaled.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: harvard_logo-scaled.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: earth-panel.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: imperial_logo.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: pyxida4-scaled.png --- (This appears to be a binary file; contents omitted.) --- NEW FILE: imperial_logo-scaled.gif --- (This appears to be a binary file; contents omitted.) --- NEW FILE: pyxida4.jpg --- (This appears to be a binary file; contents omitted.) --- NEW FILE: harvard_logo.jpg --- (This appears to be a binary file; contents omitted.) |
|
From: Peter P. <pr...@us...> - 2006-11-22 11:42:28
|
Update of /cvsroot/pyxida/Pyxida/web/img In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15961/web/img Log Message: Directory /cvsroot/pyxida/Pyxida/web/img added to the repository |
|
From: Peter P. <pr...@us...> - 2006-11-21 21:15:07
|
Update of /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/nc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26090/src/edu/harvard/syrah/pyxida/nc Added Files: NCManager.java Removed Files: RemoteState.java License.txt Coordinate.java NCClientIF.java WindowStatistic.java ApplicationObserver.java NCClient.java EWMAStatistic.java Vec.java ObserverList.java Log Message: Continued to carve out the class framework --- NEW FILE: NCManager.java --- package edu.harvard.syrah.pyxida.nc; import java.util.HashSet; import java.util.Set; import edu.harvard.syrah.prp.Log; import edu.harvard.syrah.pyxida.nc.lib.NCClient; import edu.harvard.syrah.pyxida.ping.PingManager; import edu.harvard.syrah.sbon.comm.AddressIF; public class NCManager { private static Log log = new Log(NCManager.class); // TODO read from config file private static final int NC_NUM_DIMS = 3; private PingManager pingManager = null; private Set<NCClient<AddressIF>> ncClients = new HashSet<NCClient<AddressIF>>(); public NCManager(PingManager pingManager) { this.pingManager = pingManager; } public void init() { // Initialise the local coord first NCClient<AddressIF> localNCClient = new NCClient<AddressIF>(NC_NUM_DIMS); } } --- RemoteState.java DELETED --- --- NCClient.java DELETED --- --- WindowStatistic.java DELETED --- --- NCClientIF.java DELETED --- --- Coordinate.java DELETED --- --- Vec.java DELETED --- --- ApplicationObserver.java DELETED --- --- EWMAStatistic.java DELETED --- --- ObserverList.java DELETED --- --- License.txt DELETED --- |
|
From: Peter P. <pr...@us...> - 2006-11-21 21:15:07
|
Update of /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/api In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26090/src/edu/harvard/syrah/pyxida/api Modified Files: APIManager.java Added Files: ExternalAPIIF.java Removed Files: APIManagerIF.java Log Message: Continued to carve out the class framework --- NEW FILE: ExternalAPIIF.java --- package edu.harvard.syrah.pyxida.api; import edu.harvard.syrah.pyxida.nc.lib.Coordinate; import edu.harvard.syrah.sbon.comm.AddressIF; public interface ExternalAPIIF { // Return a coord public Coordinate getCoord(AddressIF node); // Estimate the RTT public double estimateRTT(AddressIF nodeA, AddressIF nodeB); // Create a new proxy coord with a lease public void createProxyCoord(AddressIF remoteNode); // Renew proxy coord lease public void renewProxyCoord(AddressIF remoteNode); } --- APIManagerIF.java DELETED --- Index: APIManager.java =================================================================== RCS file: /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/api/APIManager.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** APIManager.java 20 Nov 2006 17:22:31 -0000 1.1 --- APIManager.java 21 Nov 2006 21:14:59 -0000 1.2 *************** *** 2,9 **** import edu.harvard.syrah.prp.Log; ! public class APIManager implements APIManagerIF { private static final Log log = new Log(APIManager.class); public void init() { /* empty */ } --- 2,16 ---- import edu.harvard.syrah.prp.Log; + import edu.harvard.syrah.pyxida.nc.NCManager; ! public class APIManager { private static final Log log = new Log(APIManager.class); + private NCManager ncManager; + + public APIManager(NCManager ncManager) { + this.ncManager = ncManager; + } + public void init() { /* empty */ } |
|
From: Peter P. <pr...@us...> - 2006-11-21 21:15:04
|
Update of /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/ping In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26090/src/edu/harvard/syrah/pyxida/ping Modified Files: PingManager.java Added Files: TCPSynPinger.java JPCapPinger.java UDPAppPinger.java PingerIF.java ICMPPinger.java Removed Files: PingManagerIF.java Log Message: Continued to carve out the class framework --- NEW FILE: UDPAppPinger.java --- package edu.harvard.syrah.pyxida.ping; import edu.harvard.syrah.prp.Log; import edu.harvard.syrah.sbon.comm.AddressIF; class UDPAppPinger implements PingerIF { private static final Log log = new Log(UDPAppPinger.class); public double ping(AddressIF remoteNode) throws UnsupportedOperationException { // TODO Auto-generated method stub return 0; } public double ping(AddressIF nodeA, AddressIF nodeB) throws UnsupportedOperationException { // TODO Auto-generated method stub return 0; } public void init(AddressIF defaultPingAddr) { // TODO Auto-generated method stub } public void shutdown() { // TODO Auto-generated method stub } public void run() { // TODO Auto-generated method stub } } --- PingManagerIF.java DELETED --- Index: PingManager.java =================================================================== RCS file: /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/ping/PingManager.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** PingManager.java 20 Nov 2006 17:22:31 -0000 1.1 --- PingManager.java 21 Nov 2006 21:14:59 -0000 1.2 *************** *** 1,10 **** package edu.harvard.syrah.pyxida.ping; import edu.harvard.syrah.prp.Log; ! public class PingManager implements PingManagerIF { private static final Log log = new Log(PingManager.class); ! public void init() { /* empty */ } } --- 1,44 ---- package edu.harvard.syrah.pyxida.ping; + import java.util.HashSet; + import java.util.Set; + import edu.harvard.syrah.prp.Log; + import edu.harvard.syrah.sbon.async.CBResult; + import edu.harvard.syrah.sbon.async.CallbacksIF.CB; + import edu.harvard.syrah.sbon.async.CallbacksIF.CB0; + import edu.harvard.syrah.sbon.comm.AddressFactory; + import edu.harvard.syrah.sbon.comm.AddressIF; ! public class PingManager { private static final Log log = new Log(PingManager.class); ! private static final String DEFAULT_PING_HOSTNAME = "www.google.com"; ! ! private AddressIF defaultPingAddr; ! ! private Set<PingerIF> pingerSet = new HashSet<PingerIF>(); ! ! public void init(CB0 cbDone) { ! AddressFactory.createResolved(DEFAULT_PING_HOSTNAME, new CB<AddressIF>() { ! protected void cb(CBResult result, AddressIF addr) { ! PingManager.this.defaultPingAddr = addr; ! ! // TODO This needs to be made more generic ! ! PingerIF pinger = new ICMPPinger(); ! pingerSet.add(pinger); ! pinger.init(defaultPingAddr); ! ! } ! }); ! ! ! } ! ! public void addPingReq(AddressIF nodeA, AddressIF nodeB, CB<Double> cbMeasurement) { ! // TODO implement me ! } ! } --- NEW FILE: ICMPPinger.java --- package edu.harvard.syrah.pyxida.ping; import java.io.IOException; import jpcap.JpcapCaptor; import jpcap.JpcapSender; import jpcap.NetworkInterface; import jpcap.packet.EthernetPacket; import jpcap.packet.ICMPPacket; import jpcap.packet.IPPacket; import edu.harvard.syrah.prp.Log; import edu.harvard.syrah.prp.POut; import edu.harvard.syrah.sbon.comm.AddressFactory; import edu.harvard.syrah.sbon.comm.AddressIF; class ICMPPinger extends JPCapPinger implements PingerIF { private static final Log log = new Log(ICMPPinger.class); private JpcapSender sender; private AddressIF localAddr; private AddressIF defaultPingAddr; private Thread thread; private boolean shutdown = false; public void init(AddressIF defaultPingAddr) { this.localAddr = AddressFactory.createLocalAddress(); this.defaultPingAddr = defaultPingAddr; thread = new Thread() { public void run() { NetworkInterface[] devices = JpcapCaptor.getDeviceList(); log.debug("devices=" + POut.toString(devices)); assert devices.length > 0; for (int i = 0; i < devices.length; i++) { try { sender = JpcapSender.openDevice(devices[i]); } catch (IOException e) { log.debug("Could not open interface no " + i + ". Trying next one"); continue; } sendICMP(ICMPPinger.this.defaultPingAddr); } ICMPPinger.this.run(); } }; thread.start(); } public double ping(AddressIF remoteNode) throws UnsupportedOperationException { // TODO Auto-generated method stub return 0; } public double ping(AddressIF nodeA, AddressIF nodeB) throws UnsupportedOperationException { throw new UnsupportedOperationException(); } private void sendICMP(AddressIF addr) { log.debug("Sending ICMP ping to " + addr); ICMPPacket p = new ICMPPacket(); p.type = ICMPPacket.ICMP_TSTAMP; p.seq = 1000; p.id = 999; p.orig_timestamp = 123; p.trans_timestamp = 456; p.recv_timestamp = 789; p.setIPv4Parameter(0, false, false, false, 0, false, false, false, 0, 1010101, 100, IPPacket.IPPROTO_ICMP, localAddr.getInetAddress(), addr.getInetAddress()); p.data="data".getBytes(); EthernetPacket ether = new EthernetPacket(); ether.frametype = EthernetPacket.ETHERTYPE_IP; // TODO fix this ether.src_mac = new byte[]{(byte)0,(byte)1,(byte)2,(byte)3,(byte)4,(byte)5}; ether.dst_mac = new byte[]{(byte)0,(byte)6,(byte)7,(byte)8,(byte)9,(byte)10}; p.datalink = ether; try { sender.sendPacket(p); } catch (Exception e) { log.warn("Failed sending packet: " + e); } } public void run() { try { while (!thread.isInterrupted()) { synchronized(thread) { thread.wait(); } // TODO do useful stuff here, i.e. wait for incoming ping and match it to the request ping } } catch (InterruptedException e) { /* ignore */ } } public void shutdown() { shutdown = true; thread.interrupt(); } } --- NEW FILE: JPCapPinger.java --- package edu.harvard.syrah.pyxida.ping; /** * This is the parent class of the Pingers that use the JPCap library * @author peter * */ abstract class JPCapPinger implements PingerIF { } --- NEW FILE: PingerIF.java --- package edu.harvard.syrah.pyxida.ping; import edu.harvard.syrah.sbon.comm.AddressIF; interface PingerIF extends Runnable { /** * This creates a new thread * */ public void init(AddressIF defaultPingAddr); public double ping(AddressIF remoteNode) throws UnsupportedOperationException; public double ping(AddressIF nodeA, AddressIF nodeB) throws UnsupportedOperationException; public void shutdown(); } --- NEW FILE: TCPSynPinger.java --- package edu.harvard.syrah.pyxida.ping; import edu.harvard.syrah.prp.Log; import edu.harvard.syrah.sbon.comm.AddressIF; class TCPSynPinger extends JPCapPinger implements PingerIF { private static final Log log = new Log(TCPSynPinger.class); public double ping(AddressIF remoteNode) throws UnsupportedOperationException { // TODO Auto-generated method stub return 0; } public double ping(AddressIF nodeA, AddressIF nodeB) throws UnsupportedOperationException { // TODO Auto-generated method stub return 0; } public void init(AddressIF defaultPingAddr) { // TODO Auto-generated method stub } public void shutdown() { // TODO Auto-generated method stub } public void run() { // TODO Auto-generated method stub } } |
|
From: Peter P. <pr...@us...> - 2006-11-21 21:15:02
|
Update of /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26090/src/edu/harvard/syrah/pyxida Modified Files: Pyxida.java Log Message: Continued to carve out the class framework Index: Pyxida.java =================================================================== RCS file: /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/Pyxida.java,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** Pyxida.java 20 Nov 2006 17:22:31 -0000 1.3 --- Pyxida.java 21 Nov 2006 21:15:00 -0000 1.4 *************** *** 6,16 **** import edu.harvard.syrah.prp.Log; import edu.harvard.syrah.pyxida.api.APIManager; ! import edu.harvard.syrah.pyxida.api.APIManagerIF; ! import edu.harvard.syrah.pyxida.nc.NCClient; ! import edu.harvard.syrah.pyxida.nc.NCClientIF; import edu.harvard.syrah.pyxida.ping.PingManager; ! import edu.harvard.syrah.pyxida.ping.PingManagerIF; import edu.harvard.syrah.sbon.async.EventLoop; ! import edu.harvard.syrah.sbon.comm.AddressIF; public class Pyxida { --- 6,14 ---- import edu.harvard.syrah.prp.Log; import edu.harvard.syrah.pyxida.api.APIManager; ! 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.EventLoop; ! import edu.harvard.syrah.sbon.async.CallbacksIF.CB0; public class Pyxida { *************** *** 19,25 **** private static final String PYXIDA_VERSION = "0.1"; - // TODO read from config file - private static final int NC_NUM_DIMS = 3; - private static Properties configProps = System.getProperties(); public static Properties getConfigProps() { return configProps; } --- 17,20 ---- *************** *** 28,49 **** private static Pyxida pyxida = null; ! private NCClientIF ncClient = null; ! private APIManagerIF apiManager = null; ! private PingManagerIF pingManager = null; private Pyxida() { /* empty */ } ! private void init() { ! // Initialise the network coordinate calculation ! ncClient = new NCClient<AddressIF>(NC_NUM_DIMS); ! //ncClient.init(); ! // Initialise the measurement modules pingManager = new PingManager(); ! pingManager.init(); ! ! // Initialise the external APIs ! apiManager = new APIManager(); ! apiManager.init(); } --- 23,46 ---- private static Pyxida pyxida = null; ! private NCManager ncManager = null; ! private APIManager apiManager = null; ! private PingManager pingManager = null; private Pyxida() { /* empty */ } ! private void init() { // Initialise the measurement modules pingManager = new PingManager(); ! pingManager.init(new CB0() { ! protected void cb(CBResult result) { ! // Initialise the NCs that we're responsible for ! ncManager = new NCManager(pingManager); ! ncManager.init(); ! ! // Initialise the external APIs ! apiManager = new APIManager(ncManager); ! apiManager.init(); ! } ! }); } *************** *** 53,62 **** public static void main(String[] args) { log.main("Pyxida Version " + PYXIDA_VERSION + " starting..."); ! // Turn on assertions boolean assertsEnabled = false; assert assertsEnabled = true; if (!assertsEnabled) ! log.warn("Please run the code with assertions turned on: java -ea ..."); // Turn on colour support --- 50,61 ---- public static void main(String[] args) { log.main("Pyxida Version " + PYXIDA_VERSION + " starting..."); ! ! Log.setPackageRoot(Pyxida.class); ! // Turn on assertions boolean assertsEnabled = false; assert assertsEnabled = true; if (!assertsEnabled) ! log.error("Please run the code with assertions turned on: java -ea ..."); // Turn on colour support |
|
From: Peter P. <pr...@us...> - 2006-11-21 21:15:02
|
Update of /cvsroot/pyxida/Pyxida/lib In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26090/lib Modified Files: sbon-async.jar util-prp.jar Log Message: Continued to carve out the class framework Index: sbon-async.jar =================================================================== RCS file: /cvsroot/pyxida/Pyxida/lib/sbon-async.jar,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 Binary files /tmp/cvs7MFUcP and /tmp/cvsrc1URZ differ Index: util-prp.jar =================================================================== RCS file: /cvsroot/pyxida/Pyxida/lib/util-prp.jar,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 Binary files /tmp/cvsI6yJ5S and /tmp/cvsyNo8P3 differ |
|
From: Peter P. <pr...@us...> - 2006-11-21 21:14:45
|
Update of /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/nc/lib In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26064/src/edu/harvard/syrah/pyxida/nc/lib Log Message: Directory /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/nc/lib added to the repository |
|
From: Jonathan L. <le...@us...> - 2006-11-21 18:19:00
|
Update of /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/ping In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25911/src/edu/harvard/syrah/pyxida/ping Added Files: PingResult.java Log Message: pingresult --- NEW FILE: PingResult.java --- /* * @author Last modified by $Author: ledlie $ * @version $Revision: 1.1 $ on $Date: 2006/11/21 18:18:58 $ * @since Nov 21, 2006 */ package edu.harvard.syrah.pyxida.ping; import edu.harvard.syrah.pyxida.ping.PingManager.Protocol; /** * Describes how ping went */ public class PingResult { // successCount == latencies.length public final long latencies[]; public final int attempts; public final Protocol protocol; public PingResult (Protocol proto, long lats[], int at) { protocol = proto; latencies = lats; attempts = at; } // TODO do something smarter public long getLatency () { if (latencies.length > 0) return latencies[0]; return -1; } } |
Update of /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/nc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1591/src/edu/harvard/syrah/pyxida/nc Modified Files: EWMAStatistic.java Coordinate.java Vec.java Added Files: NCClient.java NCClientIF.java Removed Files: VivaldiClient.java Log Message: Started adding the overall class framework for Pyxida Index: Coordinate.java =================================================================== RCS file: /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/nc/Coordinate.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** Coordinate.java 17 Nov 2006 14:03:41 -0000 1.1 --- Coordinate.java 20 Nov 2006 17:22:31 -0000 1.2 *************** *** 32,47 **** final protected double[] coords; ! final protected byte version; ! final protected int num_dims; - public static double MIN_COORD = 0.1; - - public byte getVersion () { - return version; - } - /** ! * Creates a copy of this <code>Coordinate</code> object, such that ! * updates in this coordinate are not reflected in the returned object. * * @return a copy of these coordinates --- 32,47 ---- final protected double[] coords; ! final protected byte version; ! final protected int num_dims; ! ! public static double MIN_COORD = 0.1; ! ! public byte getVersion() { ! return version; ! } /** ! * Creates a copy of this <code>Coordinate</code> object, such that updates ! * in this coordinate are not reflected in the returned object. * * @return a copy of these coordinates *************** *** 50,65 **** return new Coordinate(coords, true); } ! /** * Creates a new coordinate having a position at the origin. * * @param num_dimensions ! * the number of coordinate dimensions */ public Coordinate(int num_dimensions) { coords = new double[num_dimensions]; ! version = VivaldiClient.CURRENT_VERSION; ! if (VivaldiClient.USE_HEIGHT) num_dimensions--; ! num_dims = num_dimensions; } --- 50,66 ---- return new Coordinate(coords, true); } ! /** * Creates a new coordinate having a position at the origin. * * @param num_dimensions ! * the number of coordinate dimensions */ public Coordinate(int num_dimensions) { coords = new double[num_dimensions]; ! version = NCClient.CURRENT_VERSION; ! if (NCClient.USE_HEIGHT) ! num_dimensions--; ! num_dims = num_dimensions; } *************** *** 71,96 **** */ - public Coordinate(int num_dimensions, DataInputStream dis) throws IOException { - coords = new double[num_dimensions]; - version = dis.readByte(); - for (int i = 0; i < num_dimensions; i++) { - coords[i] = ((double) dis.readFloat()); - } - if (VivaldiClient.USE_HEIGHT) num_dimensions--; - num_dims = num_dimensions; - } ! public void toSerialized(DataOutputStream dos) throws IOException { ! final int num_dims = coords.length; ! dos.writeByte (version); ! for (int i = 0; i < num_dims; ++i) { ! // when writing, cast to float ! dos.writeFloat((float) coords[i]); ! } ! //if (VivaldiClient.USE_HEIGHT) dos.writeFloat((float) coords[num_dims]); ! } ! protected Coordinate(Coordinate c) { this(c.coords, true); --- 72,97 ---- */ + public Coordinate(int num_dimensions, DataInputStream dis) throws IOException { + coords = new double[num_dimensions]; + version = dis.readByte(); + for (int i = 0; i < num_dimensions; i++) { + coords[i] = ((double) dis.readFloat()); + } + if (NCClient.USE_HEIGHT) + num_dimensions--; + num_dims = num_dimensions; } ! public void toSerialized(DataOutputStream dos) throws IOException { ! final int num_dims = coords.length; ! dos.writeByte(version); ! for (int i = 0; i < num_dims; ++i) { ! // when writing, cast to float ! dos.writeFloat((float) coords[i]); ! } ! // if (VivaldiClient.USE_HEIGHT) dos.writeFloat((float) coords[num_dims]); ! } ! protected Coordinate(Coordinate c) { this(c.coords, true); *************** *** 99,131 **** /** * Creates a new coordinate having a position specified by the array ! * <code>init_coords</code>. The number of dimensions is this equal to ! * the array length. * * @param init_pos ! * the position for this coordinate * @param make_copy ! * whether a copy of the array should be made */ protected Coordinate(double[] init_pos, boolean make_copy) { ! int _num_dims = init_pos.length; ! if (make_copy) { coords = new double[_num_dims]; System.arraycopy(init_pos, 0, coords, 0, _num_dims); ! } ! else { coords = init_pos; } ! version = VivaldiClient.CURRENT_VERSION; ! if (VivaldiClient.USE_HEIGHT) _num_dims--; ! num_dims = _num_dims; } /** * Creates a new coordinate having a position specified by the array ! * <code>init_coords</code>. The number of dimensions is this equal to ! * the array length. * * @param init_pos ! * the position for this coordinate */ public Coordinate(float[] init_pos) { --- 100,132 ---- /** * Creates a new coordinate having a position specified by the array ! * <code>init_coords</code>. The number of dimensions is this equal to the ! * array length. * * @param init_pos ! * the position for this coordinate * @param make_copy ! * whether a copy of the array should be made */ protected Coordinate(double[] init_pos, boolean make_copy) { ! int _num_dims = init_pos.length; ! if (make_copy) { coords = new double[_num_dims]; System.arraycopy(init_pos, 0, coords, 0, _num_dims); ! } else { coords = init_pos; } ! version = NCClient.CURRENT_VERSION; ! if (NCClient.USE_HEIGHT) ! _num_dims--; ! num_dims = _num_dims; } /** * Creates a new coordinate having a position specified by the array ! * <code>init_coords</code>. The number of dimensions is this equal to the ! * array length. * * @param init_pos ! * the position for this coordinate */ public Coordinate(float[] init_pos) { *************** *** 135,165 **** coords[i] = init_pos[i]; } ! version = VivaldiClient.CURRENT_VERSION; ! if (VivaldiClient.USE_HEIGHT) _num_dims--; ! num_dims = _num_dims; } ! public boolean isCompatible (Coordinate _other) { ! if (version == _other.version) ! return true; ! return false; ! } ! ! public void bump () { ! for (int i = 0; i < coords.length; ++i) { ! if (Math.abs(coords[i]) < MIN_COORD) { ! double length = VivaldiClient.random.nextDouble()+MIN_COORD; ! // don't set height to be negative, if we are using it ! if ( (!VivaldiClient.USE_HEIGHT || i < coords.length-1) && ! (VivaldiClient.random.nextBoolean())) { ! length *= -1.; ! } ! coords[i] += length; ! } ! } } ! ! /** --- 136,164 ---- coords[i] = init_pos[i]; } ! version = NCClient.CURRENT_VERSION; ! if (NCClient.USE_HEIGHT) ! _num_dims--; ! num_dims = _num_dims; } ! public boolean isCompatible(Coordinate _other) { ! if (version == _other.version) ! return true; ! return false; } ! public void bump() { ! for (int i = 0; i < coords.length; ++i) { ! if (Math.abs(coords[i]) < MIN_COORD) { ! double length = NCClient.random.nextDouble() + MIN_COORD; ! // don't set height to be negative, if we are using it ! if ((!NCClient.USE_HEIGHT || i < coords.length - 1) ! && (NCClient.random.nextBoolean())) { ! length *= -1.; ! } ! coords[i] += length; ! } ! } ! } /** *************** *** 176,202 **** * * @param c ! * the coordinate to find the Euclidian distance to * @return the distance to parameter <code>c</code> */ ! public double distanceTo(Coordinate c) { ! // used for debugging so we can call distanceTo on something null ! assert ((VivaldiClient.USE_HEIGHT && num_dims == coords.length-1) || ! (!VivaldiClient.USE_HEIGHT && num_dims == coords.length)); ! if (c == null) { ! assert (!VivaldiClient.SIMULATION); ! return -1.; ! } ! double sum = 0.0; ! for (int i = 0; i < num_dims; ++i) { ! final double abs_dist = coords[i] - c.coords[i]; ! sum += (abs_dist * abs_dist); ! } ! sum = Math.sqrt(sum); ! if (VivaldiClient.USE_HEIGHT) { ! sum = sum + coords[coords.length-1] + c.coords[coords.length-1]; ! } ! return sum; ! } // Same regardless of using height --- 175,200 ---- * * @param c ! * the coordinate to find the Euclidian distance to * @return the distance to parameter <code>c</code> */ ! public double distanceTo(Coordinate c) { ! // used for debugging so we can call distanceTo on something null ! assert ((NCClient.USE_HEIGHT && num_dims == coords.length - 1) || (!NCClient.USE_HEIGHT && num_dims == coords.length)); ! if (c == null) { ! assert (!NCClient.SIMULATION); ! return -1.; ! } ! double sum = 0.0; ! for (int i = 0; i < num_dims; ++i) { ! final double abs_dist = coords[i] - c.coords[i]; ! sum += (abs_dist * abs_dist); ! } ! sum = Math.sqrt(sum); ! if (NCClient.USE_HEIGHT) { ! sum = sum + coords[coords.length - 1] + c.coords[coords.length - 1]; ! } ! return sum; ! } // Same regardless of using height *************** *** 211,251 **** * protected method, do not expose to client */ ! protected Vec getDirection(Coordinate c) { ! double length = distanceTo(c); ! if (length == 0) return null; ! final Vec new_vec = new Vec(coords.length); ! for (int i = 0; i < num_dims; ++i) { ! new_vec.direction[i] = (c.coords[i] - coords[i])/length; ! } ! if (VivaldiClient.USE_HEIGHT) { ! new_vec.direction[coords.length-1] = ! (c.coords[coords.length-1] + coords[coords.length-1])/length; ! } ! return new_vec; ! } - protected boolean assign (Coordinate c) { - if (coords.length != c.coords.length) return false; - for (int i = 0; i < coords.length; ++i) { - coords[i] = c.coords[i]; - } - return true; - } - - public void checkHeight () { - if (!VivaldiClient.USE_HEIGHT) return; - if (coords[coords.length-1] <= MIN_COORD) { - coords[coords.length-1] = VivaldiClient.random.nextDouble()+MIN_COORD; - } - } - - public boolean atOrigin () { - for (int i = 0; i < coords.length; i++) { - if (coords[i] != 0) - return false; - } - return true; - } - public Vec asVectorFromZero(boolean make_copy) { return new Vec(coords, make_copy); --- 209,252 ---- * protected method, do not expose to client */ ! protected Vec getDirection(Coordinate c) { ! double length = distanceTo(c); ! if (length == 0) ! return null; ! final Vec new_vec = new Vec(coords.length); ! for (int i = 0; i < num_dims; ++i) { ! new_vec.direction[i] = (c.coords[i] - coords[i]) / length; ! } ! if (NCClient.USE_HEIGHT) { ! new_vec.direction[coords.length - 1] = (c.coords[coords.length - 1] + coords[coords.length - 1]) ! / length; ! } ! return new_vec; ! } ! ! protected boolean assign(Coordinate c) { ! if (coords.length != c.coords.length) ! return false; ! for (int i = 0; i < coords.length; ++i) { ! coords[i] = c.coords[i]; ! } ! return true; ! } ! ! public void checkHeight() { ! if (!NCClient.USE_HEIGHT) ! return; ! if (coords[coords.length - 1] <= MIN_COORD) { ! coords[coords.length - 1] = NCClient.random.nextDouble() + MIN_COORD; ! } ! } ! ! public boolean atOrigin() { ! for (int i = 0; i < coords.length; i++) { ! if (coords[i] != 0) ! return false; ! } ! return true; ! } public Vec asVectorFromZero(boolean make_copy) { return new Vec(coords, make_copy); *************** *** 253,266 **** public boolean isValid() { ! final double NEG_MAX_DIST_FROM_ORIGIN = -1 * VivaldiClient.MAX_DIST_FROM_ORIGIN; for (int i = 0; i < coords.length; ++i) { if (Double.isNaN(coords[i])) { ! if (VivaldiClient.SIMULATION) System.err.println("coord isNaN i="+i); return false; } ! if (coords[i] > VivaldiClient.MAX_DIST_FROM_ORIGIN || ! coords[i] < NEG_MAX_DIST_FROM_ORIGIN) { ! if (VivaldiClient.SIMULATION) System.err.println("coord too far from origin i="+i+" coord="+coords[i]); ! return false; } } --- 254,270 ---- public boolean isValid() { ! final double NEG_MAX_DIST_FROM_ORIGIN = -1 * NCClient.MAX_DIST_FROM_ORIGIN; for (int i = 0; i < coords.length; ++i) { if (Double.isNaN(coords[i])) { ! if (NCClient.SIMULATION) ! System.err.println("coord isNaN i=" + i); return false; } ! if (coords[i] > NCClient.MAX_DIST_FROM_ORIGIN ! || coords[i] < NEG_MAX_DIST_FROM_ORIGIN) { ! if (NCClient.SIMULATION) ! System.err.println("coord too far from origin i=" + i + " coord=" ! + coords[i]); ! return false; } } *************** *** 303,314 **** final int num_dims = coords.length; for (int i = 0; true;) { ! if (i == num_dims-1 && VivaldiClient.USE_HEIGHT) { ! sbuf.append('h'); ! } ! sbuf.append(VivaldiClient.nf.format(coords[i])); ! if (++i < num_dims) { ! sbuf.append(","); } ! else { break; } --- 307,317 ---- final int num_dims = coords.length; for (int i = 0; true;) { ! if (i == num_dims - 1 && NCClient.USE_HEIGHT) { ! sbuf.append('h'); } ! sbuf.append(NCClient.nf.format(coords[i])); ! if (++i < num_dims) { ! sbuf.append(","); ! } else { break; } *************** *** 322,329 **** for (int i = 0; i < coords.length; i++) { ! if (i == coords.length - 1 && VivaldiClient.USE_HEIGHT) ! sbuf.append('h'); ! sbuf.append(VivaldiClient.nf.format(coords[i])); ! if (i != coords.length - 1) sbuf.append(" "); } --- 325,332 ---- for (int i = 0; i < coords.length; i++) { ! if (i == coords.length - 1 && NCClient.USE_HEIGHT) ! sbuf.append('h'); ! sbuf.append(NCClient.nf.format(coords[i])); ! if (i != coords.length - 1) sbuf.append(" "); } --- NEW FILE: NCClientIF.java --- package edu.harvard.syrah.pyxida.nc; public interface NCClientIF { } --- NEW FILE: NCClient.java --- package edu.harvard.syrah.pyxida.nc; /* * NCLib - a network coordinate library * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation; either version 2 of the License. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details ( * see the LICENSE file ). * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., 59 Temple * Place, Suite 330, Boston, MA 02111-1307 USA */ [...1078 lines suppressed...] */ } synchronized public void shutDown(DataOutputStream os) throws IOException { // could also save a number of neighbors // but then when we come back into the system, // it would be tricky to know how to treat them (they'd be old // so they would get much weight either). // System.err.println("Attempting to save coords during shut down"); // sys_coord.toSerialized(os); // save confidence? // save app_coord also? } } Index: Vec.java =================================================================== RCS file: /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/nc/Vec.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** Vec.java 17 Nov 2006 14:03:41 -0000 1.1 --- Vec.java 20 Nov 2006 17:22:31 -0000 1.2 *************** *** 67,73 **** final Vec v = new Vec(num_dims); for (int i = 0; i < num_dims; ++i) { ! double length = VivaldiClient.random.nextDouble() * axisLength; ! if ( (!VivaldiClient.USE_HEIGHT || i < num_dims-1) && ! (VivaldiClient.random.nextBoolean())) { length *= -1.; } --- 67,73 ---- final Vec v = new Vec(num_dims); for (int i = 0; i < num_dims; ++i) { ! double length = NCClient.random.nextDouble() * axisLength; ! if ( (!NCClient.USE_HEIGHT || i < num_dims-1) && ! (NCClient.random.nextBoolean())) { length *= -1.; } *************** *** 80,84 **** public Vec(int _num_dims) { direction = new double[_num_dims]; ! if (VivaldiClient.USE_HEIGHT) _num_dims--; num_dims = _num_dims; } --- 80,84 ---- public Vec(int _num_dims) { direction = new double[_num_dims]; ! if (NCClient.USE_HEIGHT) _num_dims--; num_dims = _num_dims; } *************** *** 98,102 **** } int _num_dims = init_dir.length; ! if (VivaldiClient.USE_HEIGHT) _num_dims--; num_dims = _num_dims; } --- 98,102 ---- } int _num_dims = init_dir.length; ! if (NCClient.USE_HEIGHT) _num_dims--; num_dims = _num_dims; } *************** *** 143,147 **** public double getLength() { double sum = getPlanarLength(); ! if (VivaldiClient.USE_HEIGHT) sum += direction[direction.length-1]; return sum; --- 143,147 ---- public double getLength() { double sum = getPlanarLength(); ! if (NCClient.USE_HEIGHT) sum += direction[direction.length-1]; return sum; *************** *** 195,202 **** final int num_dims = direction.length; for (int i = 0; true; ) { ! if (i == num_dims-1 && VivaldiClient.USE_HEIGHT) { sbuf.append('h'); } ! sbuf.append(VivaldiClient.nf.format(direction[i])); if (++i < num_dims) { sbuf.append(","); --- 195,202 ---- final int num_dims = direction.length; for (int i = 0; true; ) { ! if (i == num_dims-1 && NCClient.USE_HEIGHT) { sbuf.append('h'); } ! sbuf.append(NCClient.nf.format(direction[i])); if (++i < num_dims) { sbuf.append(","); Index: EWMAStatistic.java =================================================================== RCS file: /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/nc/EWMAStatistic.java,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** EWMAStatistic.java 17 Nov 2006 14:03:41 -0000 1.1 --- EWMAStatistic.java 20 Nov 2006 17:22:31 -0000 1.2 *************** *** 7,49 **** /* ! * NCLib - a network coordinate library ! * ! * This program is free software; you can redistribute it and/or modify ! * it under the terms of the GNU General Public License as published by ! * the Free Software Foundation; either version 2 of the License. ! * ! * This program is distributed in the hope that it will be useful, ! * but WITHOUT ANY WARRANTY; without even the implied warranty of ! * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! * GNU General Public License for more details ( see the LICENSE file ). ! * ! * You should have received a copy of the GNU General Public License ! * along with this program; if not, write to the Free Software ! * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ public class EWMAStatistic { ! public static final double GAIN = 0.01; ! protected final double gain; ! protected double value; ! ! public EWMAStatistic (double g) { ! gain = g; ! value = 0; ! } ! public EWMAStatistic () { ! gain = GAIN; ! value = 0; ! } ! ! synchronized public void add (double item) { ! value = (GAIN*item)+((1.-GAIN)*value); ! } ! ! synchronized public double get () { ! return value; ! } ! } --- 7,48 ---- /* ! * NCLib - a network coordinate library ! * ! * This program is free software; you can redistribute it and/or modify it under ! * the terms of the GNU General Public License as published by the Free Software ! * Foundation; either version 2 of the License. ! * ! * This program is distributed in the hope that it will be useful, but WITHOUT ! * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS ! * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details ( ! * see the LICENSE file ). ! * ! * You should have received a copy of the GNU General Public License along with ! * this program; if not, write to the Free Software Foundation, Inc., 59 Temple ! * Place, Suite 330, Boston, MA 02111-1307 USA */ public class EWMAStatistic { ! public static final double GAIN = 0.01; ! protected final double gain; ! protected double value; ! public EWMAStatistic(double g) { ! gain = g; ! value = 0; ! } ! ! public EWMAStatistic() { ! gain = GAIN; ! value = 0; ! } ! ! synchronized public void add(double item) { ! value = (GAIN * item) + ((1. - GAIN) * value); ! } ! ! synchronized public double get() { ! return value; ! } } --- VivaldiClient.java DELETED --- |
|
From: Peter P. <pr...@us...> - 2006-11-20 17:38:00
|
Update of /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1591/src/edu/harvard/syrah/pyxida Modified Files: Pyxida.java Log Message: Started adding the overall class framework for Pyxida Index: Pyxida.java =================================================================== RCS file: /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/Pyxida.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** Pyxida.java 20 Nov 2006 13:33:24 -0000 1.2 --- Pyxida.java 20 Nov 2006 17:22:31 -0000 1.3 *************** *** 5,8 **** --- 5,16 ---- import edu.harvard.syrah.prp.ANSI; import edu.harvard.syrah.prp.Log; + import edu.harvard.syrah.pyxida.api.APIManager; + import edu.harvard.syrah.pyxida.api.APIManagerIF; + import edu.harvard.syrah.pyxida.nc.NCClient; + import edu.harvard.syrah.pyxida.nc.NCClientIF; + import edu.harvard.syrah.pyxida.ping.PingManager; + import edu.harvard.syrah.pyxida.ping.PingManagerIF; + import edu.harvard.syrah.sbon.async.EventLoop; + import edu.harvard.syrah.sbon.comm.AddressIF; public class Pyxida { *************** *** 10,18 **** --- 18,51 ---- private static final String PYXIDA_VERSION = "0.1"; + + // TODO read from config file + private static final int NC_NUM_DIMS = 3; private static Properties configProps = System.getProperties(); public static Properties getConfigProps() { return configProps; } public static void setConfigProps(Properties props) { configProps = props; } + + private static Pyxida pyxida = null; + private NCClientIF ncClient = null; + private APIManagerIF apiManager = null; + private PingManagerIF pingManager = null; + + private Pyxida() { /* empty */ } + + private void init() { + // Initialise the network coordinate calculation + ncClient = new NCClient<AddressIF>(NC_NUM_DIMS); + //ncClient.init(); + + // Initialise the measurement modules + pingManager = new PingManager(); + pingManager.init(); + + // Initialise the external APIs + apiManager = new APIManager(); + apiManager.init(); + } + /** * @param args *************** *** 30,33 **** --- 63,85 ---- ANSI.use(Boolean.valueOf(getConfigProps().getProperty("sbon.console.ansi", "true"))); + /* + * Create the event loop + */ + EventLoop.set(new EventLoop( + Long.valueOf(getConfigProps().getProperty("sbon.eventloop.statedump", "30000")), + Boolean.valueOf(getConfigProps().getProperty("sbon.eventloop.showidle", "false"))) + ); + + pyxida = new Pyxida(); + pyxida.init(); + + try { + EventLoop.get().main(); + } catch (OutOfMemoryError e) { + EventLoop.get().dumpState(true); + e.printStackTrace(); + log.error("Error: Out of memory: " + e); + } + log.main("Shutdown"); System.exit(0); |
|
From: Peter P. <pr...@us...> - 2006-11-20 17:37:57
|
Update of /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/ping In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1560/src/edu/harvard/syrah/pyxida/ping Log Message: Directory /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/ping added to the repository |
|
From: Peter P. <pr...@us...> - 2006-11-20 17:37:57
|
Update of /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/api In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1560/src/edu/harvard/syrah/pyxida/api Log Message: Directory /cvsroot/pyxida/Pyxida/src/edu/harvard/syrah/pyxida/api added to the repository |