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:
zzz
2022-05-28 12:02:52 -04:00
parent 8ac78af293
commit d467dc28b9

View File

@@ -1,6 +1,8 @@
package net.i2p.client.impl;
import java.util.concurrent.ConcurrentHashMap;
import java.util.Collection;
import java.util.HashSet;
import java.util.Map;
import net.i2p.I2PAppContext;
@@ -59,13 +61,21 @@ public class I2PSessionDemultiplexer implements I2PSessionMuxedListener {
}
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);
}
}
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())
_log.info("Sending disconnected() to " + l);
l.disconnected(session);
@@ -73,7 +83,11 @@ public class I2PSessionDemultiplexer implements I2PSessionMuxedListener {
}
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())
_log.info("Sending errorOccurred() \"" + message + "\" to " + l);
l.errorOccurred(session, message, error);