F23-I2: Yes
Rationale
A co-located client/router can retain its Destination and local I2CP session while changing external NTCP2 access. With UDP transport disabled, NTCPTransport accepts external-address updates and rebuilds RouterInfo separately from the local client session. TunnelPool replaces failed tunnel leases, while ClientConnectionRunner requests updated LeaseSets using existing SessionParams. This supplies a bounded witness with overlapping reachable access and timely replacement tunnels, without recreating the application Destination session. It does not preserve the old external TCP connection or establish streaming continuity: no streaming extension is selected. Retained router/client processes and usable peers at the new access are prerequisites.
Assessment method
Pinned Java source and I2CP specification; bounded architectural inference, no execution
Source context
I2P commit 37039e6594f1372368f0c1cf8258cdaf805a7fb4: NTCPTransport, TunnelPool and ClientConnectionRunner
Outstanding qualification
Run the pinned build with NTCP2 only and the selected private-network settings. Keep the local I2CP session alive, introduce the new access, renew multi-hop tunnels and leases, then remove the old access. Verify unchanged Destination/session ID and continuing message exchange without CreateSession. Measure losses and deadlines; test total tunnel loss and repeated LeaseSet negotiation failure, which can disconnect the client. No experiment performed.
Public sources
- https://github.com/i2p/i2p.i2p/blob/37039e6594f1372368f0c1cf8258cdaf805a7fb4/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java
- https://github.com/i2p/i2p.i2p/blob/37039e6594f1372368f0c1cf8258cdaf805a7fb4/router/java/src/net/i2p/router/tunnel/pool/TunnelPool.java
- https://github.com/i2p/i2p.i2p/blob/37039e6594f1372368f0c1cf8258cdaf805a7fb4/router/java/src/net/i2p/router/client/ClientConnectionRunner.java
- https://i2p.net/en/docs/specs/i2cp/