VCM: multi-hash select
This commit is contained in:
parent
da8b2a90bb
commit
f1efa6523b
|
|
@ -553,12 +553,19 @@ cleanup:
|
|||
return rv;
|
||||
}
|
||||
|
||||
int facilities_request_chaininfo_set(void* responder, ChainInformation_t* cis) {
|
||||
int facilities_request_chaininfo_set(void* responder, ChainInformationSet_t* cis) {
|
||||
int rv = 0;
|
||||
|
||||
pthread_mutex_lock(&facilities.coordination.lock);
|
||||
facilities.coordination.chain.id = cis->id;
|
||||
memcpy(facilities.coordination.chain.link, cis->link.buf, cis->link.size);
|
||||
facilities.coordination.chain.id = cis->idSet;
|
||||
for (int i = 0; i < cis->linkSet.list.count; ++i) {
|
||||
memcpy(
|
||||
facilities.coordination.chain.links[i],
|
||||
cis->linkSet.list.array[i]->buf,
|
||||
cis->linkSet.list.array[i]->size
|
||||
);
|
||||
}
|
||||
facilities.coordination.chain.n_links = cis->linkSet.list.count;
|
||||
// TODO region
|
||||
pthread_mutex_unlock(&facilities.coordination.lock);
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ int facilities_request_single_message(void* responder, FacilitiesMessageRequest_
|
|||
int facilities_request_active_episodes(void* responder, FacilitiesRequest_t* fr);
|
||||
int facilities_request_attribute_types(void* responder, FacilitiesRequest_t* fr);
|
||||
int facilities_request_loaded_protected_zones(void* responder, FacilitiesRequest_t* fr);
|
||||
int facilities_request_chaininfo_set(void* responder, ChainInformation_t* cis);
|
||||
int facilities_request_chaininfo_set(void* responder, ChainInformationSet_t* cis);
|
||||
|
||||
int transport_indication_data(TransportDataIndication_t* tdi);
|
||||
|
||||
|
|
|
|||
19
src/vcm.c
19
src/vcm.c
|
|
@ -87,7 +87,7 @@ static void vcm_reject(VCM_t* vcm, mc_neighbour_s* neighbour) {
|
|||
vcm_rep->vcm.chain->id = coordination->chain.id;
|
||||
vcm_rep->vcm.chain->link.buf = malloc(32);
|
||||
vcm_rep->vcm.chain->link.size = 32;
|
||||
memcpy(vcm_rep->vcm.chain->link.buf, coordination->chain.link, 32);
|
||||
memcpy(vcm_rep->vcm.chain->link.buf, coordination->chain.links[0], 32);
|
||||
vcm->vcm.chain->area = calloc(1, sizeof(struct area));
|
||||
vcm->vcm.chain->area->list.count = 1;
|
||||
vcm->vcm.chain->area->list.size = 1 * sizeof(OCTET_STRING_t*);
|
||||
|
|
@ -325,12 +325,21 @@ static int vcm_check_handle_request(VCM_t* vcm, mc_neighbour_s* neighbour) {
|
|||
vcm_rep->vcm.currentPosition.longitude = lon;
|
||||
asn_ulong2INTEGER(&vcm_rep->vcm.currentPosition.timestamp, now);
|
||||
|
||||
if (coordination->chain.id) {
|
||||
if (coordination->chain.id && vcm->vcm.chain) {
|
||||
vcm_rep->vcm.chain = calloc(1, sizeof(ChainInformation_t));
|
||||
vcm_rep->vcm.chain->id = coordination->chain.id;
|
||||
vcm_rep->vcm.chain->link.buf = malloc(32);
|
||||
vcm_rep->vcm.chain->link.size = 32;
|
||||
memcpy(vcm_rep->vcm.chain->link.buf, coordination->chain.link, 32);
|
||||
|
||||
int to_link = 0;
|
||||
for (int i = 0; i < coordination->chain.n_links; ++i) {
|
||||
if (memcmp(coordination->chain.links[i], vcm->vcm.chain->link.buf, 32)) {
|
||||
to_link = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
memcpy(vcm_rep->vcm.chain->link.buf, coordination->chain.links[to_link], 32);
|
||||
|
||||
vcm->vcm.chain->area = calloc(1, sizeof(struct area));
|
||||
vcm->vcm.chain->area->list.count = 1;
|
||||
vcm->vcm.chain->area->list.size = 1 * sizeof(OCTET_STRING_t*);
|
||||
|
|
@ -602,7 +611,7 @@ static int intersection_detected(VCM_t* vcm, mc_neighbour_s* neighbour) {
|
|||
vcm_req->vcm.chain->id = coordination->chain.id;
|
||||
vcm_req->vcm.chain->link.buf = malloc(32);
|
||||
vcm_req->vcm.chain->link.size = 32;
|
||||
memcpy(vcm_req->vcm.chain->link.buf, coordination->chain.link, 32);
|
||||
memcpy(vcm_req->vcm.chain->link.buf, coordination->chain.links[0], 32);
|
||||
vcm->vcm.chain->area = calloc(1, sizeof(struct area));
|
||||
vcm->vcm.chain->area->list.count = 1;
|
||||
vcm->vcm.chain->area->list.size = 1 * sizeof(OCTET_STRING_t*);
|
||||
|
|
@ -976,7 +985,7 @@ static int mk_vcm(uint8_t* vcm_uper, uint16_t* vcm_uper_len) {
|
|||
vcm->vcm.chain->id = coordination->chain.id;
|
||||
vcm->vcm.chain->link.buf = malloc(32);
|
||||
vcm->vcm.chain->link.size = 32;
|
||||
memcpy(vcm->vcm.chain->link.buf, coordination->chain.link, 32);
|
||||
memcpy(vcm->vcm.chain->link.buf, coordination->chain.links[0], 32);
|
||||
vcm->vcm.chain->area = calloc(1, sizeof(struct area));
|
||||
vcm->vcm.chain->area->list.count = 1;
|
||||
vcm->vcm.chain->area->list.size = 1 * sizeof(OCTET_STRING_t*);
|
||||
|
|
|
|||
Loading…
Reference in New Issue