Skip to content

Commit

Permalink
fix(cid): co's address missing prefix and inst
Browse files Browse the repository at this point in the history
  • Loading branch information
gc87 committed Nov 11, 2024
1 parent a8ba929 commit 08eea75
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 14 deletions.
4 changes: 3 additions & 1 deletion include/neuron/define.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,11 +64,13 @@

#define NEU_CID_LNCLASS_LEN 12
#define NEU_CID_LNTYPE_LEN 32
#define NEU_CID_LNPREFIX_LEN 10
#define NEU_CID_LNINST_LEN 2
#define NEU_CID_IED_NAME_LEN 32
#define NEU_CID_LDEVICE_LEN 32
#define NEU_CID_LNO_NAME_LEN 32
#define NEU_CID_LNO_TYPE_LEN 32
#define NEU_CID_INST_LEN 32
#define NEU_CID_INST_LEN 16
#define NEU_CID_SDI_NAME_LEN 16
#define NEU_CID_DO_NAME_LEN 32
#define NEU_CID_DO_ID_LEN 32
Expand Down
2 changes: 2 additions & 0 deletions include/neuron/utils/cid.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ typedef struct {
typedef struct {
char lnclass[NEU_CID_LNCLASS_LEN];
char lntype[NEU_CID_LNTYPE_LEN];
char lnprefix[NEU_CID_LNPREFIX_LEN];
char lninst[NEU_CID_LNINST_LEN];

cid_dataset_t *datasets;
int n_datasets;
Expand Down
10 changes: 5 additions & 5 deletions src/adapter/driver/driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ static void read_group_paginate(int64_t timestamp, int64_t timeout,
neu_tag_cache_type_e cache_type,
neu_driver_cache_t *cache, const char *group,
UT_array *tags, UT_array *tag_values);
static void read_report_group(bool sub, int64_t timestamp, int64_t timeout,
static void read_report_group(int64_t timestamp, int64_t timeout,
neu_tag_cache_type_e cache_type,
neu_driver_cache_t *cache, const char *group,
UT_array *tags, UT_array *tag_values);
Expand Down Expand Up @@ -328,7 +328,7 @@ static void update_im(neu_adapter_t *adapter, const char *group,
data->group = strdup(group);
utarray_new(data->tags, neu_resp_tag_value_meta_icd());

read_report_group(true,global_timestamp, 0,
read_report_group(global_timestamp, 0,
neu_adapter_get_tag_cache_type(&driver->adapter),
driver->cache, group, tags, data->tags);

Expand Down Expand Up @@ -2106,7 +2106,7 @@ static int report_callback(void *usr_data)
}
}

read_report_group(false, global_timestamp,
read_report_group(global_timestamp,
neu_group_get_interval(group->group) *
NEU_DRIVER_TAG_CACHE_EXPIRE_TIME,
neu_adapter_get_tag_cache_type(&group->driver->adapter),
Expand Down Expand Up @@ -2348,7 +2348,7 @@ static int read_callback(void *usr_data)
return 0;
}

static void read_report_group(bool sub, int64_t timestamp, int64_t timeout,
static void read_report_group(int64_t timestamp, int64_t timeout,
neu_tag_cache_type_e cache_type,
neu_driver_cache_t *cache, const char *group,
UT_array *tags, UT_array *tag_values)
Expand All @@ -2358,7 +2358,7 @@ static void read_report_group(bool sub, int64_t timestamp, int64_t timeout,
neu_driver_cache_value_t value = { 0 };
neu_resp_tag_value_meta_t tag_value = { 0 };

if (sub && neu_tag_attribute_test(tag, NEU_ATTRIBUTE_SUBSCRIBE)) {
if (neu_tag_attribute_test(tag, NEU_ATTRIBUTE_SUBSCRIBE)) {
if (neu_driver_cache_meta_get_changed(cache, group, tag->name,
&value, tag_value.metas,
NEU_TAG_META_SIZE) != 0) {
Expand Down
8 changes: 4 additions & 4 deletions src/parser/neu_json_rw.c
Original file line number Diff line number Diff line change
Expand Up @@ -166,12 +166,12 @@ int neu_json_encode_read_paginate_resp(void *json_object, void *param)
neu_json_encode_field(attributes_object, &meta_elem, 1);
}

tag_elems[if_precision + 9].name = "attributes";
tag_elems[if_precision + 9].t = NEU_JSON_OBJECT;
tag_elems[if_precision + 9].name = "attributes";
tag_elems[if_precision + 9].t = NEU_JSON_OBJECT;
tag_elems[if_precision + 9].v.val_object = attributes_object;

tag_array = neu_json_encode_array(tag_array, tag_elems,
10 + if_precision);
tag_array =
neu_json_encode_array(tag_array, tag_elems, 10 + if_precision);

free(p_tag->datatag.name);
free(p_tag->datatag.address);
Expand Down
31 changes: 27 additions & 4 deletions src/utils/cid.c
Original file line number Diff line number Diff line change
Expand Up @@ -181,9 +181,11 @@ void neu_cid_to_msg(char *driver, cid_t *cid, neu_req_add_gtag_t *cmd)
tag->address = calloc(1, NEU_TAG_ADDRESS_LEN);
tag->description = strdup("");
snprintf(tag->address, NEU_TAG_ADDRESS_LEN - 1,
"%s%s/%s$%s$%s$%s", cid->ied.name,
"%s%s/%s%s%s$%s$%s$%s", cid->ied.name,
cid->ied.ldevices[i].inst,
cid->ied.ldevices[i].lns[j].lnclass, "CO",
cid->ied.ldevices[i].lns[j].lnprefix,
cid->ied.ldevices[i].lns[j].lnclass,
cid->ied.ldevices[i].lns[j].lninst, "CO",
cid->ied.ldevices[i].lns[j].ctrls[k].do_name,
cid->ied.ldevices[i].lns[j].ctrls[k].sdi_name);
}
Expand Down Expand Up @@ -391,11 +393,28 @@ static int parse_lnode(xmlNode *xml_ldevice, cid_ldevice_t *ldev,
(char *) xmlGetProp(lnode, (const xmlChar *) "lnClass");
char *ln_type =
(char *) xmlGetProp(lnode, (const xmlChar *) "lnType");
char *ln_prefix =
(char *) xmlGetProp(lnode, (const xmlChar *) "prefix");
if (NULL == ln_prefix) {
ln_prefix = strdup("");
}

char *ln_inst =
(char *) xmlGetProp(lnode, (const xmlChar *) "inst");
if (NULL == ln_inst) {
ln_inst = strdup("");
}

if (strlen(ln_class) >= NEU_CID_LNCLASS_LEN ||
strlen(ln_type) >= NEU_CID_LNTYPE_LEN) {
strlen(ln_type) >= NEU_CID_LNTYPE_LEN ||
strlen(ln_prefix) >= NEU_CID_LNPREFIX_LEN ||
strlen(ln_inst) >= NEU_CID_LNINST_LEN) {
xmlFree(ln_class);
xmlFree(ln_type);
nlog_warn("LN class/type is too long %d", (int) lnode->line);
xmlFree(ln_prefix);
xmlFree(ln_inst);
nlog_warn("LN class/type/prefix/inst is too long %d",
(int) lnode->line);
return -1;
} else {
ldev->n_lns += 1;
Expand All @@ -412,8 +431,12 @@ static int parse_lnode(xmlNode *xml_ldevice, cid_ldevice_t *ldev,

strcpy(ln->lnclass, ln_class);
strcpy(ln->lntype, ln_type);
strcpy(ln->lnprefix, ln_prefix);
strcpy(ln->lninst, ln_inst);
xmlFree(ln_class);
xmlFree(ln_type);
xmlFree(ln_prefix);
xmlFree(ln_inst);

xmlNode *child = lnode->children;
while (child != NULL) {
Expand Down

0 comments on commit 08eea75

Please sign in to comment.