Skip to content

Commit

Permalink
use openvpn3 reconnect
Browse files Browse the repository at this point in the history
  • Loading branch information
zolia committed Nov 30, 2018
1 parent 82336b1 commit 284c789
Showing 1 changed file with 38 additions and 2 deletions.
40 changes: 38 additions & 2 deletions mobile/mysterium/openvpn_connection_setup.go
Expand Up @@ -18,6 +18,8 @@
package mysterium

import (
"errors"

"github.com/cihub/seelog"
"github.com/mysteriumnetwork/go-openvpn/openvpn3"

Expand Down Expand Up @@ -108,8 +110,40 @@ func (adapter channelToCallbacksAdapter) OnStats(openvpnStats openvpn3.Statistic
// Openvpn3TunnelSetup is alias for openvpn3 tunnel setup interface exposed to Android/iOS interop
type Openvpn3TunnelSetup openvpn3.TunnelSetup

// OverrideOpenvpnConnection replaces default openvpn connection factory with mobile related one
func (mobNode *MobileNode) OverrideOpenvpnConnection(tunnelSetup Openvpn3TunnelSetup) {
type ReconnectableSession interface {
Reconnect(afterSeconds int) error
}

type sessionTracker struct {
session *openvpn3.Session
}

func (st *sessionTracker) sessionCreated(s *openvpn3.Session) {
st.session = s
}

func (st *sessionTracker) Reconnect(afterSeconds int) error {
if st.session == nil {
return errors.New("session not created yet")
}

return st.session.Reconnect(afterSeconds)
}

func (st *sessionTracker) handleState(stateEvent connection.StateEvent) {
// On disconnected - remove session
if stateEvent.State == connection.Disconnecting {
st.session.Stop()
}
}

// OverrideOpenvpnConnection replaces default openvpn connection factory with mobile related one returning session that can be reconnected
func (mobNode *MobileNode) OverrideOpenvpnConnection(tunnelSetup Openvpn3TunnelSetup) ReconnectableSession {

st := &sessionTracker{}

mobNode.di.EventBus.Subscribe(connection.StateEventTopic, st.handleState)

mobNode.di.ConnectionRegistry.Register("openvpn", func(options connection.ConnectOptions, stateChannel connection.StateChannel, statisticsChannel connection.StatisticsChannel) (connection.Connection, error) {

vpnClientConfig, err := openvpn.NewClientConfigFromSession(options.SessionConfig, "", "")
Expand Down Expand Up @@ -140,9 +174,11 @@ func (mobNode *MobileNode) OverrideOpenvpnConnection(tunnelSetup Openvpn3TunnelS
}

session := openvpn3.NewMobileSession(config, credentials, channelToCallbacks(stateChannel, statisticsChannel), tunnelSetup)
st.sessionCreated(session)

return &sessionWrapper{
session: session,
}, nil
})
return st
}

0 comments on commit 284c789

Please sign in to comment.