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

Reply via email to