diff --git a/src/config.c b/src/config.c index 66dc69d..a1d27fe 100644 --- a/src/config.c +++ b/src/config.c @@ -1,6 +1,7 @@ #include "config.h" #include "facilities.h" #include "tpm.h" +#include "vcm.h" #include #include @@ -353,8 +354,15 @@ int facilities_config() { } facilities.tolling.station.obu.client_id = config->facilities.tpm.client_id; - // VCM + // MCM facilities.coordination.active = config->facilities.mcm.activate; + if (!strcmp("vcm-reqrep", config->facilities.mcm.protocol)) { + facilities.coordination.protocol = MC_PROTOCOL_REQ_REP; + } else if (!strcmp("vcm-reqrepcom", config->facilities.mcm.protocol)) { + facilities.coordination.protocol = MC_PROTOCOL_REQ_REP_COM; + } else { + facilities.coordination.protocol = MC_PROTOCOL_REQ_REP; + } facilities.coordination.vcm_period_min = config->facilities.mcm.period_min; facilities.coordination.vcm_period_max = config->facilities.mcm.period_max; diff --git a/src/vcm.c b/src/vcm.c index 17b12b3..a238961 100644 --- a/src/vcm.c +++ b/src/vcm.c @@ -172,7 +172,7 @@ static void vcm_reject(VCM_t* vcm, mc_neighbour_s* neighbour) { vcm->vcm.chain->area->trees.list.array = malloc(1 * sizeof(OCTET_STRING_t*)); for (int q = 0; q < 1; ++q) { vcm->vcm.chain->area->trees.list.array[q] = calloc(1, sizeof(OCTET_STRING_t)); - vcm->vcm.chain->area->trees.list.array[q]->buf = malloc(4); + vcm->vcm.chain->area->trees.list.array[q]->buf = calloc(1,4); vcm->vcm.chain->area->trees.list.array[q]->size = 4; } } @@ -325,6 +325,7 @@ static int vcm_check_handle_request(VCM_t* vcm, mc_neighbour_s* neighbour) { neighbour->proposed = true; neighbour->session.requested = true; neighbour->session.nonce = request->nonce; + neighbour->station_id = vcm->header.stationID; coordination->session.requester = neighbour; vcm_rep = calloc(1, sizeof(VCM_t)); @@ -358,7 +359,7 @@ static int vcm_check_handle_request(VCM_t* vcm, mc_neighbour_s* neighbour) { vcm_rep->vcm.chain->area->trees.list.array = malloc(1 * sizeof(OCTET_STRING_t*)); for (int q = 0; q < 1; ++q) { vcm_rep->vcm.chain->area->trees.list.array[q] = calloc(1, sizeof(OCTET_STRING_t)); - vcm_rep->vcm.chain->area->trees.list.array[q]->buf = malloc(4); + vcm_rep->vcm.chain->area->trees.list.array[q]->buf = calloc(1,4); vcm_rep->vcm.chain->area->trees.list.array[q]->size = 4; } } @@ -578,10 +579,11 @@ static int vcm_check_handle_reply(VCM_t* vcm, mc_neighbour_s* neighbour) { mvc->negotiation = calloc(1, sizeof(CoordinationNegotiation_t)); mvc->negotiation->present = CoordinationNegotiation_PR_commit; mvc->negotiation->choice.commit.nonce = coordination->session.nonce; - mvc->negotiation->choice.commit.requesterId = coordination->session.requester->station_id; + mvc->negotiation->choice.commit.requesterId = reply->requesterId; tx_vcm(vcm_com); - ASN_STRUCT_FREE(asn_DEF_VCM, vcm); + ASN_STRUCT_FREE(asn_DEF_VCM, vcm_com); + log_warn("SENDING COMMIT"); } @@ -649,7 +651,7 @@ static int intersection_detected(VCM_t* vcm, mc_neighbour_s* neighbour) { vcm->vcm.chain->area->trees.list.array = malloc(1 * sizeof(OCTET_STRING_t*)); for (int q = 0; q < 1; ++q) { vcm->vcm.chain->area->trees.list.array[q] = calloc(1, sizeof(OCTET_STRING_t)); - vcm->vcm.chain->area->trees.list.array[q]->buf = malloc(4); + vcm->vcm.chain->area->trees.list.array[q]->buf = calloc(1,4); vcm->vcm.chain->area->trees.list.array[q]->size = 4; } } @@ -959,7 +961,7 @@ static int mk_vcm() { vcm->vcm.chain->area->trees.list.array = malloc(1 * sizeof(OCTET_STRING_t*)); for (int q = 0; q < 1; ++q) { vcm->vcm.chain->area->trees.list.array[q] = calloc(1, sizeof(OCTET_STRING_t)); - vcm->vcm.chain->area->trees.list.array[q]->buf = malloc(4); + vcm->vcm.chain->area->trees.list.array[q]->buf = calloc(1,4); vcm->vcm.chain->area->trees.list.array[q]->size = 4; } }