Author: toad
Date: 2007-04-14 17:18:31 +0000 (Sat, 14 Apr 2007)
New Revision: 12703

Modified:
   trunk/freenet/src/freenet/node/FNPPacketMangler.java
   trunk/freenet/src/freenet/node/MessageItem.java
Log:
Refactor and catch errors on calling callbacks.

Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java
===================================================================
--- trunk/freenet/src/freenet/node/FNPPacketMangler.java        2007-04-14 
17:10:33 UTC (rev 12702)
+++ trunk/freenet/src/freenet/node/FNPPacketMangler.java        2007-04-14 
17:18:31 UTC (rev 12703)
@@ -1027,11 +1027,7 @@
                     }
                     int packetNumber = 
kt.allocateOutgoingPacketNumberNeverBlock();
                     this.processOutgoingPreformatted(buf, 0, buf.length, 
pn.getCurrentKeyTracker(), packetNumber, mi.cb, mi.alreadyReportedBytes);
-                    if(mi.ctrCallback != null)
-                       mi.ctrCallback.sentBytes(buf.length + 
HEADERS_LENGTH_ONE_MESSAGE);
-                    if(mi.cb != null) {
-                       for(int j=0;j<mi.cb.length;j++) mi.cb[j].sent();
-                    }
+                    mi.onSent(buf.length + HEADERS_LENGTH_ONE_MESSAGE);
                 } catch (NotConnectedException e) {
                     Logger.normal(this, "Caught "+e+" while sending messages 
("+mi_name+") to "+pn.getPeer()+requeueLogString);
                     // Requeue
@@ -1110,14 +1106,7 @@
                 for(int i=0;i<messageData.length;i++) {
                        MessageItem mi = newMsgs[i];
                                        mi_name = (mi.msg == null ? "(not a 
Message)" : mi.msg.getSpec().getName());
-                       if(mi.ctrCallback != null) {
-                               mi.ctrCallback.sentBytes(messageData[i].length 
+ 
-                                               1 + (HEADERS_LENGTH_MINIMUM / 
messageData.length));
-                               // FIXME rounding issues
-                       }
-                    if(mi.cb != null) {
-                       for(int j=0;j<mi.cb.length;j++) mi.cb[j].sent();
-                    }
+                                       mi.onSent(messageData[i].length + 1 + 
(HEADERS_LENGTH_MINIMUM / messageData.length));
                 }
             } catch (NotConnectedException e) {
                 Logger.normal(this, "Caught "+e+" while sending messages 
("+mi_name+") to "+pn.getPeer()+requeueLogString);
@@ -1164,14 +1153,7 @@
                             for(int j=lastIndex;j<i;j++) {
                                MessageItem mi = newMsgs[j];
                                                                mi_name = 
(mi.msg == null ? "(not a Message)" : mi.msg.getSpec().getName());
-                               if(mi.ctrCallback != null) {
-                                       
mi.ctrCallback.sentBytes(messageData[j].length + 
-                                                       1 + 
(HEADERS_LENGTH_MINIMUM / (i-lastIndex)));
-                                       // FIXME rounding issues
-                               }
-                                if(mi.cb != null) {
-                                       for(int k=0;k<mi.cb.length;k++) 
mi.cb[k].sent();
-                                }
+                                                               
mi.onSent(messageData[j].length + 1 + (HEADERS_LENGTH_MINIMUM / (i-lastIndex)));
                             }
                         } catch (NotConnectedException e) {
                             Logger.normal(this, "Caught "+e+" while sending 
messages ("+mi_name+") to "+pn.getPeer()+requeueLogString);

Modified: trunk/freenet/src/freenet/node/MessageItem.java
===================================================================
--- trunk/freenet/src/freenet/node/MessageItem.java     2007-04-14 17:10:33 UTC 
(rev 12702)
+++ trunk/freenet/src/freenet/node/MessageItem.java     2007-04-14 17:18:31 UTC 
(rev 12703)
@@ -4,6 +4,7 @@
 package freenet.node;

 import freenet.io.comm.Message;
+import freenet.support.Logger;

 /** A queued Message or byte[], and a callback, which may be null. */
 public class MessageItem {
@@ -49,4 +50,23 @@
             buf = msg.encodeToPacket(pn);
         return buf;
     }
+
+       public void onSent(int length) {
+               if(ctrCallback != null) {
+                       try {
+                               ctrCallback.sentBytes(length);
+                       } catch (Throwable t) {
+                               Logger.error(this, "Caught "+t+" reporting 
"+length+" sent bytes on "+this);
+                       }
+               }
+               if(cb != null) {
+                       for(int i=0;i<cb.length;i++) {
+                               try {
+                                       cb[i].sent();
+                               } catch (Throwable t) {
+                                       Logger.error(this, "Caught "+t+" 
calling sent() on "+cb[i]+" for "+this);
+                               }
+                       }
+               }
+       }
 }


Reply via email to