Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| de8922148e | |||
| e84eecf82c | |||
| c7641853cf | |||
| 6e2025db3e |
11
changelog.md
11
changelog.md
@@ -1,5 +1,16 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 2026-03-20 - 4.13.2 - fix(remoteingress-core)
|
||||||
|
preserve reconnected edge entries during disconnect cleanup
|
||||||
|
|
||||||
|
- Guard edge removal so disconnect handlers only delete entries whose cancel token is already cancelled
|
||||||
|
- Prevents stale TCP and QUIC disconnect paths from removing a newer connection after an edge reconnects
|
||||||
|
|
||||||
|
## 2026-03-19 - 4.13.1 - fix(remoteingress-core)
|
||||||
|
default edge transport mode to QUIC with fallback
|
||||||
|
|
||||||
|
- Changes the default transport mode in edge connections from TCP/TLS to QUIC with fallback when no transport mode is explicitly configured.
|
||||||
|
|
||||||
## 2026-03-19 - 4.13.0 - feat(docs)
|
## 2026-03-19 - 4.13.0 - feat(docs)
|
||||||
document TCP and UDP tunneling over TLS and QUIC
|
document TCP and UDP tunneling over TLS and QUIC
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@serve.zone/remoteingress",
|
"name": "@serve.zone/remoteingress",
|
||||||
"version": "4.13.0",
|
"version": "4.13.2",
|
||||||
"private": false,
|
"private": false,
|
||||||
"description": "Edge ingress tunnel for DcRouter - tunnels TCP and UDP traffic from the network edge to SmartProxy over TLS or QUIC, preserving client IP via PROXY protocol.",
|
"description": "Edge ingress tunnel for DcRouter - tunnels TCP and UDP traffic from the network edge to SmartProxy over TLS or QUIC, preserving client IP via PROXY protocol.",
|
||||||
"main": "dist_ts/index.js",
|
"main": "dist_ts/index.js",
|
||||||
|
|||||||
@@ -220,7 +220,7 @@ async fn edge_main_loop(
|
|||||||
let mut backoff_ms: u64 = 1000;
|
let mut backoff_ms: u64 = 1000;
|
||||||
let max_backoff_ms: u64 = 30000;
|
let max_backoff_ms: u64 = 30000;
|
||||||
|
|
||||||
let transport_mode = config.transport_mode.unwrap_or(TransportMode::TcpTls);
|
let transport_mode = config.transport_mode.unwrap_or(TransportMode::QuicWithFallback);
|
||||||
|
|
||||||
// Build TLS config ONCE outside the reconnect loop — preserves session
|
// Build TLS config ONCE outside the reconnect loop — preserves session
|
||||||
// cache across reconnections for TLS session resumption (saves 1 RTT).
|
// cache across reconnections for TLS session resumption (saves 1 RTT).
|
||||||
|
|||||||
@@ -1073,7 +1073,11 @@ async fn handle_edge_connection(
|
|||||||
).await;
|
).await;
|
||||||
{
|
{
|
||||||
let mut edges = connected.lock().await;
|
let mut edges = connected.lock().await;
|
||||||
edges.remove(&edge_id);
|
// Only remove if the entry is still ours (not replaced by a reconnection).
|
||||||
|
// A replaced entry has a fresh non-cancelled token from the new handler.
|
||||||
|
if edges.get(&edge_id).map_or(false, |e| e.cancel_token.is_cancelled()) {
|
||||||
|
edges.remove(&edge_id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
let _ = event_tx.try_send(HubEvent::EdgeDisconnected {
|
let _ = event_tx.try_send(HubEvent::EdgeDisconnected {
|
||||||
edge_id: edge_id.clone(),
|
edge_id: edge_id.clone(),
|
||||||
@@ -1534,7 +1538,11 @@ async fn handle_edge_connection_quic(
|
|||||||
|
|
||||||
{
|
{
|
||||||
let mut edges = connected.lock().await;
|
let mut edges = connected.lock().await;
|
||||||
edges.remove(&edge_id);
|
// Only remove if the entry is still ours (not replaced by a reconnection).
|
||||||
|
// A replaced entry has a fresh non-cancelled token from the new handler.
|
||||||
|
if edges.get(&edge_id).map_or(false, |e| e.cancel_token.is_cancelled()) {
|
||||||
|
edges.remove(&edge_id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
let _ = event_tx.try_send(HubEvent::EdgeDisconnected {
|
let _ = event_tx.try_send(HubEvent::EdgeDisconnected {
|
||||||
edge_id,
|
edge_id,
|
||||||
|
|||||||
@@ -3,6 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
export const commitinfo = {
|
export const commitinfo = {
|
||||||
name: '@serve.zone/remoteingress',
|
name: '@serve.zone/remoteingress',
|
||||||
version: '4.13.0',
|
version: '4.13.2',
|
||||||
description: 'Edge ingress tunnel for DcRouter - tunnels TCP and UDP traffic from the network edge to SmartProxy over TLS or QUIC, preserving client IP via PROXY protocol.'
|
description: 'Edge ingress tunnel for DcRouter - tunnels TCP and UDP traffic from the network edge to SmartProxy over TLS or QUIC, preserving client IP via PROXY protocol.'
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user