diff --git a/cs/src/Contracts/TunnelOptions.cs b/cs/src/Contracts/TunnelOptions.cs index c21931a7..b6690cc1 100644 --- a/cs/src/Contracts/TunnelOptions.cs +++ b/cs/src/Contracts/TunnelOptions.cs @@ -94,5 +94,18 @@ public class TunnelOptions /// [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] public bool? IsPartitionedSiteAuthenticationEnabled { get; set; } + + /// + /// Gets or sets the timeout for HTTP requests to the tunnel or port. + /// + /// + /// The default timeout is 100 seconds. Set this to 0 to disable the timeout. The timeout + /// will reset when response headers are received or after successfully reading or writing + /// any request, response, or streaming data like gRPC or WebSockets. TCP keep-alives and + /// HTTP/2 protocol pings will not reset the timeout, but WebSocket pings will. When a + /// request times out, the tunnel relay aborts the request and returns 504 Gateway Timeout. + /// + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingDefault)] + public int? RequestTimeoutSeconds { get; set; } } } diff --git a/go/tunnels/tunnel_options.go b/go/tunnels/tunnel_options.go index 5dbf80b0..fcddc61b 100644 --- a/go/tunnels/tunnel_options.go +++ b/go/tunnels/tunnel_options.go @@ -58,4 +58,14 @@ type TunnelOptions struct { // A partitioned cookie always also has SameSite=None for compatbility with browsers that // do not support partitioning. IsPartitionedSiteAuthenticationEnabled bool `json:"isPartitionedSiteAuthenticationEnabled,omitempty"` + + // Gets or sets the timeout for HTTP requests to the tunnel or port. + // + // The default timeout is 100 seconds. Set this to 0 to disable the timeout. The timeout + // will reset when response headers are received or after successfully reading or writing + // any request, response, or streaming data like gRPC or WebSockets. TCP keep-alives and + // HTTP/2 protocol pings will not reset the timeout, but WebSocket pings will. When a + // request times out, the tunnel relay aborts the request and returns 504 Gateway + // Timeout. + RequestTimeoutSeconds int32 `json:"requestTimeoutSeconds,omitempty"` } diff --git a/go/tunnels/tunnels.go b/go/tunnels/tunnels.go index 6c1d2a2d..953e288e 100644 --- a/go/tunnels/tunnels.go +++ b/go/tunnels/tunnels.go @@ -10,7 +10,7 @@ import ( "github.com/rodaine/table" ) -const PackageVersion = "0.1.17" +const PackageVersion = "0.1.18" func (tunnel *Tunnel) requestObject() (*Tunnel, error) { convertedTunnel := &Tunnel{ diff --git a/java/src/main/java/com/microsoft/tunnels/contracts/TunnelOptions.java b/java/src/main/java/com/microsoft/tunnels/contracts/TunnelOptions.java index 9062111a..e43b486d 100644 --- a/java/src/main/java/com/microsoft/tunnels/contracts/TunnelOptions.java +++ b/java/src/main/java/com/microsoft/tunnels/contracts/TunnelOptions.java @@ -87,4 +87,17 @@ public class TunnelOptions { */ @Expose public boolean isPartitionedSiteAuthenticationEnabled; + + /** + * Gets or sets the timeout for HTTP requests to the tunnel or port. + * + * The default timeout is 100 seconds. Set this to 0 to disable the timeout. The + * timeout will reset when response headers are received or after successfully reading + * or writing any request, response, or streaming data like gRPC or WebSockets. TCP + * keep-alives and HTTP/2 protocol pings will not reset the timeout, but WebSocket + * pings will. When a request times out, the tunnel relay aborts the request and + * returns 504 Gateway Timeout. + */ + @Expose + public int requestTimeoutSeconds; } diff --git a/rs/src/contracts/tunnel_options.rs b/rs/src/contracts/tunnel_options.rs index 9b2d36ca..ed62c933 100644 --- a/rs/src/contracts/tunnel_options.rs +++ b/rs/src/contracts/tunnel_options.rs @@ -69,4 +69,15 @@ pub struct TunnelOptions { // that do not support partitioning. #[serde(default)] pub is_partitioned_site_authentication_enabled: Option, + + // Gets or sets the timeout for HTTP requests to the tunnel or port. + // + // The default timeout is 100 seconds. Set this to 0 to disable the timeout. The + // timeout will reset when response headers are received or after successfully reading + // or writing any request, response, or streaming data like gRPC or WebSockets. TCP + // keep-alives and HTTP/2 protocol pings will not reset the timeout, but WebSocket + // pings will. When a request times out, the tunnel relay aborts the request and + // returns 504 Gateway Timeout. + #[serde(default)] + pub request_timeout_seconds: Option, } diff --git a/ts/src/connections/package.json b/ts/src/connections/package.json index 6fe45eb5..89b40383 100644 --- a/ts/src/connections/package.json +++ b/ts/src/connections/package.json @@ -18,8 +18,8 @@ "buffer": "^5.2.1", "debug": "^4.1.1", "vscode-jsonrpc": "^4.0.0", - "@microsoft/dev-tunnels-contracts": "^1.3.0", - "@microsoft/dev-tunnels-management": "^1.3.0", + "@microsoft/dev-tunnels-contracts": "^1.3.6", + "@microsoft/dev-tunnels-management": "^1.3.6", "@microsoft/dev-tunnels-ssh": "^3.12.12", "@microsoft/dev-tunnels-ssh-tcp": "^3.12.12", "uuid": "^3.3.3", diff --git a/ts/src/contracts/tunnelOptions.ts b/ts/src/contracts/tunnelOptions.ts index 14aea734..70c71ddb 100644 --- a/ts/src/contracts/tunnelOptions.ts +++ b/ts/src/contracts/tunnelOptions.ts @@ -76,4 +76,16 @@ export interface TunnelOptions { * that do not support partitioning. */ isPartitionedSiteAuthenticationEnabled?: boolean; + + /** + * Gets or sets the timeout for HTTP requests to the tunnel or port. + * + * The default timeout is 100 seconds. Set this to 0 to disable the timeout. The + * timeout will reset when response headers are received or after successfully reading + * or writing any request, response, or streaming data like gRPC or WebSockets. TCP + * keep-alives and HTTP/2 protocol pings will not reset the timeout, but WebSocket + * pings will. When a request times out, the tunnel relay aborts the request and + * returns 504 Gateway Timeout. + */ + requestTimeoutSeconds?: number; } diff --git a/ts/src/management/package.json b/ts/src/management/package.json index fad6a4cb..2bc2a21b 100644 --- a/ts/src/management/package.json +++ b/ts/src/management/package.json @@ -18,7 +18,7 @@ "buffer": "^5.2.1", "debug": "^4.1.1", "vscode-jsonrpc": "^4.0.0", - "@microsoft/dev-tunnels-contracts": "^1.3.0", + "@microsoft/dev-tunnels-contracts": "^1.3.6", "axios": "^1.8.4" } }