diff options
| -rw-r--r-- | client/proxy.go | 3 | ||||
| -rw-r--r-- | exports/exports.go | 17 | ||||
| -rw-r--r-- | go.mod | 4 | ||||
| -rw-r--r-- | go.sum | 4 | ||||
| -rw-r--r-- | wrappers/python/eduvpn_common/loader.py | 1 | ||||
| -rw-r--r-- | wrappers/python/eduvpn_common/main.py | 1 |
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) } @@ -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 @@ -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) |
