static volatile const char *BOINCrcsid="$Id$"; // The contents of this file are subject to the BOINC Public License // Version 1.0 (the "License"); you may not use this file except in // compliance with the License. You may obtain a copy of the License at // http://boinc.berkeley.edu/license_1.0.txt // // Software distributed under the License is distributed on an "AS IS" // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the // License for the specific language governing rights and limitations // under the License. // // The Original Code is the Berkeley Open Infrastructure for Network Computing. // // The Initial Developer of the Original Code is the SETI@home project. // Portions created by the SETI@home project are Copyright (C) 2002 // University of California at Berkeley. All Rights Reserved. // // Contributor(s): // //------------------------------------ // // get_file [-host_id host_id] [-file_name file_name] // -host_id name of host to upload from // -file_name name of specific file, dominates workunit // // Create a result entries, initialized to sent, and corresponding // messages to the host that is assumed to have the file. #if HAVE_UNISTD_H #include #include #include #endif #include #include "boinc_db.h" #include "sched_config.h" #include "sched_util.h" #include "md5_file.h" #include "util.h" SCHED_CONFIG config; void init_xfer_result(DB_RESULT& result) { result.id = 0; result.create_time = time(0); result.workunitid = 0; result.server_state = RESULT_SERVER_STATE_IN_PROGRESS; result.hostid = 0; result.report_deadline = 0; result.sent_time = 0; result.received_time = 0; result.client_state = 0; result.cpu_time = 0; strcpy(result.xml_doc_out, ""); strcpy(result.stderr_out, ""); result.outcome = RESULT_OUTCOME_INIT; result.file_delete_state = ASSIMILATE_DONE; result.validate_state = VALIDATE_STATE_NO_CHECK; result.claimed_credit = 0; result.granted_credit = 0; result.appid = 0; } int create_upload_result(DB_RESULT& result, int host_id, const char * file_name) { int retval; char result_xml[LARGE_BLOB_SIZE]; sprintf(result_xml, "\n" " %s\n" " %s\n" " \n" " %s\n" " \n" "\n", result.name, result.name, file_name); strcpy(result.xml_doc_in, result_xml); result.sent_time = time(0); result.report_deadline = 0; result.hostid = host_id; retval = result.insert(); if (retval) { fprintf(stderr, "result.insert(): %d\n", retval); return retval; } return 0; } int create_upload_message(DB_RESULT& result, int host_id, const char* file_name) {; DB_MSG_TO_HOST mth; int retval; mth.clear(); mth.create_time = time(0); mth.hostid = host_id; strcpy(mth.variety, "file_xfer"); mth.handled = false; sprintf(mth.xml, "\n" " %s\n" "\n" "\n" " %s\n" " %d00\n" "\n" "\n" " %s\n" " %s\n" " %.0f\n" " \n" "\n" "%s" "\n" " %s\n" " %s\n" "", FILE_MOVER, FILE_MOVER, BOINC_MAJOR_VERSION, file_name, config.upload_url, 1e10, result.xml_doc_in, result.name, FILE_MOVER); retval = mth.insert(); if (retval) { fprintf(stderr, "msg_to_host.insert(): %d\n", retval); return retval; } return 0; } int get_file(int host_id, const char* file_name) { DB_RESULT result; long int my_time = time(0); int retval; result.clear(); init_xfer_result(result); sprintf(result.name, "get_%s_%d_%ld", file_name, host_id, my_time); result.hostid = host_id; retval = create_upload_result(result, host_id, file_name); retval = create_upload_message(result, host_id, file_name); return retval; } int main(int argc, char** argv) { int i, retval; char file_name[256]; int host_id; // initialize argument strings to empty strcpy(file_name, ""); host_id = 0; check_stop_daemons(); // get arguments for(i=1; i