unsigned int ni_bridge_waittime_from_xml(const xml_node_t *brnode) { unsigned int waittime = 0; ni_bridge_t bridge; xml_node_t *child; if (xml_node_is_empty(brnode)) return waittime; __ni_bridge_init(&bridge); for (child = brnode->children; child; child = child->next) { if (ni_string_eq(child->name, "stp")) { if (ni_parse_boolean(child->cdata, &bridge.stp)) continue; } else if (ni_string_eq(child->name, "forward-delay")) { if (ni_parse_double(child->cdata, &bridge.forward_delay)) continue; if (bridge.forward_delay > NI_BRIDGE_FORWARD_DELAY_MAX) bridge.forward_delay = NI_BRIDGE_FORWARD_DELAY_MAX; else if (bridge.forward_delay < NI_BRIDGE_FORWARD_DELAY_MIN) bridge.forward_delay = NI_BRIDGE_FORWARD_DELAY_MIN; } else if (ni_string_eq(child->name, "max-age")) { if (ni_parse_double(child->cdata, &bridge.max_age)) continue; if (bridge.max_age > NI_BRIDGE_MAX_AGE_MAX) bridge.max_age = NI_BRIDGE_MAX_AGE_MAX; else if (bridge.max_age < NI_BRIDGE_MAX_AGE_MIN) bridge.max_age = NI_BRIDGE_MAX_AGE_MIN; } } waittime = ni_bridge_waittime(&bridge); return waittime; }
ni_bool_t xml_node_get_attr_double(const xml_node_t *node, const char *name, double *valp) { const char *value; if (!valp || !(value = xml_node_get_attr(node, name))) return FALSE; if (ni_parse_double(value, valp) < 0) return FALSE; return TRUE; }
ni_json_t * ni_json_new_number(const char *string) { if (ni_string_contains(string, ".")) { double value = 0.0; if (ni_parse_double(string, &value) < 0) return NULL; return ni_json_new_double(value); } else { int64_t value = 0; if (ni_parse_int64(string, &value, 10) < 0) return NULL; return ni_json_new_int64(value); } }