diff --git a/sched/Makefile.am b/sched/Makefile.am index 1d5371c6b1..d86ff17b6d 100644 --- a/sched/Makefile.am +++ b/sched/Makefile.am @@ -16,6 +16,10 @@ noinst_PROGRAMS = \ sample_dummy_assimilator \ sample_bitwise_validator \ sample_trivial_validator \ + get_file \ + send_file \ + request_file_list \ + delete_file \ wu_check noinst_LIBRARIES = libsched.a @@ -104,6 +108,22 @@ message_handler_SOURCES = message_handler.C message_handler_DEPENDENCIES = $(LIBRSA) $(LIB_SCHED) message_handler_LDADD = $(LDADD) $(RSA_LIBS) +request_file_list_SOURCES = request_file_list.C +request_file_list_DEPENDENCIES = $(LIBRSA) $(LIB_SCHED) +request_file_list_LDADD = $(LDADD) $(RSA_LIBS) + +get_file_SOURCES = get_file.C +get_file_DEPENDENCIES = $(LIBRSA) $(LIB_SCHED) +get_file_LDADD = $(LDADD) $(RSA_LIBS) + +send_file_SOURCES = send_file.C +send_file_DEPENDENCIES = $(LIBRSA) $(LIB_SCHED) +send_file_LDADD = $(LDADD) $(RSA_LIBS) + +delete_file_SOURCES = delete_file.C +delete_file_DEPENDENCIES = $(LIBRSA) $(LIB_SCHED) +delete_file_LDADD = $(LDADD) $(RSA_LIBS) + fcgi_SOURCES = \ handle_request.C \ main.C \ diff --git a/sched/delete_file.C b/sched/delete_file.C new file mode 100644 index 0000000000..d5bf8ea475 --- /dev/null +++ b/sched/delete_file.C @@ -0,0 +1,114 @@ +// 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): +// + +//------------------------------------ +// +// delete_file [-host_id host_id -file_name file_name] +// -host_id number of host to upload from +// or 'all' if for all active hosts +// -file_name name of the file to delete +// +// Create a msg_to_host_that requests that the host delete the +// given file from the client + +#if HAVE_UNISTD_H +#include +#include +#include +#endif + +#include "boinc_db.h" +#include "sched_config.h" +#include "sched_util.h" + +SCHED_CONFIG config; + +int delete_host_file(int host_id, const char* file_name) { + DB_MSG_TO_HOST mth; + char msg_text[400]; + sprintf(msg_text, "%s\n", file_name); + int retval; + mth.clear(); + mth.create_time = time(0); + mth.hostid = host_id; + strcpy(mth.variety, msg_text); + mth.handled = false; + retval = mth.insert(); + if (retval) { + fprintf(stderr, "msg_to_host.insert(): %d\n", retval); + return retval; + } + return 0; +} + +int main(int argc, char** argv) { + int i, retval; + char file_name[256]; + int host_id; + + host_id = 0; + strcpy(file_name, ""); + + check_stop_daemons(); + + // get arguments + for(i=1; i +#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 +#include +#include +#endif + +#include "boinc_db.h" +#include "sched_config.h" +#include "sched_util.h" + +SCHED_CONFIG config; + +int request_file_list(int host_id) { + DB_MSG_TO_HOST mth; + int retval; + mth.clear(); + mth.create_time = time(0); + mth.hostid = host_id; + strcpy(mth.variety, "request_file_list"); + mth.handled = false; + strcpy(mth.xml, ""); + retval = mth.insert(); + if (retval) { + fprintf(stderr, "msg_to_host.insert(): %d\n", retval); + return retval; + } + return 0; +} + +int request_files_from_all() { + DB_HOST host; + while(!host.enumerate()) { + request_file_list(host.get_id()); + } + return 0; +} + +int main(int argc, char** argv) { + int i, retval; + int host_id; + + host_id = 0; + + check_stop_daemons(); + + // get arguments + for(i=1; i")) { - homogeneous_redundancy = true; + homogeneous_redundancy = true; } if (match_tag(buf, "")) { msg_to_host = true; @@ -66,6 +66,15 @@ int SCHED_CONFIG::parse(char* buf) { if (match_tag(buf, "")) { ignore_upload_certificates = true; } + if (match_tag(buf, "")) { + deletion_policy_priority = true; + } + if (match_tag(buf, "")) { + deletion_policy_expire = true; + } + if (match_tag(buf, "")) { + delete_from_self = true; + } if (match_tag(buf, "")) { enforce_delay_bound = true; } diff --git a/sched/send_file.C b/sched/send_file.C new file mode 100644 index 0000000000..e17dae4a52 --- /dev/null +++ b/sched/send_file.C @@ -0,0 +1,225 @@ +// 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, unsigned long exp_days) {; + DB_MSG_TO_HOST mth; + int retval; + double nbytes; + char dirpath[256], urlpath[256], path[256], md5[33]; + dirpath = config.download_dir; + 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" + " %d\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, unsigned long exp_date) { + DB_RESULT result; + int retval; + result.clear(); + long int my_time = time(0); + init_xfer_result(result); + sprintf(result.name, "send_%s_%d_%ul", 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_date); + 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