int FILE_INFO::parse(FILE* in) { char buf[256]; int retval; memset(this, 0, sizeof(FILE_INFO)); signed_xml = strdup(""); while (fgets(buf, 256, in)) { //log_messages.printf(MSG_DEBUG, buf, "FILE_INFO::parse: "); if (match_tag(buf, "</file_info>")) return 0; if (match_tag(buf, "<xml_signature>")) { retval = dup_element_contents(in, "</xml_signature>", &xml_signature); if (retval) return retval; continue; } retval = strcatdup(signed_xml, buf); if (retval) return retval; if (parse_str(buf, "<name>", name, sizeof(name))) { strcpy(this_filename, name); continue; } if (parse_double(buf, "<max_nbytes>", max_nbytes)) continue; if (match_tag(buf, "<generated_locally/>")) continue; if (match_tag(buf, "<upload_when_present/>")) continue; if (match_tag(buf, "<url>")) continue; if (match_tag(buf, "<gzip_when_done")) continue; log_messages.printf(MSG_NORMAL, "FILE_INFO::parse: unrecognized: %s \n", buf ); } return ERR_XML_PARSE; }
int ACCT_MGR_OP::parse(FILE* f) { char tag[1024]; bool is_tag; string message; int retval; MIOFILE mf; mf.init_file(f); XML_PARSER xp(&mf); accounts.clear(); error_str = ""; error_num = 0; repeat_sec = 0; strcpy(host_venue, ""); strcpy(ami.opaque, ""); if (!xp.parse_start("acct_mgr_reply")) return ERR_XML_PARSE; while (!xp.get(tag, sizeof(tag), is_tag)) { if (!is_tag) { if (log_flags.unparsed_xml) { msg_printf(0, MSG_INFO, "[unparsed_xml] ACCT_MGR_OP::parse: unexpected text %s", tag ); } continue; } if (!strcmp(tag, "/acct_mgr_reply")) return 0; if (xp.parse_str(tag, "name", ami.acct_mgr_name, 256)) continue; if (xp.parse_int(tag, "error_num", error_num)) continue; if (xp.parse_string(tag, "error", error_str)) continue; if (xp.parse_double(tag, "repeat_sec", repeat_sec)) continue; if (xp.parse_string(tag, "message", message)) { msg_printf(NULL, MSG_INFO, "Account manager: %s", message.c_str()); continue; } if (!strcmp(tag, "opaque")) { retval = xp.element_contents("</opaque>", ami.opaque, sizeof(ami.opaque)); if (retval) return retval; continue; } if (!strcmp(tag, "signing_key")) { retval = xp.element_contents("</signing_key>", ami.signing_key, sizeof(ami.signing_key)); if (retval) return retval; continue; } if (!strcmp(tag, "account")) { AM_ACCOUNT account; retval = account.parse(xp); if (retval) { msg_printf(NULL, MSG_INTERNAL_ERROR, "Can't parse account in account manager reply: %s", boincerror(retval) ); } else { accounts.push_back(account); } continue; } if (!strcmp(tag, "global_preferences")) { retval = dup_element_contents( f, "</global_preferences>", &global_prefs_xml ); if (retval) { msg_printf(NULL, MSG_INTERNAL_ERROR, "Can't parse global prefs in account manager reply: %s", boincerror(retval) ); return retval; } continue; } if (xp.parse_str(tag, "host_venue", host_venue, sizeof(host_venue))) continue; if (log_flags.unparsed_xml) { msg_printf(NULL, MSG_INFO, "[unparsed_xml] ACCT_MGR_OP::parse: unrecognized %s", tag ); } xp.skip_unexpected(tag, log_flags.unparsed_xml, "ACCT_MGR_OP::parse"); } return ERR_XML_PARSE; }
void handle_time_stats_log(FILE* fin) { dup_element_contents(fin, "</time_stats_log>", &stats_buf); }
// parse RPC reply from account manager // int ACCT_MGR_OP::parse(FILE* f) { string message; int retval; MIOFILE mf; mf.init_file(f); XML_PARSER xp(&mf); accounts.clear(); error_str = ""; error_num = 0; repeat_sec = 0; safe_strcpy(host_venue, ""); safe_strcpy(ami.opaque, ""); ami.no_project_notices = false; rss_feeds.clear(); if (!xp.parse_start("acct_mgr_reply")) return ERR_XML_PARSE; while (!xp.get_tag()) { if (!xp.is_tag) { if (log_flags.unparsed_xml) { msg_printf(0, MSG_INFO, "[unparsed_xml] ACCT_MGR_OP::parse: unexpected text %s", xp.parsed_tag ); } continue; } if (xp.match_tag("/acct_mgr_reply")) return 0; if (xp.parse_str("name", ami.project_name, 256)) continue; if (xp.parse_int("error_num", error_num)) continue; if (xp.parse_string("error", error_str)) continue; if (xp.parse_string("error_msg", error_str)) continue; if (xp.parse_double("repeat_sec", repeat_sec)) continue; if (xp.parse_string("message", message)) { msg_printf(NULL, MSG_INFO, "Account manager: %s", message.c_str()); continue; } if (xp.match_tag("opaque")) { retval = xp.element_contents("</opaque>", ami.opaque, sizeof(ami.opaque)); if (retval) return retval; continue; } if (xp.match_tag("signing_key")) { retval = xp.element_contents("</signing_key>", ami.signing_key, sizeof(ami.signing_key)); if (retval) return retval; continue; } if (xp.match_tag("account")) { AM_ACCOUNT account; retval = account.parse(xp); if (retval) { msg_printf(NULL, MSG_INTERNAL_ERROR, "Can't parse account in account manager reply: %s", boincerror(retval) ); } else { accounts.push_back(account); } continue; } if (xp.match_tag("global_preferences")) { retval = dup_element_contents( f, "</global_preferences>", &global_prefs_xml ); if (retval) { msg_printf(NULL, MSG_INTERNAL_ERROR, "Can't parse global prefs in account manager reply: %s", boincerror(retval) ); return retval; } continue; } if (xp.parse_str("host_venue", host_venue, sizeof(host_venue))) { continue; } if (xp.match_tag("rss_feeds")) { got_rss_feeds = true; parse_rss_feed_descs(xp, rss_feeds); continue; } if (xp.parse_bool("no_project_notices", ami.no_project_notices)) { continue; } if (log_flags.unparsed_xml) { msg_printf(NULL, MSG_INFO, "[unparsed_xml] ACCT_MGR_OP::parse: unrecognized tag <%s>", xp.parsed_tag ); } xp.skip_unexpected(log_flags.unparsed_xml, "ACCT_MGR_OP::parse"); } return ERR_XML_PARSE; }