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): // //------------------------------------ // // send_file [-host_id host_id] [-file_name file_name] [-num_copies] // -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 get the files. #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_download_result(DB_RESULT& result, int host_id) { int retval; char result_xml[LARGE_BLOB_SIZE]; sprintf(result_xml, "\n" " %s\n" " %s\n" "\n", result.name, result.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_download_message(DB_RESULT& result, int host_id, const char* file_name, int priority, long int exp_days) {; DB_MSG_TO_HOST mth; int retval; double nbytes; char dirpath[256], urlpath[256], path[256], md5[33]; strcpy(dirpath, config.download_dir); strcpy(urlpath, config.download_url); mth.clear(); mth.create_time = time(0); mth.hostid = host_id; strcpy(mth.variety, "file_xfer"); mth.handled = false; sprintf(path, "%s/%s", dirpath, file_name); retval = md5_file(path, md5, nbytes); if (retval) { fprintf(stderr, "process_wu_template: md5_file %d\n", retval); return retval; } sprintf(mth.xml, "\n" " %s\n" "\n" "\n" " %s\n" " %d00\n" "\n" "%s" "\n" " %s\n" " %s/%s\n" " %s\n" " %.0f\n" " \n" " %d\n" " %ld\n" "\n" "\n" " %s\n" " %s\n" " \n" " %s\n" " \n" "", FILE_MOVER, FILE_MOVER, BOINC_MAJOR_VERSION, result.xml_doc_in, file_name, urlpath, file_name, md5, nbytes, priority, exp_days, result.name, FILE_MOVER, file_name ); retval = mth.insert(); if (retval) { fprintf(stderr, "msg_to_host.insert(): %d\n", retval); return retval; } return 0; } int send_file( int host_id, const char* file_name, int priority, long int exp_days ) { DB_RESULT result; int retval; result.clear(); long int my_time = time(0); init_xfer_result(result); sprintf(result.name, "send_%s_%d_%ld", file_name, host_id, my_time); result.hostid = host_id; retval = create_download_result(result, host_id); retval = create_download_message(result, host_id, file_name, priority, exp_days); return retval; } int main(int argc, char** argv) { int i, retval; char file_name[256]; int host_id; int priority = 1; unsigned long exp_days; int num_copies; // initialize argument strings to empty strcpy(file_name, ""); host_id = 0; num_copies = 0; priority = 1; exp_days = 60; check_stop_daemons(); // get arguments for(i=1; i