TUN-3449: Use flag to select transport protocol implementation
This commit is contained in:
parent
59051ba425
commit
d7498b0c03
|
@ -719,6 +719,7 @@ func tunnelFlags(shouldHide bool) []cli.Flag {
|
||||||
Value: false,
|
Value: false,
|
||||||
Hidden: shouldHide,
|
Hidden: shouldHide,
|
||||||
}),
|
}),
|
||||||
|
selectProtocolFlag,
|
||||||
}...)
|
}...)
|
||||||
|
|
||||||
return flags
|
return flags
|
||||||
|
|
|
@ -260,12 +260,16 @@ func (sc *subcommandContext) run(tunnelID uuid.UUID) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protocol, ok := origin.ParseProtocol(sc.c.String("protocol"))
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("%s is not valid protocol. %s", sc.c.String("protocol"), availableProtocol)
|
||||||
|
}
|
||||||
return StartServer(
|
return StartServer(
|
||||||
sc.c,
|
sc.c,
|
||||||
version,
|
version,
|
||||||
shutdownC,
|
shutdownC,
|
||||||
graceShutdownC,
|
graceShutdownC,
|
||||||
&origin.NamedTunnelConfig{Auth: *credentials, ID: tunnelID},
|
&origin.NamedTunnelConfig{Auth: *credentials, ID: tunnelID, Protocol: protocol},
|
||||||
sc.logger,
|
sc.logger,
|
||||||
sc.isUIEnabled,
|
sc.isUIEnabled,
|
||||||
)
|
)
|
||||||
|
|
|
@ -30,6 +30,7 @@ import (
|
||||||
|
|
||||||
const (
|
const (
|
||||||
credFileFlagAlias = "cred-file"
|
credFileFlagAlias = "cred-file"
|
||||||
|
availableProtocol = "Available protocols: http2, Go's implementation and h2mux, Cloudflare's implementation of HTTP/2."
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -83,6 +84,13 @@ var (
|
||||||
Aliases: []string{"f"},
|
Aliases: []string{"f"},
|
||||||
Usage: "Allows you to delete a tunnel, even if it has active connections.",
|
Usage: "Allows you to delete a tunnel, even if it has active connections.",
|
||||||
}
|
}
|
||||||
|
selectProtocolFlag = &cli.StringFlag{
|
||||||
|
Name: "protocol",
|
||||||
|
Value: "h2mux",
|
||||||
|
Aliases: []string{"p"},
|
||||||
|
Usage: fmt.Sprintf("Protocol implementation to connect with Cloudflare's edge network. %s", availableProtocol),
|
||||||
|
Hidden: true,
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
func buildCreateCommand() *cli.Command {
|
func buildCreateCommand() *cli.Command {
|
||||||
|
@ -309,6 +317,7 @@ func buildRunCommand() *cli.Command {
|
||||||
flags := []cli.Flag{
|
flags := []cli.Flag{
|
||||||
forceFlag,
|
forceFlag,
|
||||||
credentialsFileFlag,
|
credentialsFileFlag,
|
||||||
|
selectProtocolFlag,
|
||||||
}
|
}
|
||||||
flags = append(flags, configureProxyFlags(false)...)
|
flags = append(flags, configureProxyFlags(false)...)
|
||||||
return &cli.Command{
|
return &cli.Command{
|
||||||
|
|
|
@ -188,9 +188,28 @@ func (c *TunnelConfig) IsTrialTunnel() bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
type NamedTunnelConfig struct {
|
type NamedTunnelConfig struct {
|
||||||
Auth pogs.TunnelAuth
|
Auth pogs.TunnelAuth
|
||||||
ID uuid.UUID
|
ID uuid.UUID
|
||||||
Client pogs.ClientInfo
|
Client pogs.ClientInfo
|
||||||
|
Protocol Protocol
|
||||||
|
}
|
||||||
|
|
||||||
|
type Protocol int64
|
||||||
|
|
||||||
|
const (
|
||||||
|
h2muxProtocol Protocol = iota
|
||||||
|
http2Protocol
|
||||||
|
)
|
||||||
|
|
||||||
|
func ParseProtocol(s string) (Protocol, bool) {
|
||||||
|
switch s {
|
||||||
|
case "h2mux":
|
||||||
|
return h2muxProtocol, true
|
||||||
|
case "http2":
|
||||||
|
return http2Protocol, true
|
||||||
|
default:
|
||||||
|
return 0, false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func StartTunnelDaemon(ctx context.Context, config *TunnelConfig, connectedSignal *signal.Signal, cloudflaredID uuid.UUID, reconnectCh chan ReconnectSignal) error {
|
func StartTunnelDaemon(ctx context.Context, config *TunnelConfig, connectedSignal *signal.Signal, cloudflaredID uuid.UUID, reconnectCh chan ReconnectSignal) error {
|
||||||
|
@ -284,6 +303,10 @@ func ServeTunnel(
|
||||||
|
|
||||||
connectionTag := uint8ToString(connectionIndex)
|
connectionTag := uint8ToString(connectionIndex)
|
||||||
|
|
||||||
|
if config.NamedTunnel != nil && config.NamedTunnel.Protocol == http2Protocol {
|
||||||
|
return ServeNamedTunnel(ctx, config, connectionIndex, addr, connectedFuse, reconnectCh)
|
||||||
|
}
|
||||||
|
|
||||||
// Returns error from parsing the origin URL or handshake errors
|
// Returns error from parsing the origin URL or handshake errors
|
||||||
handler, originLocalAddr, err := NewTunnelHandler(ctx, config, addr, connectionIndex, bufferPool)
|
handler, originLocalAddr, err := NewTunnelHandler(ctx, config, addr, connectionIndex, bufferPool)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in New Issue