int dsi_restart_transfer(globus_gfs_transfer_info_t * TransferInfo) { globus_off_t offset; globus_off_t length; if (globus_range_list_size(TransferInfo->range_list) != 1) return 1; globus_range_list_at(TransferInfo->range_list, 0, &offset, &length); return (offset != 0 || length != -1); }
static void globus_l_gsc_send_restart( globus_gridftp_server_control_op_t op, globus_range_list_t range_list) { int ctr; char * tmp_msg; char * msg; int size; globus_off_t offset; globus_off_t length; globus_range_list_t new_range_list; globus_range_list_merge( &new_range_list, op->perf_range_list, range_list); globus_range_list_destroy(op->perf_range_list); op->perf_range_list = new_range_list; size = globus_range_list_size(range_list); if(size < 1) { /* sending 0-0 is useless, and it causes a problem with our client when markers are sent before the retr begins msg = globus_common_create_string("111 Range Marker 0-0\r\n"); */ } else { msg = globus_common_create_string("111 Range Marker"); for(ctr = 0; ctr < size; ctr++) { globus_range_list_at(range_list, ctr, &offset, &length); tmp_msg = globus_common_create_string("%s%c%" GLOBUS_OFF_T_FORMAT"-%"GLOBUS_OFF_T_FORMAT, msg, ctr ? ',' : ' ', offset, offset + length); globus_free(msg); msg = tmp_msg; } tmp_msg = globus_common_create_string("%s%s", msg, "\r\n"); globus_free(msg); msg = tmp_msg; globus_i_gsc_intermediate_reply(op, msg); globus_free(msg); } }
/************************************************************************ * event handlers * -------------- ***********************************************************************/ void globus_i_gsc_reverse_restart( globus_range_list_t in_range, globus_range_list_t out_range) { globus_off_t offset; globus_off_t length; globus_range_list_insert(out_range, 0, GLOBUS_RANGE_LIST_MAX); if(in_range != NULL) { while(globus_range_list_size(in_range)) { globus_range_list_remove_at(in_range, 0, &offset, &length); globus_range_list_remove(out_range, offset, length); } } }