TCP rst -> TLS rst

This commit is contained in:
emanuel 2022-05-25 12:04:10 +01:00
parent 6c2781dbd1
commit 7ad01312de
3 changed files with 12 additions and 6 deletions

View File

@ -69,7 +69,7 @@ static int transport_indication(facilities_t *facilities, void* responder, void*
case TransportIndication_PR_packet: case TransportIndication_PR_packet:
break; break;
case TransportIndication_PR_data: case TransportIndication_PR_data:
transport_data_indication(facilities, &ti->choice.data); transport_data_indication(facilities, &ti->choice.data, security_socket);
goto cleanup; goto cleanup;
default: default:
syslog_debug("[facilities]<- unrecognized TI.choice received"); syslog_debug("[facilities]<- unrecognized TI.choice received");

View File

@ -4,7 +4,7 @@
#include <itss-security/SecurityRequest.h> #include <itss-security/SecurityRequest.h>
#include <itss-security/SecurityReply.h> #include <itss-security/SecurityReply.h>
static void tcp_conn_reset(facilities_t* facilities, TCPConnRSTInfo_t* cri) { static void tcp_conn_reset(facilities_t* facilities, TCPConnRSTInfo_t* cri, void* security_socket) {
if (cri->destinationAddress.size != 16) return; if (cri->destinationAddress.size != 16) return;
SecurityRequest_t* sreq = NULL; SecurityRequest_t* sreq = NULL;
@ -20,10 +20,16 @@ static void tcp_conn_reset(facilities_t* facilities, TCPConnRSTInfo_t* cri) {
sreq->choice.tlsReset.connId = tolling->tls_conn_id; sreq->choice.tlsReset.connId = tolling->tls_conn_id;
uint8_t b_s[64]; uint8_t b_s[64];
asn_enc_rval_t enc = asn_encode_to_buffer(NULL, ATS_CANONICAL_OER, &asn_DEF_SecurityRequest, sreq, b_s, 64); b_s[0] = 4;
asn_enc_rval_t enc = asn_encode_to_buffer(NULL, ATS_CANONICAL_OER, &asn_DEF_SecurityRequest, sreq, b_s+1, 63);
if (enc.encoded == -1) { if (enc.encoded == -1) {
syslog_err("[facilities] SecurityRequest.tlsReset encoding failed"); syslog_err("[facilities] SecurityRequest.tlsReset encoding failed");
} }
zmq_send(security_socket, b_s, enc.encoded+1, 0);
zmq_recv(security_socket, b_s, 64, 0);
// TODO handle SReply
} }
} }
} }
@ -32,14 +38,14 @@ static void tcp_conn_reset(facilities_t* facilities, TCPConnRSTInfo_t* cri) {
ASN_STRUCT_FREE(asn_DEF_SecurityRequest, sreq); ASN_STRUCT_FREE(asn_DEF_SecurityRequest, sreq);
} }
int transport_data_indication(facilities_t* facilities, TransportDataIndication_t* tdi) { int transport_data_indication(facilities_t* facilities, TransportDataIndication_t* tdi, void* security_socket) {
int rv = 0; int rv = 0;
switch (tdi->present) { switch (tdi->present) {
case TransportDataIndication_PR_tcp: case TransportDataIndication_PR_tcp:
switch (tdi->choice.tcp.present) { switch (tdi->choice.tcp.present) {
case TCPDataIndication_PR_connInfoReset: case TCPDataIndication_PR_connInfoReset:
tcp_conn_reset(facilities, &tdi->choice.tcp.choice.connInfoReset); tcp_conn_reset(facilities, &tdi->choice.tcp.choice.connInfoReset, security_socket);
break; break;
default: default:
rv = 1; rv = 1;

View File

@ -3,4 +3,4 @@
#include "facilities.h" #include "facilities.h"
#include <itss-transport/TransportIndication.h> #include <itss-transport/TransportIndication.h>
int transport_data_indication(facilities_t* facilities, TransportDataIndication_t* tpi); int transport_data_indication(facilities_t* facilities, TransportDataIndication_t* tpi, void* security_socket);