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); } }