// look for app_versions.xml file in project dir. // If find, get app versions from there, // and use "anonymous platform" mechanism for this project // void CLIENT_STATE::check_anonymous() { unsigned int i; char path[MAXPATHLEN]; FILE* f; int retval; for (i=0; i<projects.size(); i++) { PROJECT* p = projects[i]; sprintf(path, "%s/%s", p->project_dir(), APP_INFO_FILE_NAME); f = fopen(path, "r"); if (!f) continue; msg_printf(p, MSG_INFO, "Found %s; using anonymous platform", APP_INFO_FILE_NAME ); p->anonymous_platform = true; // flag as anonymous even if can't parse file retval = parse_app_info(p, f); if (retval) { msg_printf_notice(p, false, "http://boinc.berkeley.edu/manager_links.php?target=notice&controlid=app_info", "%s", _("Syntax error in app_info.xml") ); } fclose(f); } }
bool parse(const std::string& json_string, cocaine_node_info_t& node_info) { Json::Value root; Json::Reader reader; if (!reader.parse(json_string, root)) { return false; } // parse apps const Json::Value apps = root["apps"]; if (!apps.isObject() || !apps.size()) { return false; } Json::Value::Members app_names(apps.getMemberNames()); for (Json::Value::Members::iterator it = app_names.begin(); it != app_names.end(); ++it) { std::string parsed_app_name(*it); Json::Value json_app_data(apps[parsed_app_name]); cocaine_node_app_info_t app_info(parsed_app_name); if (!parse_app_info(json_app_data, app_info)) { continue; } else { node_info.apps[parsed_app_name] = app_info; } } // parse remaining properties const Json::Value jobs_props = root["jobs"]; if (jobs_props.isObject()) { node_info.pending_jobs = jobs_props.get("pending", 0).asInt(); node_info.processed_jobs = jobs_props.get("processed", 0).asInt(); } node_info.route = root.get("route", "").asString(); node_info.uptime = root.get("uptime", 0.0f).asDouble(); node_info.ip_address = m_node_ip_address; node_info.port = m_node_port; return true; }