Files
gluetun/internal/openvpn/portforwarded.go

47 lines
1.2 KiB
Go
Raw Normal View History

package openvpn
2021-07-23 20:46:57 +00:00
import (
"context"
"net"
"net/http"
"os"
"strings"
"github.com/qdm12/gluetun/internal/provider"
)
func (l *looper) GetPortForwarded() (port uint16) {
return l.state.GetPortForwarded()
}
2021-07-23 20:46:57 +00:00
func (l *looper) PortForward(vpnGateway net.IP) { l.portForwardSignals <- vpnGateway }
// portForward is a blocking operation which may or may not be infinite.
// You should therefore always call it in a goroutine.
func (l *looper) portForward(ctx context.Context,
providerConf provider.Provider, client *http.Client, gateway net.IP) {
settings := l.state.GetSettings()
if !settings.Provider.PortForwarding.Enabled {
return
}
syncState := func(port uint16) (pfFilepath string) {
l.state.SetPortForwarded(port)
settings := l.state.GetSettings()
return settings.Provider.PortForwarding.Filepath
}
providerConf.PortForward(ctx, client, l.pfLogger,
gateway, l.fw, syncState)
}
func (l *looper) writeOpenvpnConf(lines []string) error {
file, err := os.OpenFile(l.targetConfPath, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0644)
if err != nil {
return err
}
_, err = file.WriteString(strings.Join(lines, "\n"))
if err != nil {
return err
}
return file.Close()
}