summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client/proxy.go3
-rw-r--r--exports/exports.go17
-rw-r--r--go.mod4
-rw-r--r--go.sum4
-rw-r--r--wrappers/python/eduvpn_common/loader.py1
-rw-r--r--wrappers/python/eduvpn_common/main.py1
6 files changed, 24 insertions, 6 deletions
diff --git a/client/proxy.go b/client/proxy.go
index 4165c0f..349a080 100644
--- a/client/proxy.go
+++ b/client/proxy.go
@@ -20,10 +20,11 @@ func (pl *ProxyLogger) Log(msg string) {
log.Logger.Debugf("%s", msg)
}
-func (c *Client) StartProxyguard(ck *cookie.Cookie, listen string, tcpsp int, peer string) error {
// 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 {
var err error
proxyguard.UpdateLogger(&ProxyLogger{})
+ proxyguard.GotClientFD = gotFD
err = proxyguard.Client(ck.Context(), listen, tcpsp, peer, -1)
if err != nil {
return i18nerr.Wrap(err, "The VPN proxy exited")
diff --git a/exports/exports.go b/exports/exports.go
index 4e08e95..19a2ca4 100644
--- a/exports/exports.go
+++ b/exports/exports.go
@@ -23,6 +23,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);
static long long int get_read_rx_bytes(ReadRxBytes read)
{
@@ -40,6 +41,9 @@ static void call_token_setter(TokenSetter setter, const char* server_id, int ser
{
setter(server_id, server_type, tokens);
}
+static void call_proxy_fd(ProxyFD proxyfd, int fd)
+{
+ proxyfd(fd);
}
*/
import "C"
@@ -883,18 +887,20 @@ func StartFailover(c C.uintptr_t, gateway *C.char, mtu C.int, readRxBytes C.Read
}
// StartProxyguard starts the 'proxyguard' procedure in eduvpn-common.
-// This proxies WireGuard UDP connections over TCP.
+// This proxies WireGuard UDP connections over HTTP: https://codeberg.org/eduvpn/proxyguard.
// These input variables can be gotten from the configuration that is retrieved using the `proxy` JSON key
//
// - `c` is the cookie
// - `listen` is the ip:port of the local udp connection, this is what is set to the WireGuard endpoint
// - `tcpsp` is the TCP source port
// - `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
//
// 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) *C.char {
+func StartProxyguard(c C.uintptr_t, listen *C.char, tcpsp C.int, peer *C.char, proxyFD C.ProxyFD) *C.char {
state, stateErr := getVPNState()
if stateErr != nil {
return getCError(stateErr)
@@ -904,7 +910,12 @@ func StartProxyguard(c C.uintptr_t, listen *C.char, tcpsp C.int, peer *C.char) *
return getCError(err)
}
- proxyErr := state.StartProxyguard(ck, C.GoString(listen), int(tcpsp), C.GoString(peer))
+ proxyErr := state.StartProxyguard(ck, C.GoString(listen), int(tcpsp), C.GoString(peer), func(fd int) {
+ if proxyFD == nil {
+ return
+ }
+ C.call_proxy_fd(proxyFD, C.int(fd))
+ })
return getCError(proxyErr)
}
diff --git a/go.mod b/go.mod
index 3cb5b36..6c7dbf0 100644
--- a/go.mod
+++ b/go.mod
@@ -3,9 +3,9 @@ module github.com/eduvpn/eduvpn-common
go 1.18
require (
- codeberg.org/eduVPN/proxyguard v0.0.0-20240205164155-9d29686c075b
+ codeberg.org/eduVPN/proxyguard v0.0.0-20240212184049-5542918494e1
github.com/jedisct1/go-minisign v0.0.0-20230811132847-661be99b8267
- github.com/jwijenbergh/eduoauth-go v0.0.0-20240212100048-b546425b96d2
+ github.com/jwijenbergh/eduoauth-go v0.0.0-20240212102633-770ef228bd93
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c
golang.org/x/text v0.14.0
golang.zx2c4.com/wireguard/wgctrl v0.0.0-20230429144221-925a1e7659e6
diff --git a/go.sum b/go.sum
index 09e6712..f4fb6b6 100644
--- a/go.sum
+++ b/go.sum
@@ -1,5 +1,7 @@
codeberg.org/eduVPN/proxyguard v0.0.0-20240205164155-9d29686c075b h1:hAyBAwMp6a7h3BkW22Tc1DnEfisnQoVnHNYIza9dDv8=
codeberg.org/eduVPN/proxyguard v0.0.0-20240205164155-9d29686c075b/go.mod h1:fc7DsdgdLmrO7DN45HNp+ekVewlRcikSOkAvUeGUvWk=
+codeberg.org/eduVPN/proxyguard v0.0.0-20240212184049-5542918494e1 h1:UatZp7zXr4dhj49RX4W8Le6iP4FlLAuwH+Af4EYRWHQ=
+codeberg.org/eduVPN/proxyguard v0.0.0-20240212184049-5542918494e1/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=
@@ -7,6 +9,8 @@ github.com/jwijenbergh/eduoauth-go v0.0.0-20240117121747-dc6367875133 h1:kQh66On
github.com/jwijenbergh/eduoauth-go v0.0.0-20240117121747-dc6367875133/go.mod h1:HidfCfBBI7U0edu2f0tNM/4/kkm4pD+nrp6IlANo214=
github.com/jwijenbergh/eduoauth-go v0.0.0-20240212100048-b546425b96d2 h1:MT2URyOTQ+45wzKl2oW5Zf+p35gnVMFOc8K7QfriQAA=
github.com/jwijenbergh/eduoauth-go v0.0.0-20240212100048-b546425b96d2/go.mod h1:HidfCfBBI7U0edu2f0tNM/4/kkm4pD+nrp6IlANo214=
+github.com/jwijenbergh/eduoauth-go v0.0.0-20240212102633-770ef228bd93 h1:exaMeJMSv4RCyjM/AKqcP9cdxzGsGrzd2XSLSUjOsrk=
+github.com/jwijenbergh/eduoauth-go v0.0.0-20240212102633-770ef228bd93/go.mod h1:HidfCfBBI7U0edu2f0tNM/4/kkm4pD+nrp6IlANo214=
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc=
diff --git a/wrappers/python/eduvpn_common/loader.py b/wrappers/python/eduvpn_common/loader.py
index 38d0bb5..d608e71 100644
--- a/wrappers/python/eduvpn_common/loader.py
+++ b/wrappers/python/eduvpn_common/loader.py
@@ -130,4 +130,5 @@ def initialize_functions(lib: CDLL) -> None:
c_char_p,
c_int,
c_char_p,
+ c_void_p,
], c_void_p
diff --git a/wrappers/python/eduvpn_common/main.py b/wrappers/python/eduvpn_common/main.py
index 847819d..cd26ca4 100644
--- a/wrappers/python/eduvpn_common/main.py
+++ b/wrappers/python/eduvpn_common/main.py
@@ -351,6 +351,7 @@ class EduVPN(object):
listen,
source_port,
peer,
+ 0,
)
if proxy_err:
forwardError(proxy_err)