2004-12-16 jrandom
* Catch another oddball case for a reset connection in the streaming lib. * Add a dumpprofile.jsp page, called with ?peer=base64OfPeerHash, which dumps the current state of that peer's profile. Instead of the full base64, you can pass in however many characters you have and it will return the first match found.
This commit is contained in:
@ -1,22 +1,37 @@
|
|||||||
package net.i2p.router.web;
|
package net.i2p.router.web;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.Writer;
|
||||||
|
|
||||||
|
import net.i2p.data.Hash;
|
||||||
|
import net.i2p.router.RouterContext;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* uuuugly. dump the peer profile data if given a peer.
|
* uuuugly. dump the peer profile data if given a peer.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class StatHelper {
|
public class StatHelper {
|
||||||
private String _peer;
|
private String _peer;
|
||||||
|
private Writer _writer;
|
||||||
|
|
||||||
public void setPeer(String peer) { _peer = peer; }
|
public void setPeer(String peer) { _peer = peer; }
|
||||||
|
public void setWriter(Writer writer) { _writer = writer; }
|
||||||
|
|
||||||
public String getProfile() {
|
public String getProfile() {
|
||||||
net.i2p.router.RouterContext ctx = (net.i2p.router.RouterContext)net.i2p.router.RouterContext.listContexts().get(0);
|
RouterContext ctx = (RouterContext)net.i2p.router.RouterContext.listContexts().get(0);
|
||||||
java.util.Set peers = ctx.profileOrganizer().selectAllPeers();
|
Set peers = ctx.profileOrganizer().selectAllPeers();
|
||||||
for (java.util.Iterator iter = peers.iterator(); iter.hasNext(); ) {
|
for (Iterator iter = peers.iterator(); iter.hasNext(); ) {
|
||||||
net.i2p.data.Hash peer = (net.i2p.data.Hash)iter.next();
|
Hash peer = (Hash)iter.next();
|
||||||
if (_peer.indexOf(peer.toBase64().substring(0,10)) >= 0) {
|
if (peer.toBase64().startsWith(_peer)) {
|
||||||
try {
|
try {
|
||||||
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream(64*1024);
|
WriterOutputStream wos = new WriterOutputStream(_writer);
|
||||||
ctx.profileOrganizer().exportProfile(peer, baos);
|
ctx.profileOrganizer().exportProfile(peer, wos);
|
||||||
return new String(baos.toByteArray());
|
wos.flush();
|
||||||
|
_writer.flush();
|
||||||
|
return "";
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,17 @@
|
|||||||
|
package net.i2p.router.web;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.io.Writer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Treat a writer as an output stream. Quick 'n dirty, none
|
||||||
|
* of that "intarnasheeonaleyzayshun" stuff. So we can treat
|
||||||
|
* the jsp's PrintWriter as an OutputStream
|
||||||
|
*/
|
||||||
|
public class WriterOutputStream extends OutputStream {
|
||||||
|
private Writer _writer;
|
||||||
|
|
||||||
|
public WriterOutputStream(Writer writer) { _writer = writer; }
|
||||||
|
public void write(int b) throws IOException { _writer.write(b); }
|
||||||
|
}
|
@ -1,4 +1,5 @@
|
|||||||
<%@page contentType="text/plain" %>
|
<%@page contentType="text/plain"
|
||||||
<jsp:useBean id="helper" class="net.i2p.router.web.StatHelper" />
|
%><jsp:useBean id="helper" class="net.i2p.router.web.StatHelper"
|
||||||
<jsp:setProperty name="helper" property="peer" value="<%=request.getParameter("peer")%>" />
|
/><jsp:setProperty name="helper" property="peer" value="<%=request.getParameter("peer")%>"
|
||||||
<jsp:getProperty name="helper" property="profile" />
|
/><jsp:setProperty name="helper" property="writer" value="<%=out%>"
|
||||||
|
/><jsp:getProperty name="helper" property="profile" />
|
@ -32,6 +32,7 @@ public class Connection {
|
|||||||
private long _lastSendTime;
|
private long _lastSendTime;
|
||||||
private long _lastSendId;
|
private long _lastSendId;
|
||||||
private boolean _resetReceived;
|
private boolean _resetReceived;
|
||||||
|
private boolean _resetSent;
|
||||||
private boolean _connected;
|
private boolean _connected;
|
||||||
private boolean _hardDisconnected;
|
private boolean _hardDisconnected;
|
||||||
private MessageInputStream _inputStream;
|
private MessageInputStream _inputStream;
|
||||||
@ -178,6 +179,7 @@ public class Connection {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
void sendReset() {
|
void sendReset() {
|
||||||
|
_resetSent = true;
|
||||||
if ( (_remotePeer == null) || (_sendStreamId == null) ) return;
|
if ( (_remotePeer == null) || (_sendStreamId == null) ) return;
|
||||||
PacketLocal reply = new PacketLocal(_context, _remotePeer);
|
PacketLocal reply = new PacketLocal(_context, _remotePeer);
|
||||||
reply.setFlag(Packet.FLAG_RESET);
|
reply.setFlag(Packet.FLAG_RESET);
|
||||||
@ -380,6 +382,7 @@ public class Connection {
|
|||||||
|
|
||||||
public boolean getIsConnected() { return _connected; }
|
public boolean getIsConnected() { return _connected; }
|
||||||
public boolean getHardDisconnected() { return _hardDisconnected; }
|
public boolean getHardDisconnected() { return _hardDisconnected; }
|
||||||
|
public boolean getResetSent() { return _resetSent; }
|
||||||
|
|
||||||
void disconnect(boolean cleanDisconnect) {
|
void disconnect(boolean cleanDisconnect) {
|
||||||
disconnect(cleanDisconnect, true);
|
disconnect(cleanDisconnect, true);
|
||||||
|
@ -34,7 +34,7 @@ class SchedulerHardDisconnected extends SchedulerImpl {
|
|||||||
public boolean accept(Connection con) {
|
public boolean accept(Connection con) {
|
||||||
if (con == null) return false;
|
if (con == null) return false;
|
||||||
long timeSinceClose = _context.clock().now() - con.getCloseSentOn();
|
long timeSinceClose = _context.clock().now() - con.getCloseSentOn();
|
||||||
boolean ok = (con.getHardDisconnected()) &&
|
boolean ok = (con.getHardDisconnected() || con.getResetSent()) &&
|
||||||
(timeSinceClose < Connection.DISCONNECT_TIMEOUT);
|
(timeSinceClose < Connection.DISCONNECT_TIMEOUT);
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,11 @@
|
|||||||
$Id: history.txt,v 1.108 2004/12/15 21:45:56 jrandom Exp $
|
$Id: history.txt,v 1.109 2004/12/16 00:42:04 jrandom Exp $
|
||||||
|
|
||||||
|
2004-12-16 jrandom
|
||||||
|
* Catch another oddball case for a reset connection in the streaming lib.
|
||||||
|
* Add a dumpprofile.jsp page, called with ?peer=base64OfPeerHash, which
|
||||||
|
dumps the current state of that peer's profile. Instead of the full
|
||||||
|
base64, you can pass in however many characters you have and it will
|
||||||
|
return the first match found.
|
||||||
|
|
||||||
2004-12-16 jrandom
|
2004-12-16 jrandom
|
||||||
* Remove the randomized factor in the tunnel rejection by bandwidth -
|
* Remove the randomized factor in the tunnel rejection by bandwidth -
|
||||||
|
@ -15,9 +15,9 @@ import net.i2p.CoreVersion;
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class RouterVersion {
|
public class RouterVersion {
|
||||||
public final static String ID = "$Revision: 1.113 $ $Date: 2004/12/15 21:45:55 $";
|
public final static String ID = "$Revision: 1.114 $ $Date: 2004/12/16 00:42:04 $";
|
||||||
public final static String VERSION = "0.4.2.3";
|
public final static String VERSION = "0.4.2.3";
|
||||||
public final static long BUILD = 7;
|
public final static long BUILD = 8;
|
||||||
public static void main(String args[]) {
|
public static void main(String args[]) {
|
||||||
System.out.println("I2P Router version: " + VERSION);
|
System.out.println("I2P Router version: " + VERSION);
|
||||||
System.out.println("Router ID: " + RouterVersion.ID);
|
System.out.println("Router ID: " + RouterVersion.ID);
|
||||||
|
@ -70,9 +70,9 @@ class ProfilePersistenceHelper {
|
|||||||
groups = "not failing";
|
groups = "not failing";
|
||||||
} else {
|
} else {
|
||||||
if (_context.profileOrganizer().isFast(profile.getPeer()))
|
if (_context.profileOrganizer().isFast(profile.getPeer()))
|
||||||
groups = "fast and reliable";
|
groups = "fast and high capacity";
|
||||||
else
|
else
|
||||||
groups = "reliable";
|
groups = "high capacity";
|
||||||
|
|
||||||
if (_context.profileOrganizer().isWellIntegrated(profile.getPeer()))
|
if (_context.profileOrganizer().isWellIntegrated(profile.getPeer()))
|
||||||
groups = groups + ", well integrated";
|
groups = groups + ", well integrated";
|
||||||
@ -85,6 +85,7 @@ class ProfilePersistenceHelper {
|
|||||||
buf.append("# as calculated by ").append(_us.toBase64()).append(NL);
|
buf.append("# as calculated by ").append(_us.toBase64()).append(NL);
|
||||||
buf.append("#").append(NL);
|
buf.append("#").append(NL);
|
||||||
buf.append("# reliability: ").append(profile.getReliabilityValue()).append(NL);
|
buf.append("# reliability: ").append(profile.getReliabilityValue()).append(NL);
|
||||||
|
buf.append("# capacity: ").append(profile.getCapacityValue()).append(NL);
|
||||||
buf.append("# integration: ").append(profile.getIntegrationValue()).append(NL);
|
buf.append("# integration: ").append(profile.getIntegrationValue()).append(NL);
|
||||||
buf.append("# speedValue: ").append(profile.getSpeedValue()).append(NL);
|
buf.append("# speedValue: ").append(profile.getSpeedValue()).append(NL);
|
||||||
buf.append("#").append(NL);
|
buf.append("#").append(NL);
|
||||||
|
Reference in New Issue
Block a user