Update of /cvsroot/freenet/freenet/src/freenet In directory sc8-pr-cvs1:/tmp/cvs-serv1809/src/freenet
Modified Files: Version.java Core.java PeerHandler.java ConnectionHandler.java PeerPacketMessage.java OpenConnectionManager.java Log Message: 6506: Fix the NPE by keeping a default Presentation for stats purposes, don't log FCP Messages in PH stats Index: Version.java =================================================================== RCS file: /cvsroot/freenet/freenet/src/freenet/Version.java,v retrieving revision 1.502 retrieving revision 1.503 diff -u -w -r1.502 -r1.503 --- Version.java 4 Nov 2003 16:07:26 -0000 1.502 +++ Version.java 4 Nov 2003 16:53:23 -0000 1.503 @@ -20,7 +20,7 @@ public static String protocolVersion = "1.47"; /** The build number of the current revision */ - public static final int buildNumber = 6305; + public static final int buildNumber = 6306; public static final int ignoreBuildsAfter = 6500; Index: Core.java =================================================================== RCS file: /cvsroot/freenet/freenet/src/freenet/Core.java,v retrieving revision 1.51 retrieving revision 1.52 diff -u -w -r1.51 -r1.52 --- Core.java 30 Oct 2003 01:34:01 -0000 1.51 +++ Core.java 4 Nov 2003 16:53:23 -0000 1.52 @@ -404,6 +404,9 @@ //private Thread[] interfaceThreads; Thread interfaceLoopThread; + /** Default FNP Presentation for purposes of stats */ + static public Presentation defaultPresentation; + private Object waitForBegin = new Object(); /** @@ -416,13 +419,14 @@ */ public Core(Authentity privateKey, Identity identity, TransportHandler th, SessionHandler sh, - PresentationHandler ph) { + PresentationHandler ph, Presentation defaultPresentation) { this.privateKey = privateKey; this.identity = identity; this.transports = th; this.sessions = sh; this.presentations = ph; + this.defaultPresentation = defaultPresentation; logger.log(this, this.toString() + " (build "+Version.buildNumber+")", Logger.MINOR); @@ -613,7 +617,7 @@ public final TrailerWriter sendMessage(Message m, Peer p, long timeout) throws CommunicationException { return connections.sendMessage(m, p.getIdentity(), null, timeout, - PeerHandler.NORMAL); + PeerHandler.NORMAL, defaultPresentation); } // Digest for signatures Index: PeerHandler.java =================================================================== RCS file: /cvsroot/freenet/freenet/src/freenet/PeerHandler.java,v retrieving revision 1.42 retrieving revision 1.43 diff -u -w -r1.42 -r1.43 --- PeerHandler.java 4 Nov 2003 15:55:02 -0000 1.42 +++ PeerHandler.java 4 Nov 2003 16:53:23 -0000 1.43 @@ -27,6 +27,7 @@ final LinkedList messagesWithTrailers; public static class MessageAccounter { + private Presentation defaultPresentation; private Hashtable messagesSentByTypeAndStatus = new Hashtable(); //Maps from String containing message name and status to number of that messagetype sent (class myInt) private Hashtable messagesReceivedByTypeAndStatus = new Hashtable(); //Maps from String containing message name and status to number of that messagetype received (class myInt) private long messagesSent = 0; //Can be figured out from the hash table above but kept here as a cache for fast access @@ -44,6 +45,8 @@ private static class myInt{ int intValue= 0;} //Stupid support class for mapping to an int protected void registerMessageSent(PeerPacketMessage m, boolean success) { + if(m.ph.id == null) return; // Presentation would be incompatible with Message + m.resolve(defaultPresentation, true); registerMessageSent(m.msg,m.getLength(),success); } @@ -558,9 +561,11 @@ * don't know yet, but we can reply over currently open conns. * @param n the Node. * @param maxPacketSize the maximum length allowable for sending packets. + * @param defaultPresentationForStats the default Presentation - purely + * for purposes of stats. */ public PeerHandler(Identity id, NodeReference ref, Node n, - int maxPacketSize) { + int maxPacketSize, Presentation defaultPresentationForStats) { this.id = id; this.ref = ref; this.node = n; @@ -570,6 +575,8 @@ connectionHandlers = new LinkedList(); logDEBUG = Core.logger.shouldLog(Logger.DEBUG,this); inRT = (id == null || !(node.rt.references(id))); + messageAccounter.defaultPresentation = + defaultPresentationForStats; } public long timeSinceLastMessageSent() { Index: ConnectionHandler.java =================================================================== RCS file: /cvsroot/freenet/freenet/src/freenet/ConnectionHandler.java,v retrieving revision 1.204 retrieving revision 1.205 diff -u -w -r1.204 -r1.205 --- ConnectionHandler.java 31 Oct 2003 19:21:23 -0000 1.204 +++ ConnectionHandler.java 4 Nov 2003 16:53:23 -0000 1.205 @@ -62,7 +62,7 @@ private final OpenConnectionManager ocm; private Link link; - private final Presentation p; + final Presentation p; private final Ticker t; private int meanMessageSize; @@ -350,7 +350,7 @@ private PeerHandler registerPeerHandler() { if(identity != null) { - return Main.node.connections.makePeerHandler(identity, null); + return Main.node.connections.makePeerHandler(identity, null, p); } else { if(!(link instanceof PlainLink)) { Core.logger.log(this, "Link: "+link+ @@ -360,7 +360,7 @@ } else { // Even when there is only one conn, a PeerHandler must be created because it is the message queue object return new PeerHandler(null, null, Main.node, - Main.node.getMaxPacketLength()); + Main.node.getMaxPacketLength(), p); // Not registered anywhere - it will be GC'd when it is finished with } } @@ -450,7 +450,7 @@ logDEBUG("Waiting for PeerHandler to finish removing: "+ peerHandler+": "+e); peerHandler.waitForRemovedFromOCM(); - peerHandler = ocm.makePeerHandler(identity, null); + peerHandler = ocm.makePeerHandler(identity, null, p); } } } Index: PeerPacketMessage.java =================================================================== RCS file: /cvsroot/freenet/freenet/src/freenet/PeerPacketMessage.java,v retrieving revision 1.19 retrieving revision 1.20 diff -u -w -r1.19 -r1.20 --- PeerPacketMessage.java 27 Oct 2003 15:20:03 -0000 1.19 +++ PeerPacketMessage.java 4 Nov 2003 16:53:23 -0000 1.20 @@ -51,20 +51,27 @@ throw new NullPointerException(); } + public void resolve(Presentation p) { + resolve(p, false); + } + /** Set the message up to send on a connection using a specific * Presentation. Also resets message finished. Can be called * multiple times. * @param p the presentation to use to transform the message into * a RawMessage and thence to a byte array. Can be null to clear the * cached message. + * @param onlyIfNeeded if true, don't use the new Presentation if there + * is an old one. */ - public void resolve(Presentation p) { + public void resolve(Presentation p, boolean onlyIfNeeded) { if (Core.logger.shouldLog(Logger.DEBUG, this)) { Core.logger.log(this, "resolve(" + p + ") for " + this, Logger.DEBUG); } finished = false; if (this.p == p) return; + if(onlyIfNeeded && this.p != null) return; this.p = p; if (p == null) { this.p = null; Index: OpenConnectionManager.java =================================================================== RCS file: /cvsroot/freenet/freenet/src/freenet/OpenConnectionManager.java,v retrieving revision 1.161 retrieving revision 1.162 diff -u -w -r1.161 -r1.162 --- OpenConnectionManager.java 4 Nov 2003 15:16:44 -0000 1.161 +++ OpenConnectionManager.java 4 Nov 2003 16:53:23 -0000 1.162 @@ -134,15 +134,17 @@ /** * Add or update a peerhandler, called by Node.reference. + * @param p the default Presentation for stats purposes */ - public PeerHandler addPeer(Identity id, NodeReference nr) { + public PeerHandler addPeer(Identity id, NodeReference nr, + Presentation p) { synchronized(peerHandlers) { PeerHandler ph = (PeerHandler)(peerHandlers.get(id)); if(ph != null) { ph.updateReference(nr); } else { ph = new PeerHandler(id, nr, Main.node, - Main.node.getMaxPacketLength()); + Main.node.getMaxPacketLength(), p); peerHandlers.put(id, ph); } return ph; @@ -211,7 +213,8 @@ if(ref == null) ref = Main.node.rt.getNodeReference(i); ph = new PeerHandler(i, ref, Main.node, - Main.node.getMaxPacketLength()); + Main.node.getMaxPacketLength(), + ch.p); peerHandlers.put(i, ph); } } @@ -222,7 +225,7 @@ } catch (RemovingPeerHandlerException e) { Core.logger.log(this, "Caught "+e+" setting ph for "+ch, Logger.MINOR); - ph = makePeerHandler(i, ch.targetReference()); + ph = makePeerHandler(i, ch.targetReference(), ch.p); continue; } break; @@ -263,7 +266,8 @@ ph.updateReference(ref); } - public PeerHandler makePeerHandler(Identity i, NodeReference ref) { + public PeerHandler makePeerHandler(Identity i, NodeReference ref, + Presentation p) { synchronized(peerHandlers) { PeerHandler ph = (PeerHandler)(peerHandlers.get(i)); if(ph != null) { @@ -273,7 +277,7 @@ if(ref == null) ref = Main.node.rt.getNodeReference(i); ph = new PeerHandler(i, ref, Main.node, - Main.node.getMaxPacketLength()); + Main.node.getMaxPacketLength(), p); peerHandlers.put(i, ph); return ph; } @@ -613,16 +617,16 @@ } public TrailerWriter sendMessage(Message m, Identity i, NodeReference ref, - long timeout, int msgPrio) + long timeout, int msgPrio, Presentation p) throws SendFailedException { - return makePeerHandler(i, ref).sendMessage(m, timeout, msgPrio); + return makePeerHandler(i, ref, p).sendMessage(m, timeout, msgPrio); } public void sendMessageAsync(Message m, Identity i, NodeReference ref, MessageSendCallback cb, long timeout, - int msgPrio) + int msgPrio, Presentation p) throws SendFailedException { - makePeerHandler(i, ref).sendMessageAsync(m, cb, timeout, + makePeerHandler(i, ref, p).sendMessageAsync(m, cb, timeout, msgPrio); } _______________________________________________ cvs mailing list [EMAIL PROTECTED] http://dodo.freenetproject.org/cgi-bin/mailman/listinfo/cvs