From 811c93157d8c70bd4c7a4e7b1a2e5afe2767ed37 Mon Sep 17 00:00:00 2001 From: Amin Ben Ramdhane Date: Fri, 20 May 2022 14:14:55 +0100 Subject: [PATCH] T#7824: VoiceService PrefixInfo data model missing entries --- dmtree/tr104/common.c | 2 +- .../tr104/servicesvoiceservicecallcontrol.c | 27 ++++++++++++------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/dmtree/tr104/common.c b/dmtree/tr104/common.c index 6ef52061..148d8561 100644 --- a/dmtree/tr104/common.c +++ b/dmtree/tr104/common.c @@ -17,7 +17,7 @@ char *RegistrarServerTransport[] = {"UDP", "TCP", "TLS", "SCTP", NULL}; char *DTMFMethod[] = {"InBand", "RFC4733", "SIPInfo", NULL}; char *JitterBufferType[] = {"Static", "Dynamic", NULL}; char *KeyingMethods[] = {"Null", "Static", "SDP", "IKE", NULL}; -char *FacilityAction[] = {"", "AA_REGISTER", "AA_ERASE", "AA_INTERROGATE", "CA_ACTIVATE", "CCBS_ACTIVATE", "CCBS_DEACTIVATE", "CCBS_INTERROGATE", "CCNR_ACTIVATE", "CCNR_DEACTIVATE", "CCNR_INTERROGATE", "CFB_REGISTER", "CFB_ACTIVATE", "CFB_DEACTIVATE", "CFB_ERASE", "CFB_INTERROGATE", "CFNR_REGISTER", "CFNR_ACTIVATE", "CFNR_DEACTIVATE", "CFNR_ERASE", "CFNR_INTERROGATE", "CFNR_TIMER", "CFT_ACTIVATE", "CFT_DEACTIVATE", "CFT_INTERROGATE", "CFU_REGISTER", "CFU_ACTIVATE", "CFU_DEACTIVATE", "CFU_ERASE", "CFU_INTERROGATE", "CLIR_ACTIVATE", "CLIR_DEACTIVATE", "CLIR_INTERROGATE", "CP_INVOKE", "CW_ACTIVATE", "CW_DEACTIVATE", "CW_INVOKE", "DND_ACTIVATE", "DND_DEACTIVATE", "DND_INTERROGATE", "EXT_INVOKE", "LINE_INVOKE", "MAILBOX_INVOKE", "OCB_ACTIVATE", "OCB_DEACTIVATE", "OCB_INTERROGATE", "PSO_ACTIVATE", "PW_SET", "SCF_ACTIVATE", "SCF_DEACTIVATE", "SCF_INTERROGATE", "SCREJ_ACTIVATE", "SCREJ_DEACTIVATE", "SCREJ_INTERROGATE", "SR_ACTIVATE", "SR_DEACTIVATE", "SR_INTERROGATE", NULL}; +char *FacilityAction[] = {"AA_REGISTER", "AA_ERASE", "AA_INTERROGATE", "CA_ACTIVATE", "CCBS_ACTIVATE", "CCBS_DEACTIVATE", "CCBS_INTERROGATE", "CCNR_ACTIVATE", "CCNR_DEACTIVATE", "CCNR_INTERROGATE", "CFB_REGISTER", "CFB_ACTIVATE", "CFB_DEACTIVATE", "CFB_ERASE", "CFB_INTERROGATE", "CFNR_REGISTER", "CFNR_ACTIVATE", "CFNR_DEACTIVATE", "CFNR_ERASE", "CFNR_INTERROGATE", "CFNR_TIMER", "CFT_ACTIVATE", "CFT_DEACTIVATE", "CFT_INTERROGATE", "CFU_REGISTER", "CFU_ACTIVATE", "CFU_DEACTIVATE", "CFU_ERASE", "CFU_INTERROGATE", "CLIR_ACTIVATE", "CLIR_DEACTIVATE", "CLIR_INTERROGATE", "CP_INVOKE", "CW_ACTIVATE", "CW_DEACTIVATE", "CW_INVOKE", "DND_ACTIVATE", "DND_DEACTIVATE", "DND_INTERROGATE", "EXT_INVOKE", "LINE_INVOKE", "MAILBOX_INVOKE", "OCB_ACTIVATE", "OCB_DEACTIVATE", "OCB_INTERROGATE", "PSO_ACTIVATE", "PW_SET", "SCF_ACTIVATE", "SCF_DEACTIVATE", "SCF_INTERROGATE", "SCREJ_ACTIVATE", "SCREJ_DEACTIVATE", "SCREJ_INTERROGATE", "SR_ACTIVATE", "SR_DEACTIVATE", "SR_INTERROGATE", NULL}; struct codec_info supported_codecs[MAX_SUPPORTED_CODECS]; int codecs_num; diff --git a/dmtree/tr104/servicesvoiceservicecallcontrol.c b/dmtree/tr104/servicesvoiceservicecallcontrol.c index 0eb42ada..71fd6259 100644 --- a/dmtree/tr104/servicesvoiceservicecallcontrol.c +++ b/dmtree/tr104/servicesvoiceservicecallcontrol.c @@ -245,11 +245,6 @@ static int browseServicesVoiceServiceCallControlNumberingPlanPrefixInfo(struct d synchronize_specific_config_sections_with_dmmap("asterisk", "prefixinfo", "dmmap_asterisk", &dup_list); list_for_each_entry(p, &dup_list, list) { - char *type = NULL; - - dmuci_get_value_by_section_string(p->config_section, "facilityaction", &type); - if (dm_validate_string(type, -1, -1, FacilityAction, NULL)) - continue; inst = handle_instance(dmctx, parent_node, p->dmmap_section, "prefixinfoinstance", "prefixinfoalias"); @@ -1216,19 +1211,33 @@ static int set_ServicesVoiceServiceCallControlNumberingPlanPrefixInfo_PrefixRang /*#Device.Services.VoiceService.{i}.CallControl.NumberingPlan.{i}.PrefixInfo.{i}.FacilityAction!UCI:asterisk/prefixinfo,@i-1/facilityaction*/ static int get_ServicesVoiceServiceCallControlNumberingPlanPrefixInfo_FacilityAction(char *refparam, struct dmctx *ctx, void *data, char *instance, char **value) { - dmuci_get_value_by_section_string(((struct dmmap_dup *)data)->config_section, "facilityaction", value); + char *type = NULL; + + dmuci_get_value_by_section_string(((struct dmmap_dup *)data)->config_section, "facilityaction", &type); + if (dm_validate_string(type, -1, -1, FacilityAction, NULL)) + dmasprintf(value, "%s%s", BBF_VENDOR_PREFIX, type); + else + *value = type; + return 0; } static int set_ServicesVoiceServiceCallControlNumberingPlanPrefixInfo_FacilityAction(char *refparam, struct dmctx *ctx, void *data, char *instance, char *value, int action) { + char *p = NULL; + switch (action) { case VALUECHECK: - if (dm_validate_string(value, -1, -1, FacilityAction, NULL)) - return FAULT_9007; + if (*value == 0 || strncmp(value, BBF_VENDOR_PREFIX, strlen(BBF_VENDOR_PREFIX)) == 0) + break; + + if (dm_validate_string(value, -1, -1, FacilityAction, NULL)) + return FAULT_9007; + break; case VALUESET: - dmuci_set_value_by_section(((struct dmmap_dup *)data)->config_section, "facilityaction", value); + p = strstr(value, BBF_VENDOR_PREFIX); + dmuci_set_value_by_section(((struct dmmap_dup *)data)->config_section, "facilityaction", p ? p + strlen(BBF_VENDOR_PREFIX) : value); break; } return 0;