summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjwijenbergh <jeroenwijenbergh@protonmail.com>2024-02-22 16:03:28 +0100
committerJeroen Wijenbergh <46386452+jwijenbergh@users.noreply.github.com>2024-02-23 10:40:50 +0100
commit84d3ab740d0637a88537e54110b8a6486c3bd118 (patch)
treeed2596e811b1c685d61c5e715f3e5db47e53fe8f
parentecd4b03aa7d2902e954115a4e1b6648464c77796 (diff)
Client + Exports: Update to latest proxyguard API
- Add a ClientProxyReady callback - do a DNS request for the IPs
-rw-r--r--client/proxy.go19
-rw-r--r--exports/exports.go10
-rw-r--r--go.mod2
-rw-r--r--go.sum2
4 files changed, 29 insertions, 4 deletions
diff --git a/client/proxy.go b/client/proxy.go
index 349a080..31a17a6 100644
--- a/client/proxy.go
+++ b/client/proxy.go
@@ -1,6 +1,9 @@
package client
import (
+ "net"
+ "net/url"
+
"codeberg.org/eduVPN/proxyguard"
"github.com/eduvpn/eduvpn-common/i18nerr"
"github.com/eduvpn/eduvpn-common/internal/log"
@@ -21,11 +24,23 @@ func (pl *ProxyLogger) Log(msg string) {
}
// StartProxyguard starts proxyguard for proxied WireGuard connections
-func (c *Client) StartProxyguard(ck *cookie.Cookie, listen string, tcpsp int, peer string, gotFD func(fd int)) error {
+func (c *Client) StartProxyguard(ck *cookie.Cookie, listen string, tcpsp int, peer string, gotFD func(fd int), ready func()) error {
var err error
proxyguard.UpdateLogger(&ProxyLogger{})
proxyguard.GotClientFD = gotFD
- err = proxyguard.Client(ck.Context(), listen, tcpsp, peer, -1)
+ proxyguard.ClientProxyReady = ready
+
+ u, err := url.Parse(peer)
+ if err != nil {
+ return i18nerr.Wrap(err, "The peer is not a valid URL")
+ }
+
+ pips, err := net.DefaultResolver.LookupHost(ck.Context(), u.Host)
+ if err != nil {
+ return i18nerr.Wrapf(err, "Cannot lookup peer host: '%s'", u.Host)
+ }
+
+ err = proxyguard.Client(ck.Context(), listen, tcpsp, peer, pips, -1)
if err != nil {
return i18nerr.Wrap(err, "The VPN proxy exited")
}
diff --git a/exports/exports.go b/exports/exports.go
index 63f57f3..b5f9042 100644
--- a/exports/exports.go
+++ b/exports/exports.go
@@ -24,6 +24,7 @@ typedef int (*StateCB)(int oldstate, int newstate, void* data);
typedef void (*TokenGetter)(const char* server_id, int server_type, char* out, size_t len);
typedef void (*TokenSetter)(const char* server_id, int server_type, const char* tokens);
typedef void (*ProxyFD)(int fd);
+typedef void (*ProxyReady)();
static long long int get_read_rx_bytes(ReadRxBytes read)
{
@@ -45,6 +46,10 @@ static void call_proxy_fd(ProxyFD proxyfd, int fd)
{
proxyfd(fd);
}
+static void call_proxy_ready(ProxyReady ready)
+{
+ ready();
+}
*/
import "C"
@@ -907,11 +912,12 @@ func StartFailover(c C.uintptr_t, gateway *C.char, mtu C.int, readRxBytes C.Read
// - `peer` is the ip:port of the remote server
// - `proxyFD` is a callback with the file descriptor as only argument. It can be used to set certain
// socket option, e.g. to exclude the proxy connection from going over the VPN
+// - `proxyReady` is a callback when the proxy is ready to be used
//
// If the proxy cannot be started it returns an error
//
//export StartProxyguard
-func StartProxyguard(c C.uintptr_t, listen *C.char, tcpsp C.int, peer *C.char, proxyFD C.ProxyFD) *C.char {
+func StartProxyguard(c C.uintptr_t, listen *C.char, tcpsp C.int, peer *C.char, proxyFD C.ProxyFD, proxyReady C.ProxyReady) *C.char {
state, stateErr := getVPNState()
if stateErr != nil {
return getCError(stateErr)
@@ -926,6 +932,8 @@ func StartProxyguard(c C.uintptr_t, listen *C.char, tcpsp C.int, peer *C.char, p
return
}
C.call_proxy_fd(proxyFD, C.int(fd))
+ }, func() {
+ C.call_proxy_ready(proxyReady)
})
return getCError(proxyErr)
}
diff --git a/go.mod b/go.mod
index f147da5..f4527d6 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module github.com/eduvpn/eduvpn-common
go 1.18
require (
- codeberg.org/eduVPN/proxyguard v0.0.0-20240213150724-adfa5487640a
+ codeberg.org/eduVPN/proxyguard v0.0.0-20240222150137-7a64d5af6bd2
github.com/jedisct1/go-minisign v0.0.0-20230811132847-661be99b8267
github.com/jwijenbergh/eduoauth-go v0.0.0-20240212102633-770ef228bd93
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c
diff --git a/go.sum b/go.sum
index 237d775..a1ef43b 100644
--- a/go.sum
+++ b/go.sum
@@ -1,5 +1,7 @@
codeberg.org/eduVPN/proxyguard v0.0.0-20240213150724-adfa5487640a h1:OH5xfNALCNHysHxYgTQy5qL4MT91cN7/lwtc4bzchQo=
codeberg.org/eduVPN/proxyguard v0.0.0-20240213150724-adfa5487640a/go.mod h1:fc7DsdgdLmrO7DN45HNp+ekVewlRcikSOkAvUeGUvWk=
+codeberg.org/eduVPN/proxyguard v0.0.0-20240222150137-7a64d5af6bd2 h1:Vm4JtbNHY/W11ldulDK6rGw56vvQilv42pZ/jSWlIlc=
+codeberg.org/eduVPN/proxyguard v0.0.0-20240222150137-7a64d5af6bd2/go.mod h1:fc7DsdgdLmrO7DN45HNp+ekVewlRcikSOkAvUeGUvWk=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/jedisct1/go-minisign v0.0.0-20230811132847-661be99b8267 h1:TMtDYDHKYY15rFihtRfck/bfFqNfvcabqvXAFQfAUpY=
github.com/jedisct1/go-minisign v0.0.0-20230811132847-661be99b8267/go.mod h1:h1nSAbGFqGVzn6Jyl1R/iCcBUHN4g+gW1u9CoBTrb9E=