diff --git a/pkg/api/registry.go b/pkg/api/registry.go index 6ceeabed9aeb257e9c8675c8370b8345e6d57519..cb49b800b6b7ca5889cce3e4c0709bb16658f507 100644 --- a/pkg/api/registry.go +++ b/pkg/api/registry.go @@ -25,8 +25,9 @@ type locationMap map[string]*m.Location type transportType string var ( - transportOpenVPN transportType = "openvpn" - transportOBFS4 transportType = "obfs4" + transportOpenVPN transportType = "openvpn" + transportOBFS4 transportType = "obfs4" + transportOBFS4Hop transportType = "obfs4-hop" tmpEIPFilePath = "/tmp/leap-eip-legacy.json" ) @@ -128,7 +129,7 @@ func newRegistry(cfg *Config) (*registry, error) { Bucket: g.Bucket, Port: p, Transport: proto, - Type: string(transportOpenVPN), + Type: transport.Type, LastSeenMillis: time.Now().UnixMilli(), } _, exists := gateways[loc] @@ -150,7 +151,7 @@ func newRegistry(cfg *Config) (*registry, error) { loc := m.CanonicalizeLocation(g.Location) bridge := &m.Bridge{ Healthy: true, - Type: string(transportOBFS4), + Type: transport.Type, Host: g.Host, Location: loc, Bucket: g.Bucket, @@ -174,6 +175,33 @@ func newRegistry(cfg *Config) (*registry, error) { } } } + case string(transportOBFS4Hop): + for _, proto := range transport.Protocols { + loc := m.CanonicalizeLocation(g.Location) + bridge := &m.Bridge{ + Healthy: true, + Type: transport.Type, + Host: g.Host, + Location: loc, + Bucket: g.Bucket, + IPAddr: g.IPAddr, + Transport: proto, + Options: transport.Options, + LastSeenMillis: time.Now().UnixMilli(), + } + _, exists := bridges[loc] + if !exists { + // key not already in the location map + bridges[loc] = []*m.Bridge{bridge} + } else { + bridges[loc] = append(bridges[loc], bridge) + } + if _, exists := locations[loc]; exists { + locations[loc].HasBridges = true + } else { + log.Fatal().Msgf("Could not find matching loation %s in locations list", loc) + } + } default: fmt.Printf("unknown transport type %v", transport.Type)