|
@@ -33,14 +33,22 @@
|
|
|
#include "../../core/mem/shm_mem.h"
|
|
|
#include "../../core/globals.h"
|
|
|
#include "../../core/dprint.h"
|
|
|
+#include "../../core/ip_addr.h"
|
|
|
+#include "../../core/socket_info.h"
|
|
|
+#include "../../core/udp_server.h"
|
|
|
+#include "../../core/forward.h"
|
|
|
+#include "../../core/resolve.h"
|
|
|
+
|
|
|
#include "tls_mod.h"
|
|
|
#include "tls_util.h"
|
|
|
|
|
|
|
|
|
extern int ksr_tls_keylog_mode;
|
|
|
extern str ksr_tls_keylog_file;
|
|
|
+extern str ksr_tls_keylog_peer;
|
|
|
|
|
|
static gen_lock_t *ksr_tls_keylog_file_lock = NULL;
|
|
|
+static dest_info_t ksr_tls_keylog_peer_dst;
|
|
|
|
|
|
/*
|
|
|
* Make a shared memory copy of ASCII zero terminated string
|
|
@@ -168,3 +176,67 @@ int ksr_tls_keylog_file_write(const SSL *ssl, const char *line)
|
|
|
lock_release(ksr_tls_keylog_file_lock);
|
|
|
return ret;
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+/**
|
|
|
+ *
|
|
|
+ */
|
|
|
+int ksr_tls_keylog_peer_init(void)
|
|
|
+{
|
|
|
+ int proto;
|
|
|
+ str host;
|
|
|
+ int port;
|
|
|
+
|
|
|
+ if(!((ksr_tls_keylog_mode & KSR_TLS_KEYLOG_MODE_INIT)
|
|
|
+ && (ksr_tls_keylog_mode & KSR_TLS_KEYLOG_MODE_PEER))) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ if(ksr_tls_keylog_peer.s == NULL || ksr_tls_keylog_peer.len <= 0) {
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ init_dest_info(&ksr_tls_keylog_peer_dst);
|
|
|
+ if(parse_phostport(ksr_tls_keylog_peer.s, &host.s, &host.len, &port, &proto)
|
|
|
+ != 0) {
|
|
|
+ LM_CRIT("invalid peer addr parameter <%s>\n", ksr_tls_keylog_peer.s);
|
|
|
+ return -2;
|
|
|
+ }
|
|
|
+ if(proto != PROTO_UDP) {
|
|
|
+ LM_ERR("only udp supported in peer addr <%s>\n", ksr_tls_keylog_peer.s);
|
|
|
+ return -3;
|
|
|
+ }
|
|
|
+ ksr_tls_keylog_peer_dst.proto = proto;
|
|
|
+ if(sip_hostport2su(&ksr_tls_keylog_peer_dst.to, &host, port,
|
|
|
+ &ksr_tls_keylog_peer_dst.proto)
|
|
|
+ != 0) {
|
|
|
+ LM_ERR("failed to resolve <%s>\n", ksr_tls_keylog_peer.s);
|
|
|
+ return -4;
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ *
|
|
|
+ */
|
|
|
+int ksr_tls_keylog_peer_send(const SSL *ssl, const char *line)
|
|
|
+{
|
|
|
+ if(!((ksr_tls_keylog_mode & KSR_TLS_KEYLOG_MODE_INIT)
|
|
|
+ && (ksr_tls_keylog_mode & KSR_TLS_KEYLOG_MODE_PEER))) {
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(ksr_tls_keylog_peer_dst.send_sock == NULL) {
|
|
|
+ ksr_tls_keylog_peer_dst.send_sock =
|
|
|
+ get_send_socket(NULL, &ksr_tls_keylog_peer_dst.to, PROTO_UDP);
|
|
|
+ if(ksr_tls_keylog_peer_dst.send_sock == NULL) {
|
|
|
+ LM_ERR("no send socket for <%s>\n", ksr_tls_keylog_peer.s);
|
|
|
+ return -2;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if(udp_send(&ksr_tls_keylog_peer_dst, (char *)line, strlen(line)) < 0) {
|
|
|
+ LM_ERR("failed to send to <%s>\n", ksr_tls_keylog_peer.s);
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+}
|