mirror of
https://github.com/emqx/neuron.git
synced 2026-10-28 22:59:34 +08:00
@@ -305,5 +305,6 @@ int is_ipv6(const char *ip);
|
||||
|
||||
bool neu_conn_is_connected(neu_conn_t *conn);
|
||||
uint16_t neu_conn_udp_act_port(neu_conn_t *conn);
|
||||
bool conn_tcp_server_is_listen(neu_conn_t *conn);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -52,6 +52,10 @@ int modbus_tag_to_point(const neu_datatag_t *tag, modbus_point_t *point,
|
||||
return NEU_ERR_TAG_ADDRESS_FORMAT_INVALID;
|
||||
}
|
||||
|
||||
if (start_address > 65536) {
|
||||
return NEU_ERR_TAG_ADDRESS_FORMAT_INVALID;
|
||||
}
|
||||
|
||||
if (start_address == 65536 && address_base == 0) {
|
||||
point->start_address = 65535;
|
||||
} else if (start_address == 0 && address_base == 1) {
|
||||
|
||||
@@ -1712,12 +1712,17 @@ static int get_app_subscriptions_resp(context_t * ctx,
|
||||
grps[index].driver = strdup(group->driver);
|
||||
grps[index].group = strdup(group->group);
|
||||
grps[index].params = group->params ? strdup(group->params) : NULL;
|
||||
grps[index].static_tags =
|
||||
group->static_tags ? strdup(group->static_tags) : NULL;
|
||||
|
||||
if (NULL == grps[index].driver || NULL == grps[index].group) {
|
||||
for (int j = 0; j <= index; ++j) {
|
||||
free(grps[j].driver);
|
||||
free(grps[j].group);
|
||||
free(grps[j].params);
|
||||
if (grps[j].static_tags) {
|
||||
free(grps[j].static_tags);
|
||||
}
|
||||
}
|
||||
free(grps);
|
||||
rv = NEU_ERR_EINTERNAL;
|
||||
@@ -1817,8 +1822,10 @@ static int add_app_subscription(context_t *ctx, neu_json_app_t *app,
|
||||
strcpy(cmd.app, app->node.name);
|
||||
strcpy(cmd.driver, grp->driver);
|
||||
strcpy(cmd.group, grp->group);
|
||||
cmd.params = grp->params;
|
||||
grp->params = NULL;
|
||||
cmd.params = grp->params;
|
||||
cmd.static_tags = grp->static_tags;
|
||||
grp->params = NULL;
|
||||
grp->static_tags = NULL;
|
||||
|
||||
if (0 != neu_plugin_op(plugin, header, &cmd)) {
|
||||
return NEU_ERR_IS_BUSY;
|
||||
|
||||
@@ -90,6 +90,7 @@ static void sig_handler(int sig)
|
||||
for (uint32_t i = 0; i < sizeof(c_events) / sizeof(struct client_event);
|
||||
i++) {
|
||||
if (c_events[i].fd > 0) {
|
||||
close(c_events[i].fd);
|
||||
neu_event_del_io(events, c_events[i].client);
|
||||
}
|
||||
}
|
||||
@@ -149,6 +150,11 @@ int main(int argc, char *argv[])
|
||||
|
||||
events = neu_event_new("modbus_simulator");
|
||||
conn = neu_conn_new(¶m, NULL, connected, disconnected);
|
||||
while (conn_tcp_server_is_listen(conn) == false) {
|
||||
neu_msleep(1000);
|
||||
neu_conn_destory(conn);
|
||||
conn = neu_conn_new(¶m, NULL, connected, disconnected);
|
||||
}
|
||||
|
||||
signal(SIGINT, sig_handler);
|
||||
signal(SIGTERM, sig_handler);
|
||||
|
||||
@@ -732,6 +732,11 @@ static void conn_init_param(neu_conn_t *conn, neu_conn_param_t *param)
|
||||
}
|
||||
}
|
||||
|
||||
bool conn_tcp_server_is_listen(neu_conn_t *conn)
|
||||
{
|
||||
return conn->tcp_server.is_listen;
|
||||
}
|
||||
|
||||
static void conn_tcp_server_listen(neu_conn_t *conn)
|
||||
{
|
||||
if (conn->param.type == NEU_CONN_TCP_SERVER &&
|
||||
|
||||
@@ -589,6 +589,9 @@ static void fini_app_group(neu_json_app_group_t *grp)
|
||||
free(grp->driver);
|
||||
free(grp->group);
|
||||
free(grp->params);
|
||||
if (grp->static_tags) {
|
||||
free(grp->static_tags);
|
||||
}
|
||||
}
|
||||
|
||||
int neu_json_encode_app(void *node_json, void *param)
|
||||
@@ -644,6 +647,15 @@ int neu_json_encode_app(void *node_json, void *param)
|
||||
}
|
||||
}
|
||||
|
||||
if (grp->static_tags && strlen(grp->static_tags) > 0) {
|
||||
if (0 !=
|
||||
neu_json_load_key(grp_json, "static_tags", grp->static_tags,
|
||||
false)) {
|
||||
json_decref(grp_json);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (0 != json_array_append_new(groups_json, grp_json)) {
|
||||
return -1;
|
||||
}
|
||||
@@ -715,6 +727,8 @@ int neu_json_decode_app_json(void *node_json, neu_json_app_t *app_p)
|
||||
groups[i].driver = grp_elems[0].v.val_str;
|
||||
groups[i].group = grp_elems[1].v.val_str;
|
||||
neu_json_dump_key(grp_json, "params", &groups[i].params, false);
|
||||
neu_json_dump_key(grp_json, "static_tags", &groups[i].static_tags,
|
||||
false);
|
||||
}
|
||||
|
||||
app_p->subscriptions.n_group = n_group;
|
||||
|
||||
@@ -101,6 +101,7 @@ typedef struct {
|
||||
char *driver;
|
||||
char *group;
|
||||
char *params;
|
||||
char *static_tags;
|
||||
} neu_json_app_group_t;
|
||||
|
||||
typedef struct {
|
||||
|
||||
Reference in New Issue
Block a user