Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
09630f0
Introduce QUIC C2S listener type and core lifecycle wiring
dwd Apr 4, 2026
34a9b54
Add admin console support for QUIC client listener configuration
dwd Apr 4, 2026
30430d4
Implement QUIC C2S transport bootstrap and pipeline wiring
dwd Apr 4, 2026
21fc6c6
Add regression tests for NettyConnection QUIC address resolution
dwd Apr 4, 2026
764fbf3
Fix QUIC ALPN negotiation for C2S and make ALPN configurable
dwd Apr 4, 2026
c754a2c
Use QUIC remote socket address for session IP resolution
dwd Apr 4, 2026
aabe181
Add QUIC multi-stream session handling and outbound stream routing
dwd Apr 4, 2026
1942edd
Fix QUIC multi-stream bugs: full pipeline on server-initiated streams…
dwd Apr 23, 2026
a271bf1
QUIC minor fixes: consistent concurrency, safe outbound-stream defaul…
dwd Apr 23, 2026
c2eeebf
QUIC aux streams: eliminate client stream-open requirement
dwd Apr 23, 2026
60defc0
QUIC: add transport-parameter startup logging and qlog support
dwd Apr 23, 2026
7e8c839
QUIC: log every inbound stream open and primary/aux classification
dwd Apr 24, 2026
9a43648
QUIC: log connection-level stream credits and stream-limit-changed ev…
dwd Apr 24, 2026
ff643b4
QUIC aux streams: no stream-open exchange on either side
dwd Apr 24, 2026
9295dbc
QUIC: do not advertise/negotiate XEP-0198 stream management over QUIC
dwd Apr 29, 2026
7973bca
QUIC: pin top-level non-stanza writes (deliverRawText) to stream id 0
dwd Apr 29, 2026
b21f0be
QUIC: lower default idle timeout to 600s per XEP-0467 §2 (#8)
dwd Apr 29, 2026
784506a
QUIC admin: expose max-outbound-streams, ALPN and qlog dir in admin p…
dwd Apr 29, 2026
a867247
QUIC: fix stream:error on wrong stream and spurious keepalive timeout…
dwd Apr 29, 2026
e9b612f
QUIC: disable application-level idle timeout; rely on QUIC transport …
dwd Apr 30, 2026
d9e4125
QUIC: remove app-level WriteTimeoutHandler from stream pipelines
dwd May 1, 2026
8f9a56a
QUIC: enable aux-stream sharding by default (max-outbound-streams 0 -…
dwd May 1, 2026
fe24a63
QUIC: prefer reusing unallocated client-initiated streams before open…
dwd May 1, 2026
aca997a
QUIC admin: merge QUIC settings into the Client Connections page as a…
dwd May 1, 2026
be6e9a9
QUIC admin: surface QUIC connection details on session-details page
dwd May 1, 2026
2a2d13a
Replace InsecureQuicTokenHandler with HmacQuicTokenHandler
dwd May 14, 2026
745337f
QUIC migration Phase 1+3: session registry and path-event handling
dwd May 14, 2026
7cb0b09
QUIC migration Phase 2+6: v2 DCID-bound tokens and migration-enabled …
dwd May 14, 2026
15c6d4e
Update plan-quic-migration.md with implementation status
dwd May 14, 2026
e59cccf
Expand QUIC native platform coverage to all five supported targets
dwd May 14, 2026
3fa7afb
Surface Quic.isAvailable() in admin console QUIC settings panel
dwd May 14, 2026
b60bd86
Extend QUIC support to S2S (federation)
dwd May 14, 2026
d1c4208
Add outbound QUIC S2S and admin console settings page
dwd May 14, 2026
0228f61
Add WebTransport/h3 C2S and shared-port ALPN multiplexing for QUIC
dwd May 14, 2026
c9fcd8a
Document ports in Dockerfile EXPOSE
dwd May 15, 2026
852c365
Fix QUIC CID authentication failure in HmacQuicTokenHandler
dwd May 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file added .junie/memory/errors.md
Empty file.
Empty file added .junie/memory/feedback.md
Empty file.
1 change: 1 addition & 0 deletions .junie/memory/language.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[]
1 change: 1 addition & 0 deletions .junie/memory/memory.version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
3.0
Empty file added .junie/memory/tasks.md
Empty file.
19 changes: 18 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,24 @@ LABEL org.opencontainers.image.authors="dave@cridland.net,dan@caseley.me.uk"
WORKDIR /usr/local/openfire
HEALTHCHECK --interval=1m --timeout=10s --start-period=3m --retries=3 CMD bash -c "(echo > /dev/tcp/localhost/5222) 2>/dev/null || exit 1"

EXPOSE 3478 3479 5005 5222 5223 5229 5262 5263 5275 5276 7070 7443 7777 9090 9091
# Exposed ports:
# 3478 - STUN (plain) \ for Jingle (audio/video) via the
# 3479 - STUN (TLS) / STUN / TURN Service plugin
# 5005 - Java remote debugging (only useful in dev/debug builds)
# 5222 - XMPP client connections (plain / STARTTLS)
# 5223 - XMPP client connections (legacy SSL)
# 5224 - XMPP client+server connections (QUIC); optionally WebTransport (HTTP/3)
# 5229 - Flash cross-domain handler (legacy)
# 5262 - XMPP component connections (plain / STARTTLS)
# 5263 - XMPP component connections (legacy SSL)
# 5275 - XMPP server-to-server connections (plain / STARTTLS)
# 5276 - XMPP server-to-server connections (legacy SSL)
# 7070 - HTTP (BOSH / WebSocket)
# 7443 - HTTPS (BOSH / WebSocket)
# 7777 - File transfer proxy
# 9090 - Admin console (HTTP)
# 9091 - Admin console (HTTPS)
EXPOSE 3478 3479 5005 5222 5223 5224 5229 5262 5263 5275 5276 7070 7443 7777 9090 9091
VOLUME ["${OPENFIRE_DATA_DIR}"]
VOLUME ["${OPENFIRE_LOG_DIR}"]
ENTRYPOINT [ "/sbin/entrypoint.sh" ]
61 changes: 61 additions & 0 deletions i18n/src/main/resources/openfire_i18n.properties
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,12 @@ tab.server.descr=Click to manage server settings
sidebar.profile-settings.descr=Click to configure user and group profile settings
sidebar.client-connections-settings=Client Connections
sidebar.client-connections-settings.descr=Click to configure client connections settings
sidebar.quic-client-connections-settings=Client Connections (QUIC)
sidebar.quic-client-connections-settings.descr=Click to configure QUIC client connections settings
sidebar.server2server-settings=Server to Server
sidebar.server2server-settings.descr=Click to configure server to server settings
sidebar.quic-server2server-settings=Server to Server (QUIC)
sidebar.quic-server2server-settings.descr=Click to configure QUIC server-to-server (federation) settings
sidebar.external-components-settings=External Components
sidebar.external-components-settings.descr=Click to configure external component settings
sidebar.connection-managers-settings=Connection Managers
Expand Down Expand Up @@ -1347,6 +1351,10 @@ system_property.xmpp.ratelimit.newconnections.logging.suppress=The minimum time
system_property.xmpp.ratelimit.newconnections.s2s.enabled=Enables or disables rate limiting for new server-to-server (S2S) connections.
system_property.xmpp.ratelimit.newconnections.s2s.max_burst=The maximum number of new server-to-server connection attempts that can be accepted in a short burst. Allows temporary bursts without violating the sustained rate.
system_property.xmpp.ratelimit.newconnections.s2s.permits_per_second=The sustained rate of new server-to-server connection attempts allowed per second. Applies to all S2S (federation) connection types, which currently is just TCP.
system_property.xmpp.quic.client.idle=How long, in seconds, before idle QUIC client sessions are dropped. Set to -1 to never drop idle sessions.
system_property.xmpp.quic.client.max-streams=Maximum number of QUIC streams that can be associated with a client session.
system_property.xmpp.quic.client.max-outbound-streams=Maximum number of QUIC streams that Openfire opens proactively for outbound stanza delivery.
system_property.xmpp.quic.client.alpn=Comma-separated list of ALPN values accepted by the QUIC C2S listener. The default and recommended value is xmpp-client.
system_property.plugins.upload.enabled=Defines if the admin console can be used to upload plugins.
system_property.plugins.upload.content-type-check.enabled=Determines if the content-type of uploaded plugin files is verified.
system_property.plugins.upload.content-type-check.expected-value=Defines the expected content-type of uploaded plugin files.
Expand Down Expand Up @@ -1845,6 +1853,13 @@ session.details.hide-extended=Show Less Details
session.details.show-extended=Show More Details
session.details.security=Security
session.details.features=Features & Functionality
session.details.quic.title=QUIC Connection
session.details.quic.streams=Streams
session.details.quic.peer-credits=Peer-allowed bidi streams
session.details.quic.rtt=RTT (smoothed)
session.details.quic.cwnd=Congestion window
session.details.quic.packets=Packets
session.details.quic.bytes=Bytes

# Session row Page

Expand Down Expand Up @@ -2482,6 +2497,8 @@ ssl.certificates.store-management.combined-stores.title=Certificate Stores
ssl.certificates.store-management.combined-stores.info=These stores are used for all encrypted communication. Three stores are provided\: one identity store, a trust store for server-based connections, and a trust store for client-based connections.
ssl.certificates.store-management.socket-c2s-stores.title=XMPP Client Stores
ssl.certificates.store-management.socket-c2s-stores.info=These stores are used for regular, TCP-based client-to-server XMPP communication. Two stores are provided\: one identity store and a trust store. Openfire ships with an empty trust store, as in typical environments, certificate-based authentication of clients is not required.
ssl.certificates.store-management.quic-c2s-stores.title=XMPP Client Stores (QUIC)
ssl.certificates.store-management.quic-c2s-stores.info=These stores are used for QUIC-based client-to-server XMPP communication. Two stores are provided\: one identity store and a trust store.
ssl.certificates.store-management.socket-s2s-stores.title=Server Federation Stores
ssl.certificates.store-management.socket-s2s-stores.info=These stores are used for server-to-server XMPP communication, which establishes server federation. Two stores are provided\: one identity store and a trust store. Openfire ships with a trust store filled with certificates of generally accepted certificate authorities.
ssl.certificates.store-management.bosh-c2s-stores.title=Web binding (websocket and BOSH) Stores
Expand Down Expand Up @@ -2543,6 +2560,7 @@ ssl.certificates.truststore.ca-reply=Certificate Authority Reply:

# Truststore Page
ssl.certificates.truststore.c2s-title=Client Truststore
ssl.certificates.truststore.quic-c2s-title=Client QUIC Truststore
ssl.certificates.truststore.s2s-title=Server Truststore
ssl.certificates.truststore.title=Openfire Trust Certificate Store
ssl.certificates.truststore.info=Certificates in this list are used by Openfire to verify the identity of remote clients and servers when encrypted connections are being established. By default, Openfire ships with a number of certificates from commonly trusted Certificate Authorities.
Expand Down Expand Up @@ -3473,6 +3491,8 @@ ports.directtls.desc=Connections established on this port are established using
ports.client_to_server=Client to Server
ports.client_to_server.desc=The standard port for clients to connect to the server.
ports.client_to_server.desc_old_ssl=The port used for clients to connect to the server using the Direct TLS method.
ports.client_to_server_quic=Client to Server (QUIC)
ports.client_to_server_quic.desc=The QUIC port used for clients to connect to the server.
ports.server_to_server=Server to Server
ports.server_to_server.desc=The port used for remote servers to connect to this server.
ports.connection_manager=Connection Manager
Expand Down Expand Up @@ -3654,9 +3674,50 @@ client.connections.settings.ratelimit.max_burst=Maximum burst
client.connections.settings.ratelimit.permits.invalid=Permits per second must be a positive whole number.
client.connections.settings.ratelimit.max_burst.invalid=Maximum burst must be a positive whole number.

# QUIC Client Connections Settings page
quic.client.connections.settings.title=Client Connections Settings (QUIC)
quic.client.connections.settings.confirm.updated=QUIC client connection settings have been updated successfully.
quic.client.connections.settings.info=Use the form below to configure how XMPP clients connect to this server over QUIC.
quic.client.connections.settings.boxtitle=QUIC Client Listener
quic.client.connections.settings.label_enable=Enable QUIC client listener
quic.client.connections.settings.label_idle=Idle timeout
quic.client.connections.settings.label_maxstreams=Maximum streams per session (inbound, advertised to client)
quic.client.connections.settings.label_maxoutboundstreams=Maximum server-initiated streams per session
quic.client.connections.settings.label_alpn=ALPN identifier(s) (comma-separated)
quic.client.connections.settings.label_qlogdir=qlog directory (leave empty to disable)
quic.client.connections.settings.valid.port=Port must be between 1 and 65535.
quic.client.connections.settings.valid.idle=Idle timeout must be -1 or a positive number of seconds.
quic.client.connections.settings.valid.maxstreams=Maximum streams must be a positive whole number.
quic.client.connections.settings.valid.maxoutboundstreams=Maximum server-initiated streams must be zero or a positive whole number.
quic.client.connections.settings.valid.alpn=At least one ALPN identifier must be configured.
quic.client.connections.settings.native.available=The Netty QUIC native library is available on this platform. QUIC connections can be accepted.
quic.client.connections.settings.native.unavailable=The Netty QUIC native library is NOT available on this platform (supported platforms: linux-x86_64, linux-aarch_64, osx-x86_64, osx-aarch_64, windows-x86_64). QUIC connections cannot be accepted until the matching native JAR is added to the classpath.
quic.client.connections.settings.label_webtransport=Enable WebTransport (HTTP/3) support
quic.client.connections.settings.label_webtransport.info=When enabled, the QUIC listener also accepts HTTP/3 connections (ALPN \u201ch3\u201d). Browsers and WebTransport-capable clients can connect via an HTTP/3 CONNECT upgrade to /xmpp (XEP-0468). C2S XMPP, S2S XMPP, and WebTransport will share the same UDP port, distinguished by ALPN. Requires a server restart to take effect.

# QUIC S2S (federation) connection settings
quic.server.connections.settings.title=Server-to-Server Connections Settings (QUIC)
quic.server.connections.settings.saved=QUIC S2S connection settings have been updated successfully.
quic.server.connections.settings.info=Use the form below to configure QUIC-based server-to-server (federation) connections. QUIC provides TLS 1.3 transport security; no STARTTLS upgrade is required.
quic.server.connections.settings.native.available=The Netty QUIC native library is available on this platform. QUIC S2S connections can be accepted and initiated.
quic.server.connections.settings.native.unavailable=The Netty QUIC native library is NOT available on this platform (supported platforms: linux-x86_64, linux-aarch_64, osx-x86_64, osx-aarch_64, windows-x86_64). QUIC S2S connections cannot be used until the matching native JAR is added to the classpath.
quic.server.connections.settings.inbound.boxtitle=Inbound QUIC S2S Listener
quic.server.connections.settings.inbound.info=Configure the UDP port on which this server accepts incoming QUIC federation connections from remote XMPP servers.
quic.server.connections.settings.label_enable=Enable inbound QUIC S2S listener
quic.server.connections.settings.label_idle=Idle timeout
quic.server.connections.settings.label_alpn=ALPN identifier(s) (comma-separated)
quic.server.connections.settings.valid.port=Port must be between 1 and 65535.
quic.server.connections.settings.valid.idle=Idle timeout must be -1 or a positive number of seconds.
quic.server.connections.settings.valid.alpn=At least one ALPN identifier must be configured.
quic.server.connections.settings.outbound.boxtitle=Outbound QUIC S2S
quic.server.connections.settings.outbound.info=When enabled, Openfire will attempt to establish outbound federation connections over QUIC before falling back to TCP. Remote servers must advertise a <em>_xmpp-server._quic</em> SRV DNS record for QUIC to be used.
quic.server.connections.settings.outbound.label_enable=Enable outbound QUIC S2S (via _xmpp-server._quic SRV)
quic.server.connections.settings.outbound.srv_note=Note: if no _xmpp-server._quic SRV record is found for the remote domain, Openfire automatically falls back to the standard TCP-based S2S path. Enabling this option has no effect on domains that do not advertise QUIC support.

# Connection type and mode
connection-type.socket-s2s=server-to-server (federation)
connection-type.socket-c2s=client-to-server
connection-type.quic-c2s=client-to-server (QUIC)
connection-type.bosh-c2s=Web binding (websocket & BOSH)
connection-type.webadmin=admin console
connection-type.component=external component
Expand Down
Loading