--- /dev/null
+tlsproxy_src = [
+ 'proxy/tlsproxy.c',
+ 'proxy/tls-proxy.c',
+]
+
+tlsproxy = executable(
+ 'tlsproxy',
+ tlsproxy_src,
+ dependencies: [
+ libkres_dep,
+ libuv,
+ gnutls,
+ ],
+ build_by_default: false,
+)
+
+
+pytest = find_program('pytest', required: false)
+test(
+ 'pytests.basic',
+ pytest,
+ is_parallel: false
+ args: [
+ '--html', 'pytests.basic.html',
+ '--self-contained-html',
+ '-d',
+ '-n', '24',
+ meson.current_source_dir(),
+ ],
+ env: [
+ 'KRESD_EXEC=@0@'.format(kresd_install_path),
+ 'TLSPROXY_EXEC=@0@'.format(join_paths(meson.current_build_dir(), 'tlsproxy')),
+ ],
+ suite: [
+ 'postinstall',
+ 'pytests',
+ ],
+)
#include <stdbool.h>
#include <gnutls/gnutls.h>
#include <uv.h>
-#include "array.h"
+#include "lib/generic/array.h"
#include "tls-proxy.h"
#define TLS_MAX_SEND_RETRIES 100
return;
}
memcpy(&upstream->addr, &proxy->upstream_addr, sizeof(struct sockaddr_storage));
-
+
struct tls_ctx *tls = calloc(1, sizeof(struct tls_ctx));
tls->handshake_state = TLS_HS_NOT_STARTED;
}
int tls_proxy_init(struct tls_proxy_ctx *proxy, const struct args *a)
-{
+{
const char *server_addr = a->local_addr;
int server_port = a->local_port;
const char *upstream_addr = a->upstream;
proxy->conn_sequence = 0;
proxy->loop->data = proxy;
-
+
int err = 0;
if (gnutls_references == 0) {
err = gnutls_global_init();
}
}
gnutls_references += 1;
-
+
err = gnutls_certificate_allocate_credentials(&proxy->tls_credentials);
if (err != GNUTLS_E_SUCCESS) {
fprintf(stdout, "[proxy] gnutls_certificate_allocate_credentials() failed: (%d) %s\n",
gnutls_certificate_free_credentials(proxy->tls_credentials);
gnutls_priority_deinit(proxy->tls_priority_cache);
free(proxy);
-
+
gnutls_references -= 1;
if (gnutls_references == 0) {
gnutls_global_deinit();
}
int tls_proxy_start_listen(struct tls_proxy_ctx *proxy)
-{
+{
uv_tcp_bind(&proxy->server.handle, (const struct sockaddr*)&proxy->server.addr, 0);
int ret = uv_listen((uv_stream_t*)&proxy->server.handle, 128, on_client_connection);
return ret;