diff --git a/pkg/vpn/management/event.go b/pkg/vpn/management/event.go index c9e0267abba093e2f45c3e9a0f6b94b2857c5afc..96b2068d52883cdcc23dc410cc925127d8244a3e 100644 --- a/pkg/vpn/management/event.go +++ b/pkg/vpn/management/event.go @@ -25,6 +25,7 @@ import ( "bytes" "fmt" "strconv" + "strings" ) var eventSep = []byte(":") @@ -145,13 +146,22 @@ func (e *StateEvent) RemoteAddr() string { return string(parts[4]) } +// RemotePort returns the port of the remote openvpn process. +// This field is only populated for events whose NewState returns +// CONNECTED. +func (e *StateEvent) RemotePort() string { + parts := e.parts() + // parts[5] is "80,,,fd15:53b6:dead::2", 80 is the port + return strings.Split(string(parts[5]), ",")[0] +} + func (e *StateEvent) String() string { newState := e.NewState() switch newState { case "ASSIGN_IP": return fmt.Sprintf("%s: %s", newState, e.LocalTunnelAddr()) case "CONNECTED": - return fmt.Sprintf("%s: %s", newState, e.RemoteAddr()) + return fmt.Sprintf("%s: %s:%s", newState, e.RemoteAddr(), e.RemotePort()) default: desc := e.Description() if desc != "" { diff --git a/pkg/vpn/status.go b/pkg/vpn/status.go index 731eddab1f6a155bac56f42261ac42370b6c688d..c220b363abfc8f434e07eeb2999c40b76b30ba84 100644 --- a/pkg/vpn/status.go +++ b/pkg/vpn/status.go @@ -103,7 +103,10 @@ func (b *Bitmask) eventHandler(eventCh <-chan management.Event) { } if statusName == "CONNECTED" { - ip := strings.Split(stateEvent.String(), ": ")[1] + state := strings.Split(stateEvent.String(), ":") + ip := strings.TrimSpace(state[1]) + port := state[2] + if ip == "127.0.0.1" { // we're using pluggable transports b.onGateway = b.ptGateway @@ -113,10 +116,12 @@ func (b *Bitmask) eventHandler(eventCh <-chan management.Event) { b.onGateway = gw log.Info(). Str("gateway", b.onGateway.Host). + Str("port", port). Msg("Sucessfully connected to gateway") } else { log.Warn(). Str("ip", ip). + Str("port", port). Msg("Connected to unknown gateway") } }