diff --git a/src/cam.c b/src/cam.c index f035035..66a69e0 100644 --- a/src/cam.c +++ b/src/cam.c @@ -754,10 +754,6 @@ void *ca_service(void *fc) { memcpy(fmi->data.buf, bpr->data.buf, bpr->data.size); fmi->data.size = bpr->data.size; - if (facilities->logging.dbms) { - it2s_tender_db_add(facilities->logging.dbms, &facilities->epv, true, ItsPduHeader__messageID_cam, bpr->data.buf, bpr->data.size); - } - // Check if inside PZ bpr->gn.communicationProfile = 0; if (facilities->station_type != 15 && check_pz(facilities->lightship, &facilities->epv)) bpr->gn.communicationProfile = 1; @@ -784,6 +780,14 @@ void *ca_service(void *fc) { lightship_reset_timer(facilities->lightship, &facilities->epv); + // Logging + if (facilities->logging.dbms) { + pthread_mutex_lock(&facilities->id.lock); + uint64_t station_id = facilities->id.station_id; + pthread_mutex_unlock(&facilities->id.lock); + it2s_tender_db_add(facilities->logging.dbms, station_id, bpr->id, &facilities->epv, true, ItsPduHeader__messageID_cam, NULL, bpr->data.buf, bpr->data.size); + } + if (facilities->logging.recorder) { uint16_t buffer_len = 2048; uint8_t buffer[buffer_len]; diff --git a/src/config.c b/src/config.c index 1289434..0055476 100644 --- a/src/config.c +++ b/src/config.c @@ -275,10 +275,6 @@ int facilities_config(void* facilities_s) { memcpy(facilities->id.ipv6_addr+13, src_mac+3, 3); } - facilities->logging.recorder = config->facilities.logging.management; - if (config->facilities.logging.dbms) { - facilities->logging.dbms = calloc(1, sizeof(it2s_tender_database_s)); - } // DENM facilities->den->n_max_events = config->facilities.denm.nmax_active_events; @@ -506,6 +502,25 @@ int facilities_config(void* facilities_s) { facilities->vehicle.width = config->facilities.vehicle.width; facilities->vehicle.role = config->facilities.vehicle.role; + // Logging + facilities->logging.recorder = config->facilities.logging.management; + if (config->general.logging.enabled && config->facilities.logging.dbms) { + facilities->logging.dbms = calloc(1, sizeof(it2s_tender_database_s)); + if (it2s_tender_db_init( + facilities->logging.dbms, + config->general.logging.table_style, + ITSS_FACILITIES, + config->general.logging.host, + config->general.logging.port, + config->general.logging.username, + config->general.logging.password + )) { + syslog_err("[facilities] failed to initialize the database -> turning off logging"); + free(facilities->logging.dbms); + facilities->logging.dbms = NULL; + } + } + cleanup: it2s_config_free(config); diff --git a/src/cpm.c b/src/cpm.c index 97aa546..af225db 100644 --- a/src/cpm.c +++ b/src/cpm.c @@ -714,10 +714,6 @@ void *cp_service(void *fc){ if(mk_cpm(facilities, bpr->data.buf, (uint32_t *) &bpr->data.size, fmi->data.buf, (uint32_t *) &fmi->data.size, history_list, valid_array, history_timestamp) == 1) continue; - if (facilities->logging.dbms) { - it2s_tender_db_add(facilities->logging.dbms, &facilities->epv, true, 14, bpr->data.buf, bpr->data.size); - } - uint64_t id = rand() + 1; bpr->id = id; fmi->id = id; @@ -745,6 +741,13 @@ void *cp_service(void *fc){ /*Reset Timer for dissemination control */ dissemination_reset_timer(facilities->dissemination, &facilities->epv,1); + // Logging + if (facilities->logging.dbms) { + pthread_mutex_lock(&facilities->id.lock); + uint64_t station_id = facilities->id.station_id; + pthread_mutex_unlock(&facilities->id.lock); + it2s_tender_db_add(facilities->logging.dbms, station_id, bpr->id, &facilities->epv, true, 14, NULL, bpr->data.buf, bpr->data.size); + } if (facilities->logging.recorder) { uint16_t buffer_len = 2048; uint8_t buffer[buffer_len]; diff --git a/src/facilities.c b/src/facilities.c index 2206bec..11ce159 100644 --- a/src/facilities.c +++ b/src/facilities.c @@ -74,6 +74,8 @@ static int transport_indication(facilities_t *facilities, void* responder, void* asn_TYPE_descriptor_t *its_msg_descriptor = NULL; void *its_msg = NULL; int its_msg_type = 0; + uint8_t* packet = NULL; + uint16_t packet_len = 0; switch (tpi->present) { case TransportPacketIndication_PR_btp: @@ -135,6 +137,9 @@ static int transport_indication(facilities_t *facilities, void* responder, void* goto cleanup; } + packet = tpi->choice.btp.data.buf; + packet_len = tpi->choice.btp.data.size; + dec = uper_decode_complete(NULL, its_msg_descriptor, (void**) &its_msg, tpi->choice.btp.data.buf, tpi->choice.btp.data.size); if (dec.code) { syslog_debug("[facilities]<- invalid %s received", its_msg_descriptor->name); @@ -142,10 +147,6 @@ static int transport_indication(facilities_t *facilities, void* responder, void* goto cleanup; } - if (facilities->logging.dbms) { - it2s_tender_db_add(facilities->logging.dbms, &facilities->epv, false, its_msg_type, tpi->choice.btp.data.buf, tpi->choice.btp.data.size); - } - // Get permisisons uint8_t* ssp = NULL; uint16_t ssp_len; @@ -237,6 +238,8 @@ static int transport_indication(facilities_t *facilities, void* responder, void* break; case TransportPacketIndication_PR_tcp: id = tpi->choice.tcp.id; + packet = tpi->choice.tcp.data.buf; + packet_len = tpi->choice.tcp.data.size; syslog_debug("[facilities]<- TI.packet.tcp | id:%ld size:%dB", id, msg_len); sreq = calloc(1, sizeof(SecurityRequest_t)); @@ -338,7 +341,13 @@ static int transport_indication(facilities_t *facilities, void* responder, void* it2s_tender_queue_send(facilities->tx_queue, buffer, enc.encoded+1, ITSS_APPLICATIONS, id, "FI.message"); } - // Logging + // Logging + if (facilities->logging.dbms) { + pthread_mutex_lock(&facilities->id.lock); + uint64_t station_id = facilities->id.station_id; + pthread_mutex_unlock(&facilities->id.lock); + it2s_tender_db_add(facilities->logging.dbms, station_id, id, &facilities->epv, false, its_msg_type, NULL, packet, packet_len); + } if (facilities->logging.recorder) { int e = it2s_tender_management_record_packet_sdu( buf, @@ -759,13 +768,6 @@ int main() { if (facilities.coordination.active) pthread_create(&facilities.pc_service, NULL, pc_service, (void*) &facilities); - if (facilities.logging.dbms) { - if (it2s_tender_db_init(facilities.logging.dbms, "facilities", facilities.id.station_id)) { - syslog_err("[facilities] failed to initialize the database -> turning off logging"); - free(facilities.logging.dbms); - facilities.logging.dbms = NULL; - } - } void* security_socket = zmq_socket(facilities.zmq.ctx, ZMQ_REQ); int wait_ms = 1000; diff --git a/src/saem.c b/src/saem.c index 88bb005..ee52fae 100644 --- a/src/saem.c +++ b/src/saem.c @@ -322,10 +322,6 @@ void *sa_service(void *fc) { rv = mk_saem(facilities, bpr->data.buf, (uint32_t *) &bpr->data.size); if (!rv) { - if (facilities->logging.dbms) { - it2s_tender_db_add(facilities->logging.dbms, &facilities->epv, true, messageID_saem, bpr->data.buf, bpr->data.size); - } - bpr->id = rand() + 1; asn_enc_rval_t enc = oer_encode_to_buffer(&asn_DEF_TransportRequest, NULL, tr, tr_oer+1, 1023); @@ -334,6 +330,13 @@ void *sa_service(void *fc) { continue; } else { it2s_tender_queue_send(facilities->tx_queue, tr_oer, enc.encoded+1, ITSS_TRANSPORT, bpr->id, "TR.packet.btp"); + // Logging + if (facilities->logging.dbms) { + pthread_mutex_lock(&facilities->id.lock); + uint64_t station_id = facilities->id.station_id; + pthread_mutex_unlock(&facilities->id.lock); + it2s_tender_db_add(facilities->logging.dbms, station_id, bpr->id, &facilities->epv, true, messageID_saem, NULL, bpr->data.buf, bpr->data.size); + } if (facilities->logging.recorder) { uint16_t buffer_len = 2048; uint8_t buffer[buffer_len]; diff --git a/src/tpm.c b/src/tpm.c index 5ef44ff..e701b9c 100644 --- a/src/tpm.c +++ b/src/tpm.c @@ -158,10 +158,6 @@ int tpm_pay(void* fc, uint8_t* neighbour) { bpr->gn.trafficClass = 2; bpr->gn.packetTransportType = PacketTransportType_shb; - if (facilities->logging.dbms) { - it2s_tender_db_add(facilities->logging.dbms, &facilities->epv, true, 117, bpr->data.buf, bpr->data.size); - } - // encode TR buf[0] = 4; enc = oer_encode_to_buffer(&asn_DEF_TransportRequest, NULL, tr, buf+1, buf_len-1); @@ -173,6 +169,13 @@ int tpm_pay(void* fc, uint8_t* neighbour) { it2s_tender_queue_send(facilities->tx_queue, buf, enc.encoded+1, ITSS_TRANSPORT, bpr->id, "TR.packet.btp"); + // Logging + if (facilities->logging.dbms) { + pthread_mutex_lock(&facilities->id.lock); + uint64_t station_id = facilities->id.station_id; + pthread_mutex_unlock(&facilities->id.lock); + it2s_tender_db_add(facilities->logging.dbms, station_id, bpr->id, &facilities->epv, true, 117, NULL, bpr->data.buf, bpr->data.size); + } if (facilities->logging.recorder) { uint16_t buffer_len = 2048; uint8_t buffer[buffer_len]; @@ -376,10 +379,6 @@ static void rsu_handle_recv(facilities_t* facilities, TPM_t* tpm_rx, uint8_t* ne memcpy(bpr->gn.securityNeighbour->buf, neighbour, 8); } - if (facilities->logging.dbms) { - it2s_tender_db_add(facilities->logging.dbms, &facilities->epv, true, 117, bpr->data.buf, bpr->data.size); - } - // encode TR buf[0] = 4; enc = oer_encode_to_buffer(&asn_DEF_TransportRequest, NULL, tr, buf+1, buf_len-1); @@ -390,6 +389,13 @@ static void rsu_handle_recv(facilities_t* facilities, TPM_t* tpm_rx, uint8_t* ne it2s_tender_queue_send(facilities->tx_queue, buf, enc.encoded+1, ITSS_TRANSPORT, bpr->id, "TR.packet.btp"); + // Logging + if (facilities->logging.dbms) { + pthread_mutex_lock(&facilities->id.lock); + uint64_t station_id = facilities->id.station_id; + pthread_mutex_unlock(&facilities->id.lock); + it2s_tender_db_add(facilities->logging.dbms, station_id, bpr->id, &facilities->epv, true, 117, NULL, bpr->data.buf, bpr->data.size); + } if (facilities->logging.recorder) { uint16_t buffer_len = 2048; uint8_t buffer[buffer_len];