diff --git a/jetty-core/jetty-http2/jetty-http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Session.java b/jetty-core/jetty-http2/jetty-http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Session.java index b4626c6c4694..92995ec64bd8 100644 --- a/jetty-core/jetty-http2/jetty-http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Session.java +++ b/jetty-core/jetty-http2/jetty-http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Session.java @@ -77,6 +77,7 @@ import org.eclipse.jetty.util.component.AbstractLifeCycle; import org.eclipse.jetty.util.component.Dumpable; import org.eclipse.jetty.util.component.DumpableCollection; +import org.eclipse.jetty.util.component.DumpableMap; import org.eclipse.jetty.util.thread.AutoLock; import org.eclipse.jetty.util.thread.Invocable; import org.eclipse.jetty.util.thread.Scheduler; @@ -91,6 +92,8 @@ public abstract class HTTP2Session extends AbstractLifeCycle implements Session, private static final int MAX_TOTAL_LOCAL_STREAMS = Integer.MAX_VALUE / 2; private final Map streams = new ConcurrentHashMap<>(); + private final Map localSettings = new ConcurrentHashMap<>(); + private final Map remoteSettings = new ConcurrentHashMap<>(); private final Set priorityStreams = ConcurrentHashMap.newKeySet(); private final List frameListeners = new CopyOnWriteArrayList<>(); private final List lifeCycleListeners = new CopyOnWriteArrayList<>(); @@ -445,6 +448,7 @@ public void onSettings(SettingsFrame frame, boolean reply) return; Map settings = frame.getSettings(); + remoteSettings.putAll(settings); configure(settings, false); notifySettings(this, frame); @@ -811,6 +815,9 @@ public void succeeded(Stream pushed) @Override public void settings(SettingsFrame frame, Callback callback) { + if (!frame.isReply()) + localSettings.putAll(frame.getSettings()); + control(null, callback, frame); } @@ -1442,7 +1449,10 @@ protected static boolean isClientStream(int streamId) @Override public void dump(Appendable out, String indent) throws IOException { - Dumpable.dumpObjects(out, indent, this, flowControl, flusher, new DumpableCollection("streams", streams.values())); + DumpableCollection streamsDump = new DumpableCollection("streams", streams.values()); + DumpableMap localSettingsDump = new DumpableMap("local settings", localSettings); + DumpableMap remoteSettingsDump = new DumpableMap("remote settings", remoteSettings); + Dumpable.dumpObjects(out, indent, this, flowControl, flusher, streamsDump, localSettingsDump, remoteSettingsDump); } @Override