int APP_VERSION::parse(XML_PARSER& xp) { FILE_REF file_ref; double dtemp; int rt; init(); while (!xp.get_tag()) { if (xp.match_tag("/app_version")) { rt = gpu_usage.rsc_type; if (rt) { if (strstr(plan_class, "opencl")) { if (!coprocs.coprocs[rt].have_opencl) { msg_printf(0, MSG_INFO, "App version needs OpenCL but GPU doesn't support it" ); missing_coproc = true; missing_coproc_usage = gpu_usage.usage; safe_strcpy(missing_coproc_name, coprocs.coprocs[rt].type); } } else if (strstr(plan_class, "cuda")) { if (!coprocs.coprocs[rt].have_cuda) { msg_printf(0, MSG_INFO, "App version needs CUDA but GPU doesn't support it" ); missing_coproc = true; missing_coproc_usage = gpu_usage.usage; safe_strcpy(missing_coproc_name, coprocs.coprocs[rt].type); } } else if (strstr(plan_class, "ati")) { if (!coprocs.coprocs[rt].have_cal) { msg_printf(0, MSG_INFO, "App version needs CAL but GPU doesn't support it" ); missing_coproc = true; missing_coproc_usage = gpu_usage.usage; safe_strcpy(missing_coproc_name, coprocs.coprocs[rt].type); } } } if (strstr(plan_class, "vbox")) { is_vm_app = true; } return 0; } if (xp.parse_str("app_name", app_name, sizeof(app_name))) continue; if (xp.match_tag("file_ref")) { int retval = file_ref.parse(xp); if (!retval) { if (strstr(file_ref.file_name, "vboxwrapper")) { is_vm_app = true; } app_files.push_back(file_ref); } continue; } if (xp.parse_int("version_num", version_num)) continue; if (xp.parse_str("api_version", api_version, sizeof(api_version))) continue; if (xp.parse_str("platform", platform, sizeof(platform))) continue; if (xp.parse_str("plan_class", plan_class, sizeof(plan_class))) continue; if (xp.parse_double("avg_ncpus", avg_ncpus)) continue; if (xp.parse_double("max_ncpus", max_ncpus)) continue; if (xp.parse_double("flops", dtemp)) { if (dtemp <= 0) { msg_printf(0, MSG_INTERNAL_ERROR, "non-positive FLOPS in app version" ); } else { flops = dtemp; } continue; } if (xp.parse_str("cmdline", cmdline, sizeof(cmdline))) continue; if (xp.parse_str("file_prefix", file_prefix, sizeof(file_prefix))) continue; if (xp.parse_double("gpu_ram", gpu_ram)) continue; if (xp.match_tag("coproc")) { COPROC_REQ cp; int retval = cp.parse(xp); if (!retval) { rt = rsc_index(cp.type); if (rt <= 0) { msg_printf(0, MSG_INFO, "app version refers to missing GPU type %s", cp.type ); missing_coproc = true; missing_coproc_usage = cp.count; safe_strcpy(missing_coproc_name, cp.type); continue; } gpu_usage.rsc_type = rt; gpu_usage.usage = cp.count; } else { msg_printf(0, MSG_INTERNAL_ERROR, "Error parsing <coproc>"); } continue; } if (xp.parse_bool("dont_throttle", dont_throttle)) continue; if (xp.parse_bool("is_wrapper", is_wrapper)) continue; if (xp.parse_bool("needs_network", needs_network)) continue; if (log_flags.unparsed_xml) { msg_printf(0, MSG_INFO, "[unparsed_xml] APP_VERSION::parse(): unrecognized: %s\n", xp.parsed_tag ); } xp.skip_unexpected(); } return ERR_XML_PARSE; }
int FILE_INFO::parse(XML_PARSER& xp) { char buf2[1024]; std::string url; PERS_FILE_XFER *pfxp; int retval; bool btemp; vector<string>gzipped_urls; while (!xp.get_tag()) { if (xp.match_tag("/file_info") || xp.match_tag("/file")) { if (!strlen(name)) return ERR_BAD_FILENAME; if (strstr(name, "..")) return ERR_BAD_FILENAME; if (strstr(name, "%")) return ERR_BAD_FILENAME; if (gzipped_urls.size() > 0) { download_urls.clear(); download_urls.urls = gzipped_urls; download_gzipped = true; } return 0; } if (xp.match_tag("xml_signature")) { retval = copy_element_contents( xp.f->f, "</xml_signature>", xml_signature, sizeof(xml_signature) ); if (retval) return retval; strip_whitespace(xml_signature); continue; } if (xp.match_tag("file_signature")) { retval = copy_element_contents( xp.f->f, "</file_signature>", file_signature, sizeof(file_signature) ); if (retval) return retval; strip_whitespace(file_signature); continue; } if (xp.match_tag("signatures")) { if (!cert_sigs->parse(xp)) { msg_printf(0, MSG_INTERNAL_ERROR, "FILE_INFO::parse(): cannot parse <signatures>\n" ); return ERR_XML_PARSE; } continue; } if (xp.parse_str("name", name, sizeof(name))) continue; if (xp.parse_string("url", url)) { if (strstr(url.c_str(), "file_upload_handler")) { upload_urls.urls.push_back(url); } else { download_urls.urls.push_back(url); } continue; } if (xp.parse_string("download_url", url)) { download_urls.urls.push_back(url); continue; } if (xp.parse_string("upload_url", url)) { upload_urls.urls.push_back(url); continue; } if (xp.parse_string("gzipped_url", url)) { gzipped_urls.push_back(url); continue; } if (xp.parse_str("md5_cksum", md5_cksum, sizeof(md5_cksum))) continue; if (xp.parse_double("nbytes", nbytes)) continue; if (xp.parse_double("gzipped_nbytes", gzipped_nbytes)) continue; if (xp.parse_double("max_nbytes", max_nbytes)) continue; if (xp.parse_int("status", status)) { // on startup, VERIFY_PENDING is meaningless if (status == FILE_VERIFY_PENDING) { status = FILE_NOT_PRESENT; } continue; } if (xp.parse_bool("executable", executable)) continue; if (xp.parse_bool("uploaded", uploaded)) continue; if (xp.parse_bool("sticky", sticky)) continue; if (xp.parse_bool("gzip_when_done", gzip_when_done)) continue; if (xp.parse_bool("download_gzipped", download_gzipped)) continue; if (xp.parse_bool("signature_required", signature_required)) continue; if (xp.parse_bool("is_project_file", is_project_file)) continue; if (xp.parse_bool("no_delete", btemp)) continue; if (xp.match_tag("persistent_file_xfer")) { pfxp = new PERS_FILE_XFER; retval = pfxp->parse(xp); #ifdef SIM delete pfxp; continue; #endif if (!retval) { pers_file_xfer = pfxp; } else { delete pfxp; } continue; } if (xp.match_tag("file_xfer")) { while (!xp.get_tag()) { if (xp.match_tag("/file_xfer")) break; } continue; } if (xp.match_tag("error_msg")) { retval = copy_element_contents( xp.f->f, "</error_msg>", buf2, sizeof(buf2) ); if (retval) return retval; error_msg = buf2; continue; } // deprecated tags if (xp.parse_bool("generated_locally", btemp)) continue; if (xp.parse_bool("upload_when_present", btemp)) continue; if (log_flags.unparsed_xml) { msg_printf(0, MSG_INFO, "[unparsed_xml] FILE_INFO::parse(): unrecognized: %s\n", xp.parsed_tag ); } xp.skip_unexpected(); } return ERR_XML_PARSE; }