static void broker_free(Broker *broker) { if (broker->storage) { dslink_storage_destroy(broker->storage); } broker_node_free(broker->root); dslink_map_free(&broker->client_connecting); dslink_map_free(&broker->remote_pending_sub); dslink_map_free(&broker->local_pending_sub); memset(broker, 0, sizeof(Broker)); }
int init_sys_static(BrokerNode *sysNode) { BrokerNode *buildNode = broker_node_create("build_number", "node"); BrokerNode *startTimeNode = broker_node_create("startTime", "node"); BrokerNode *versionNode = broker_node_create("version", "node"); if (!buildNode) { return 1; } if (broker_node_add(sysNode, buildNode) != 0) { broker_node_free(buildNode); return 1; } if (json_object_set_new_nocheck(buildNode->meta, "$type", json_string_nocheck("string")) != 0) { return 1; } if (json_object_set_new_nocheck(buildNode->meta, "$name", json_string_nocheck("Server Build")) != 0) { return 1; } if (broker_node_add(sysNode, versionNode) != 0) { broker_node_free(versionNode); return 1; } if (json_object_set_new_nocheck(versionNode->meta, "$type", json_string_nocheck("string")) != 0) { return 1; } if (json_object_set_new_nocheck(versionNode->meta, "$name", json_string_nocheck("DSA Version")) != 0) { return 1; } if (broker_node_add(sysNode, startTimeNode) != 0) { broker_node_free(startTimeNode); return 1; } if (json_object_set_new_nocheck(startTimeNode->meta, "$type", json_string_nocheck("string")) != 0) { return 1; } if (json_object_set_new_nocheck(startTimeNode->meta, "$name", json_string_nocheck("Start Time")) != 0) { return 1; } buildNode->value = json_string_nocheck(BROKER_SERVER_BUILD); versionNode->value = json_string_nocheck(BROKER_DSA_VERSION); { char ts[32]; dslink_create_ts(ts, 32); startTimeNode->value = json_string_nocheck(ts); } return 0; }
static int broker_init(Broker *broker, json_t *defaultPermission) { broker->root = broker_node_create("", "node"); if (!broker->root) { goto fail; } broker->root->permissionList = permission_list_load(defaultPermission); broker->root->path = dslink_strdup("/"); json_object_set_new(broker->root->meta, "$downstream", json_string_nocheck("/downstream")); broker->sys = broker_node_create("sys", "static"); if (!(broker->sys && broker_node_add(broker->root, broker->sys) == 0)) { broker_node_free(broker->sys); goto fail; } broker->upstream = broker_node_create("upstream", "static"); if (!(broker->upstream && broker_node_add(broker->root, broker->upstream) == 0)) { broker_node_free(broker->upstream); goto fail; } broker->data = broker_node_create("data", "node"); if (!(broker->data && broker_node_add(broker->root, broker->data) == 0 && broker_load_data_nodes(broker) == 0 && broker_data_node_populate(broker->data) == 0)) { broker_node_free(broker->data); goto fail; } broker->downstream = broker_node_create("downstream", "node"); if (!(broker->downstream && broker_node_add(broker->root, broker->downstream) == 0)) { broker_node_free(broker->downstream); goto fail; } broker_load_downstream_nodes(broker); broker_load_qos_storage(broker); if (broker_sys_node_populate(broker->sys)) { goto fail; } BrokerNode *node = broker_node_create("defs", "static"); if (!(node && json_object_set_new_nocheck(node->meta, "$hidden", json_true()) == 0 && broker_node_add(broker->root, node) == 0)) { broker_node_free(node); goto fail; } if (dslink_map_init(&broker->client_connecting, dslink_map_str_cmp, dslink_map_str_key_len_cal, dslink_map_hash_key) != 0) { goto fail; } if (dslink_map_init(&broker->remote_pending_sub, dslink_map_str_cmp, dslink_map_str_key_len_cal, dslink_map_hash_key) != 0) { goto fail; } if (dslink_map_init(&broker->local_pending_sub, dslink_map_str_cmp, dslink_map_str_key_len_cal, dslink_map_hash_key) != 0) { goto fail; } return 0; fail: broker_free(broker); return 1; }