diff --git a/src/tpm.c b/src/tpm.c index d5d8f10..94329b2 100644 --- a/src/tpm.c +++ b/src/tpm.c @@ -140,7 +140,7 @@ int tpm_pay(void* fc, tolling_info_t* info, void* security_socket, uint8_t* neig uint8_t b_tep[1024]; asn_enc_rval_t e_tep = uper_encode_to_buffer(&asn_DEF_TPM, NULL, tolling->station.obu.entry_proof, b_tep, 1024); if (e_tep.encoded == -1) { - syslog_err("[facilities] [tolling] error encoding TPM entry proof"); + syslog_err("[facilities] [tolling] error encoding TPM entry proof (%s)", e_tep.failed_type->name); rv = 1; goto cleanup; } @@ -1026,6 +1026,17 @@ static void veh_handle_recv(tolling_t* tolling, TPM_t* tpm_rx, void* security_so buf[0] = 4; enc = oer_encode_to_buffer(&asn_DEF_TransportRequest, NULL, sreq, buf+1, buf_len-1); it2s_tender_queue_send(tx_queue, buf, enc.encoded+1, ITSS_TRANSPORT, id, "TR.data.tcp.connClose"); + + free(tlsc); + for (int i = 0; i < tolling->protocol.c.tls.n_tlsc; ++i) { + if (tlsc == tolling->protocol.c.tls.tls_conns[i]) { + for (int j = i; j < tolling->protocol.c.tls.n_tlsc-1; ++j) { + tolling->protocol.c.tls.tls_conns[j] = tolling->protocol.c.tls.tls_conns[j+1]; + } + --tolling->protocol.c.tls.n_tlsc; + break; + } + } } else { syslog_debug("[facilities] [tolling] unable to close TLS connection, not found"); } @@ -1215,7 +1226,7 @@ void tolling_tlsc_mgmt(tolling_t* tolling, it2s_tender_epv_t* epv, it2s_tender_q uint64_t now = it2s_tender_get_clock(epv); for (int i = 0; i < tolling->protocol.c.tls.n_tlsc; ++i) { tlsc_t* tlsc = tolling->protocol.c.tls.tls_conns[i]; - if (tlsc->ts + TOLLING_CONN_TIMEOUT_MS > now) { + if (tlsc->ts + TOLLING_CONN_TIMEOUT_MS < now) { SecurityRequest_t* sreq = NULL; TransportRequest_t* tr = NULL; const uint32_t buf_len = 1024;