/* This code is part of Freenet. It is distributed under the GNU General * Public License, version 2 (or at your option any later version). See * http://www.gnu.org/ for further details of the GPL. */ package freenet.node; import freenet.io.comm.AsyncMessageCallback; import freenet.io.comm.ByteCounter; import freenet.io.comm.Message; import freenet.io.comm.NotConnectedException; import freenet.support.LogThresholdCallback; import freenet.support.Logger; import freenet.support.Logger.LogLevel; /** * If the send fails, send the given message to the given node. * Otherwise do nothing. */ public class SendMessageOnErrorCallback implements AsyncMessageCallback { private static volatile boolean logMINOR; static { Logger.registerLogThresholdCallback(new LogThresholdCallback(){ @Override public void shouldUpdate(){ logMINOR = Logger.shouldLog(LogLevel.MINOR, this); } }); } @Override public String toString() { return super.toString() + ": "+msg+ ' ' +dest; } Message msg; PeerNode dest; ByteCounter ctr; public SendMessageOnErrorCallback(Message message, PeerNode pn, ByteCounter ctr) { this.msg = message; this.dest = pn; this.ctr = ctr; if(logMINOR) Logger.minor(this, "Created "+this); } @Override public void sent() { // Ignore } @Override public void acknowledged() { // All done } @Override public void disconnected() { if(logMINOR) Logger.minor(this, "Disconnect trigger: "+this); try { dest.sendAsync(msg, null, ctr); } catch (NotConnectedException e) { if(logMINOR) Logger.minor(this, "Both source and destination disconnected: "+msg+" for "+this); } } @Override public void fatalError() { disconnected(); } }