diff --git a/src/facilities.c b/src/facilities.c index 3ec5a84..d90f40c 100644 --- a/src/facilities.c +++ b/src/facilities.c @@ -141,6 +141,10 @@ static int facilities_request(void *responder, uint8_t *msg, uint32_t msg_len) { rv = facilities_request_chaininfo_set(responder, &fr->choice.data.choice.chainInfoSet); break; + case FacilitiesDataRequest_PR_veeInfo: + rv = facilities_request_veeinfo(responder, &fr->choice.data.choice.veeInfo); + break; + default: log_error("<- unrecognized FDR type received (%d)", fr->choice.data.present); facilities_request_result_rejected(responder); diff --git a/src/requests.c b/src/requests.c index 71da2a4..1da7377 100644 --- a/src/requests.c +++ b/src/requests.c @@ -605,6 +605,44 @@ cleanup: return rv; } +int facilities_request_veeinfo(void *responder, VEEInfo_t *vi) { + int rv = 0; + + pthread_mutex_lock(&facilities.coordination.lock); + /* + 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; + */ + pthread_mutex_unlock(&facilities.coordination.lock); + + FacilitiesReply_t *frep = calloc(1, sizeof(FacilitiesReply_t)); + frep->present = FacilitiesReply_PR_data; + frep->choice.data.present = FacilitiesDataReply_PR_veeInfo; + frep->choice.data.choice.veeInfo = FacilitiesResultCode_accepted; + + uint8_t frep_oer[64]; + asn_enc_rval_t enc = oer_encode_to_buffer(&asn_DEF_FacilitiesReply, NULL, frep, frep_oer, 64); + if (enc.encoded == -1) { + log_error("failed encoding FDResult (%s)", enc.failed_type->name); + facilities_request_result_rejected(responder); + rv = 1; + goto cleanup; + } + + itss_0send(responder, frep_oer, enc.encoded); + +cleanup: + ASN_STRUCT_FREE(asn_DEF_FacilitiesReply, frep); + + return rv; +} + int transport_indication_btp(BTPPacketIndication_t* bpi, void** security_socket) { int rv = 0; diff --git a/src/requests.h b/src/requests.h index 7fad584..729aa50 100644 --- a/src/requests.h +++ b/src/requests.h @@ -13,6 +13,7 @@ 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, ChainInformationSet_t* cis); +int facilities_request_veeinfo(void* responder, VEEInfo_t* vi); int transport_indication_data(TransportDataIndication_t* tdi); int transport_indication_btp(BTPPacketIndication_t* bpi, void** security_socket);