diff --git a/src/facilities.c b/src/facilities.c index 7eb2ade..bf29970 100644 --- a/src/facilities.c +++ b/src/facilities.c @@ -225,7 +225,7 @@ static int transport_indication(facilities_t *facilities, void* responder, void* break; case 7011: - if (facilities->tolling.active) { + if (facilities->tolling.enabled) { tpm_recv(facilities, its_msg, security_socket, neighbour_cert, NULL, 0); } break; @@ -274,6 +274,8 @@ static int transport_indication(facilities_t *facilities, void* responder, void* goto cleanup; } + syslog_err("initializing? %s", srep->data->choice.tlsRecv.initializing ? "yes" : "no"); + // Forward to [transport] if (srep->data->choice.tlsRecv.initializing) { tr = calloc(1, sizeof(TransportRequest_t)); @@ -309,11 +311,14 @@ static int transport_indication(facilities_t *facilities, void* responder, void* it2s_tender_queue_send(facilities->tx_queue, buf, enc.encoded+1, ITSS_TRANSPORT, id, "TR.packet.tcp"); } else { - if (facilities->tolling.active) { - dec = uper_decode_complete(NULL, &asn_DEF_TPM, (void**) &its_msg, tpi->choice.tcp.data.buf, tpi->choice.tcp.data.size); + syslog_err("tolling enabled? %s", facilities->tolling.active ? "yes" : "no"); + if (facilities->tolling.enabled) { + + dec = uper_decode_complete(NULL, &asn_DEF_TPM, (void**) &its_msg, srep->data->choice.tlsRecv.data.buf, srep->data->choice.tlsRecv.data.size); + syslog_err("tpm decode: %d", dec.code); if (dec.code) { - syslog_debug("[facilities]<- invalid %s received", its_msg_descriptor->name); + syslog_debug("[facilities]<- invalid TPM received"); rv = 1; goto cleanup; } diff --git a/src/tpm.c b/src/tpm.c index b5d18c2..a51c1cc 100644 --- a/src/tpm.c +++ b/src/tpm.c @@ -168,6 +168,7 @@ int tpm_pay(void* fc, tolling_info_s* info, void* security_socket, uint8_t* neig bpr->gn.destinationAddress.size = 6; bpr->gn.trafficClass = 2; bpr->gn.packetTransportType = PacketTransportType_shb; + break; case TOLLING_PROTOCOL_TLS: sreq = calloc(1, sizeof(SecurityRequest_t)); sreq->present = SecurityRequest_PR_tlsSend; @@ -277,13 +278,23 @@ static void rsu_handle_recv(facilities_t* facilities, TPM_t* tpm_rx, void* secur TollRequest_t* req = &tpm_rx->tpm.tollingFlow.choice.request; tolling_s* tolling = &facilities->tolling; - syslog_info("[facilities] [tolling] received toll payment > client: %ld (certificate id: %02x%02x%02x) | nonce: %ld", + switch (tolling->protocol) { + case TOLLING_PROTOCOL_SIMPLE: + syslog_info("[facilities] [tolling] received toll payment > client: %ld (certificate id: %02x%02x%02x) | nonce: %ld", req->clientId, neighbour ? neighbour[5] : 0, neighbour ? neighbour[6] : 0, neighbour ? neighbour[7] : 0, req->transactionNonce ); + break; + case TOLLING_PROTOCOL_TLS: + syslog_info("[facilities] [tolling] received toll payment > client: %ld | nonce: %ld", + req->clientId, + req->transactionNonce + ); + break; + } const size_t buf_len = 2048; uint8_t buf[buf_len]; @@ -433,11 +444,12 @@ static void rsu_handle_recv(facilities_t* facilities, TPM_t* tpm_rx, void* secur uint64_t id = 0; + tr = calloc(1, sizeof(TransportRequest_t)); + tr->present = TransportRequest_PR_packet; + // [transport] request (TR) switch (tolling->protocol) { case TOLLING_PROTOCOL_SIMPLE: - tr = calloc(1, sizeof(TransportRequest_t)); - tr->present = TransportRequest_PR_packet; tr->choice.packet.present = TransportPacketRequest_PR_btp; BTPPacketRequest_t* bpr = &tr->choice.packet.choice.btp; @@ -488,7 +500,6 @@ static void rsu_handle_recv(facilities_t* facilities, TPM_t* tpm_rx, void* secur } syslog_debug("[facilities] [tolling]<- SecurityReply.tlsSend <-[security]"); - SecurityReply_t* srep = NULL; asn_dec_rval_t dec = oer_decode(NULL, &asn_DEF_SecurityReply, (void**) &srep, buf, buf_len); if (dec.code ||