diff --git a/checkin_notes b/checkin_notes index 1ab0e06860..72c47b1ec8 100644 --- a/checkin_notes +++ b/checkin_notes @@ -2438,3 +2438,17 @@ David 23 Apr 2011 sched/ get_file.cpp send_file.cpp + +David 23 Apr 2011 + - server: rename send_file to put_file. + Factor out put_file() and get_file() functions + so they have a C++ API as well as command-line + + sched/ + put_file.cpp + get_file.cpp + Makefile.am + tools/ + backend_lib.cpp,h + lib/ + common_defs.h diff --git a/lib/common_defs.h b/lib/common_defs.h index 6924a52135..688139277e 100644 --- a/lib/common_defs.h +++ b/lib/common_defs.h @@ -122,7 +122,7 @@ enum SUSPEND_REASON { SUSPEND_REASON_OS = 4096 }; -// States of a result on a client. +// Values of RESULT::state // THESE MUST BE IN NUMERICAL ORDER // (because of the > comparison in RESULT::computing_done()) // diff --git a/sched/Makefile.am b/sched/Makefile.am index afd078632e..10a1e0a023 100644 --- a/sched/Makefile.am +++ b/sched/Makefile.am @@ -95,7 +95,7 @@ bin_PROGRAMS = \ make_work \ request_file_list \ sched_driver \ - send_file \ + put_file \ show_shmem \ wu_check @@ -256,8 +256,8 @@ request_file_list_LDADD = $(SERVERLIBS) get_file_SOURCES = get_file.cpp get_file_LDADD = $(SERVERLIBS) -send_file_SOURCES = send_file.cpp -send_file_LDADD = $(SERVERLIBS) +put_file_SOURCES = put_file.cpp +put_file_LDADD = $(SERVERLIBS) delete_file_SOURCES = delete_file.cpp delete_file_LDADD = $(SERVERLIBS) diff --git a/sched/get_file.cpp b/sched/get_file.cpp index 7255fc1142..d06e40dbaa 100644 --- a/sched/get_file.cpp +++ b/sched/get_file.cpp @@ -33,102 +33,12 @@ #include #include -#include "boinc_db.h" -#include "util.h" -#include "str_util.h" +#include "backend_lib.h" #include "sched_config.h" #include "sched_util.h" -#include "md5_file.h" #include "svn_version.h" -int create_upload_result( - DB_RESULT& result, int host_id, const char * file_name -) { - int retval; - char result_xml[BLOB_SIZE]; - - result.clear(); - sprintf(result.name, "get_%s_%d_%ld", file_name, host_id, time(0)); - result.create_time = time(0); - result.server_state = RESULT_SERVER_STATE_IN_PROGRESS; - result.hostid = host_id; - result.outcome = RESULT_OUTCOME_INIT; - result.file_delete_state = ASSIMILATE_DONE; - result.validate_state = VALIDATE_STATE_NO_CHECK; - - 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(): %s\n", boincerror(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(): %s\n", boincerror(retval)); - return retval; - } - return 0; -} - -int get_file(int host_id, const char* file_name) { - DB_RESULT result; - int retval; - retval = create_upload_result(result, host_id, file_name); - if (retval) return retval; - retval = create_upload_message(result, host_id, file_name); - return retval; -} - void usage() { fprintf(stderr, "Gets a file from a specific host.\n" "Usage: get_file [options]\n\n" diff --git a/sched/put_file.cpp b/sched/put_file.cpp new file mode 100644 index 0000000000..573d38ee13 --- /dev/null +++ b/sched/put_file.cpp @@ -0,0 +1,107 @@ +// This file is part of BOINC. +// http://boinc.berkeley.edu +// Copyright (C) 2008 University of California +// +// BOINC is free software; you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License +// as published by the Free Software Foundation, +// either version 3 of the License, or (at your option) any later version. +// +// BOINC is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with BOINC. If not, see . + +// put_file [options] +// --host_id N ID of host to send to +// --file_name name name of file + +#include "config.h" +#if HAVE_UNISTD_H +#include +#endif +#include +#include +#include + +#include "backend_lib.h" +#include "svn_version.h" + +#include "sched_config.h" +#include "sched_util.h" + +void usage() { + fprintf(stderr, + "Usage: put_file [options]\n\n" + "Arrange to send a file to a host.\n" + "Options:\n" + " --host_id id ID of host\n" + " --file_name name name of file to send\n" + " [ -h | --help ] Show this help text.\n" + " [ -v | --version ] Show version information.\n" + ); +} + +int main(int argc, char** argv) { + int i, retval; + char file_name[256]; + int host_id; + + strcpy(file_name, ""); + host_id = 0; + + check_stop_daemons(); + + for (i=1; i. - -// send_file [options] -// --host_id N ID of host to send to -// --file_name name name of file - -#include "config.h" -#if HAVE_UNISTD_H -#include -#endif -#include -#include -#include - -#include "boinc_db.h" -#include "util.h" -#include "str_util.h" -#include "md5_file.h" -#include "svn_version.h" - -#include "sched_config.h" -#include "sched_util.h" - -int create_download_result( - DB_RESULT& result, int host_id, const char* file_name -) { - int retval; - char result_xml[BLOB_SIZE]; - - result.clear(); - sprintf(result.name, "send_%s_%d_%ld", file_name, host_id, time(0)); - result.create_time = time(0); - result.server_state = RESULT_SERVER_STATE_IN_PROGRESS; - result.hostid = host_id; - result.outcome = RESULT_OUTCOME_INIT; - result.file_delete_state = ASSIMILATE_DONE; - result.validate_state = VALIDATE_STATE_NO_CHECK; - - 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(): %s\n", boincerror(retval)); - return retval; - } - return 0; -} - -int create_download_message( - DB_RESULT& result, int host_id, const char* file_name -) {; - 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, "md5_file() error: %s\n", boincerror(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" - "\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, result.name, FILE_MOVER, file_name - ); - retval = mth.insert(); - if (retval) { - fprintf(stderr, "msg_to_host.insert(): %s\n", boincerror(retval)); - return retval; - } - return 0; -} - -int send_file(int host_id, const char* file_name) { - DB_RESULT result; - int retval; - retval = create_download_result(result, host_id, file_name); - if (retval) return retval; - retval = create_download_message(result, host_id, file_name); - return retval; -} - - -void usage() { - fprintf(stderr, - "Usage: send_file [options]\n\n" - "Arrange to send a file to a host.\n" - "Options:\n" - " --host_id id ID of host\n" - " --file_name name name of file to send\n" - " [ -h | --help ] Show this help text.\n" - " [ -v | --version ] Show version information.\n" - ); -} - -int main(int argc, char** argv) { - int i, retval; - char file_name[256]; - int host_id; - - strcpy(file_name, ""); - host_id = 0; - - check_stop_daemons(); - - for (i=1; i\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(): %s\n", boincerror(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(): %s\n", boincerror(retval)); + return retval; + } + return 0; +} + +int get_file(int host_id, const char* file_name) { + DB_RESULT result; + int retval; + retval = create_upload_result(result, host_id, file_name); + if (retval) return retval; + retval = create_upload_message(result, host_id, file_name); + return retval; +} + +int create_download_result( + DB_RESULT& result, int host_id, const char* file_name +) { + int retval; + char result_xml[BLOB_SIZE]; + + result.clear(); + sprintf(result.name, "put_%s_%d_%ld", file_name, host_id, time(0)); + result.create_time = time(0); + result.server_state = RESULT_SERVER_STATE_IN_PROGRESS; + result.hostid = host_id; + result.outcome = RESULT_OUTCOME_INIT; + result.file_delete_state = ASSIMILATE_DONE; + result.validate_state = VALIDATE_STATE_NO_CHECK; + + 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(): %s\n", boincerror(retval)); + return retval; + } + return 0; +} + +int create_download_message( + DB_RESULT& result, int host_id, const char* file_name +) {; + 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, "md5_file() error: %s\n", boincerror(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" + "\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, result.name, FILE_MOVER, file_name + ); + retval = mth.insert(); + if (retval) { + fprintf(stderr, "msg_to_host.insert(): %s\n", boincerror(retval)); + return retval; + } + return 0; +} + +int put_file(int host_id, const char* file_name) { + DB_RESULT result; + int retval; + retval = create_download_result(result, host_id, file_name); + if (retval) return retval; + retval = create_download_message(result, host_id, file_name); + return retval; +} + const char *BOINC_RCSID_b5f8b10eb5 = "$Id$"; diff --git a/tools/backend_lib.h b/tools/backend_lib.h index 8cab31c6a8..7c70db21c5 100644 --- a/tools/backend_lib.h +++ b/tools/backend_lib.h @@ -71,4 +71,7 @@ extern int create_work( const char* additional_xml = NULL ); +extern int put_file(int host_id, const char* file_name); +extern int get_file(int host_id, const char* file_name); + #endif