VCM: multi-hash select
This commit is contained in:
parent
da8b2a90bb
commit
f1efa6523b
|
|
@ -553,12 +553,19 @@ cleanup:
|
||||||
return rv;
|
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;
|
int rv = 0;
|
||||||
|
|
||||||
pthread_mutex_lock(&facilities.coordination.lock);
|
pthread_mutex_lock(&facilities.coordination.lock);
|
||||||
facilities.coordination.chain.id = cis->id;
|
facilities.coordination.chain.id = cis->idSet;
|
||||||
memcpy(facilities.coordination.chain.link, cis->link.buf, cis->link.size);
|
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
|
// TODO region
|
||||||
pthread_mutex_unlock(&facilities.coordination.lock);
|
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_active_episodes(void* responder, FacilitiesRequest_t* fr);
|
||||||
int facilities_request_attribute_types(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_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);
|
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->id = coordination->chain.id;
|
||||||
vcm_rep->vcm.chain->link.buf = malloc(32);
|
vcm_rep->vcm.chain->link.buf = malloc(32);
|
||||||
vcm_rep->vcm.chain->link.size = 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 = calloc(1, sizeof(struct area));
|
||||||
vcm->vcm.chain->area->list.count = 1;
|
vcm->vcm.chain->area->list.count = 1;
|
||||||
vcm->vcm.chain->area->list.size = 1 * sizeof(OCTET_STRING_t*);
|
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;
|
vcm_rep->vcm.currentPosition.longitude = lon;
|
||||||
asn_ulong2INTEGER(&vcm_rep->vcm.currentPosition.timestamp, now);
|
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 = calloc(1, sizeof(ChainInformation_t));
|
||||||
vcm_rep->vcm.chain->id = coordination->chain.id;
|
vcm_rep->vcm.chain->id = coordination->chain.id;
|
||||||
vcm_rep->vcm.chain->link.buf = malloc(32);
|
vcm_rep->vcm.chain->link.buf = malloc(32);
|
||||||
vcm_rep->vcm.chain->link.size = 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 = calloc(1, sizeof(struct area));
|
||||||
vcm->vcm.chain->area->list.count = 1;
|
vcm->vcm.chain->area->list.count = 1;
|
||||||
vcm->vcm.chain->area->list.size = 1 * sizeof(OCTET_STRING_t*);
|
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->id = coordination->chain.id;
|
||||||
vcm_req->vcm.chain->link.buf = malloc(32);
|
vcm_req->vcm.chain->link.buf = malloc(32);
|
||||||
vcm_req->vcm.chain->link.size = 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 = calloc(1, sizeof(struct area));
|
||||||
vcm->vcm.chain->area->list.count = 1;
|
vcm->vcm.chain->area->list.count = 1;
|
||||||
vcm->vcm.chain->area->list.size = 1 * sizeof(OCTET_STRING_t*);
|
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->id = coordination->chain.id;
|
||||||
vcm->vcm.chain->link.buf = malloc(32);
|
vcm->vcm.chain->link.buf = malloc(32);
|
||||||
vcm->vcm.chain->link.size = 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 = calloc(1, sizeof(struct area));
|
||||||
vcm->vcm.chain->area->list.count = 1;
|
vcm->vcm.chain->area->list.count = 1;
|
||||||
vcm->vcm.chain->area->list.size = 1 * sizeof(OCTET_STRING_t*);
|
vcm->vcm.chain->area->list.size = 1 * sizeof(OCTET_STRING_t*);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue