forked from I2P_Developers/i2p.i2p
I2CP: Only send one notification to each session listener
for reportAbuse(), disconnected(), and errorOccurred(), because a single listener may be registered for multiple ports/protocols
This commit is contained in:
@@ -1,6 +1,8 @@
|
|||||||
package net.i2p.client.impl;
|
package net.i2p.client.impl;
|
||||||
|
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import net.i2p.I2PAppContext;
|
import net.i2p.I2PAppContext;
|
||||||
@@ -59,13 +61,21 @@ public class I2PSessionDemultiplexer implements I2PSessionMuxedListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void reportAbuse(I2PSession session, int severity) {
|
public void reportAbuse(I2PSession session, int severity) {
|
||||||
for (I2PSessionMuxedListener l : _listeners.values()) {
|
Collection<I2PSessionMuxedListener> lsnrs = _listeners.values();
|
||||||
|
// dedup
|
||||||
|
if (lsnrs.size() > 1)
|
||||||
|
lsnrs = new HashSet<I2PSessionMuxedListener>(lsnrs);
|
||||||
|
for (I2PSessionMuxedListener l : lsnrs) {
|
||||||
l.reportAbuse(session, severity);
|
l.reportAbuse(session, severity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void disconnected(I2PSession session) {
|
public void disconnected(I2PSession session) {
|
||||||
for (I2PSessionMuxedListener l : _listeners.values()) {
|
Collection<I2PSessionMuxedListener> lsnrs = _listeners.values();
|
||||||
|
// dedup
|
||||||
|
if (lsnrs.size() > 1)
|
||||||
|
lsnrs = new HashSet<I2PSessionMuxedListener>(lsnrs);
|
||||||
|
for (I2PSessionMuxedListener l : lsnrs) {
|
||||||
if (_log.shouldInfo())
|
if (_log.shouldInfo())
|
||||||
_log.info("Sending disconnected() to " + l);
|
_log.info("Sending disconnected() to " + l);
|
||||||
l.disconnected(session);
|
l.disconnected(session);
|
||||||
@@ -73,7 +83,11 @@ public class I2PSessionDemultiplexer implements I2PSessionMuxedListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void errorOccurred(I2PSession session, String message, Throwable error) {
|
public void errorOccurred(I2PSession session, String message, Throwable error) {
|
||||||
for (I2PSessionMuxedListener l : _listeners.values()) {
|
Collection<I2PSessionMuxedListener> lsnrs = _listeners.values();
|
||||||
|
// dedup
|
||||||
|
if (lsnrs.size() > 1)
|
||||||
|
lsnrs = new HashSet<I2PSessionMuxedListener>(lsnrs);
|
||||||
|
for (I2PSessionMuxedListener l : lsnrs) {
|
||||||
if (_log.shouldInfo())
|
if (_log.shouldInfo())
|
||||||
_log.info("Sending errorOccurred() \"" + message + "\" to " + l);
|
_log.info("Sending errorOccurred() \"" + message + "\" to " + l);
|
||||||
l.errorOccurred(session, message, error);
|
l.errorOccurred(session, message, error);
|
||||||
|
|||||||
Reference in New Issue
Block a user