23 #include <libxml/parser.h> 40 #define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) 46 fprintf(stderr,
"Cannot configure a null ds3_client for logging.\n");
49 if (client->
log != NULL) {
62 if (access_id == NULL || secret_key == NULL) {
63 fprintf(stderr,
"Arguments cannot be NULL\n");
76 void* read_user_struct,
77 size_t (*read_handler_func)(
void*,
size_t,
size_t,
void*),
78 void* write_user_struct,
79 size_t (*write_handler_func)(
void*,
size_t,
size_t,
void*),
82 fprintf(stderr,
"Cannot configure a null ds3_client for net_callback.\n");
91 if (endpoint == NULL) {
92 fprintf(stderr,
"Null endpoint\n");
98 client->
creds = creds;
111 char* endpoint = getenv(
"DS3_ENDPOINT");
112 char* access_key = getenv(
"DS3_ACCESS_KEY");
113 char* secret_key = getenv(
"DS3_SECRET_KEY");
114 char* http_proxy = getenv(
"http_proxy");
116 if (endpoint == NULL) {
120 if (access_key == NULL) {
124 if (secret_key == NULL) {
131 if (http_proxy != NULL) {
142 if (client == NULL) {
159 return copied_client;
178 if (client == NULL) {
194 return fwrite(buffer, size, nmemb, (FILE*) user_data);
198 return fread(buffer, size, nmemb, (FILE*) user_data);
202 return write(*(
int*)user_data, buffer, size * nmemb);
206 return read(*(
int*)user_data, buffer, size * nmemb);
210 static void get_file_size_windows(
const char* file_path, uint64_t* file_size) {
211 BY_HANDLE_FILE_INFORMATION info;
213 char * file_path_windows;
214 gunichar2 * file_path_windows_wide;
217 file_path_windows = g_strdup(file_path);
220 for (
char * ch = file_path_windows; *ch !=
'\0'; ++ch) {
222 case '/': *ch =
'\\';
break;
229 file_path_windows_wide = g_utf8_to_utf16(file_path_windows, -1, NULL, NULL, NULL);
230 if (file_path_windows_wide == NULL) {
231 fprintf(stderr,
"error converting file name to wide char '%s'\n", file_path_windows);
232 g_free(file_path_windows);
238 file_handle = CreateFileW(
239 (
wchar_t*)file_path_windows_wide,
240 FILE_READ_ATTRIBUTES,
241 FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
244 FILE_ATTRIBUTE_NORMAL,
246 g_free(file_path_windows_wide);
248 if (file_handle == INVALID_HANDLE_VALUE) {
249 g_free(file_path_windows);
250 fprintf(stderr,
"error opening file '%s'\n", file_path_windows);
254 res = GetFileInformationByHandle(file_handle, &info);
255 CloseHandle(file_handle);
258 fprintf(stderr,
"error getting file attributes\n");
259 g_free(file_path_windows);
264 if (!(info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
266 size.LowPart = info.nFileSizeLow;
267 size.HighPart = info.nFileSizeHigh;
269 *file_size = size.QuadPart;
274 g_free(file_path_windows);
281 struct stat file_info;
284 result = stat(file_path, &file_info);
286 fprintf(stderr,
"Failed to get file info for '%s' res=%d errno=%d: %s\n", file_path, result, errno, strerror(errno));
291 if (
S_ISDIR(file_info.st_mode)) {
294 *file_size = file_info.st_size;
299 struct stat file_info;
303 memset(&file_info, 0,
sizeof(
struct stat));
305 if (base_path != NULL) {
306 file_to_stat = g_strconcat(base_path, file_name, NULL);
308 file_to_stat = g_strdup(file_name);
314 get_file_size_windows(file_to_stat, &obj->
length);
319 g_free(file_to_stat);
332 GPtrArray* ds3_bulk_object_response_array = g_ptr_array_new();
333 for (file_index = 0; file_index < num_files; file_index++) {
338 obj_list->
num_objects = ds3_bulk_object_response_array->len;
339 g_ptr_array_free(ds3_bulk_object_response_array, FALSE);
348 GPtrArray* ds3_bulk_object_response_array = g_ptr_array_new();
350 for (object_index = 0; object_index < num_objects; object_index++) {
353 g_ptr_array_add(ds3_bulk_object_response_array, response);
357 obj_list->
num_objects = ds3_bulk_object_response_array->len;
358 g_ptr_array_free(ds3_bulk_object_response_array, FALSE);
367 GPtrArray* ds3_bulk_object_response_array = g_ptr_array_new();
369 for (object_index = 0; object_index < num_objects; object_index++) {
372 g_ptr_array_add(ds3_bulk_object_response_array, response);
376 obj_list->
num_objects = ds3_bulk_object_response_array->len;
377 g_ptr_array_free(ds3_bulk_object_response_array, FALSE);
390 GPtrArray* ds3_bulk_object_response_array = g_ptr_array_new();
392 for (object_index = 0; object_index < num_objects; object_index++) {
394 g_ptr_array_add(ds3_bulk_object_response_array, response);
398 obj_list->
num_objects = ds3_bulk_object_response_array->len;
399 g_ptr_array_free(ds3_bulk_object_response_array, FALSE);
404 if (response == NULL) {
414 if (response == NULL) {
419 for (index = 0; index < response->
num_parts; index++) {
422 g_free(response->
parts);
427 if (response == NULL) {
432 for (index = 0; index < response->
num_strings; index++) {
445 if (_request == NULL) {
454 if (request->
headers != NULL) {
455 g_hash_table_destroy(request->
headers);
483 if (response == NULL) {
494 if (response == NULL) {
505 if (response == NULL) {
518 if (response == NULL) {
530 if (response == NULL) {
546 if (response == NULL) {
562 if (response == NULL) {
573 if (response == NULL) {
584 if (response == NULL) {
595 if (response == NULL) {
607 if (response == NULL) {
622 if (response == NULL) {
634 if (response == NULL) {
645 if (response == NULL) {
655 if (response == NULL) {
667 if (response == NULL) {
682 if (response == NULL) {
699 if (response == NULL) {
713 if (response == NULL) {
724 if (response == NULL) {
736 if (response == NULL) {
747 if (response == NULL) {
755 if (response == NULL) {
767 if (response == NULL) {
780 if (response == NULL) {
791 if (response == NULL) {
804 if (response == NULL) {
818 if (response == NULL) {
832 if (response == NULL) {
847 if (response == NULL) {
862 if (response == NULL) {
876 if (response == NULL) {
890 if (response == NULL) {
904 if (response == NULL) {
919 if (response == NULL) {
933 if (response == NULL) {
948 if (response == NULL) {
962 if (response == NULL) {
976 if (response == NULL) {
990 if (response == NULL) {
1004 if (response == NULL) {
1018 if (response == NULL) {
1029 if (response == NULL) {
1047 if (response == NULL) {
1059 if (response == NULL) {
1069 if (response == NULL) {
1083 if (response == NULL) {
1094 if (response == NULL) {
1119 if (response == NULL) {
1130 if (response == NULL) {
1145 if (response == NULL) {
1158 if (response == NULL) {
1170 if (response == NULL) {
1184 if (response == NULL) {
1196 if (response == NULL) {
1211 if (response == NULL) {
1223 if (response == NULL) {
1235 if (response == NULL) {
1246 if (response == NULL) {
1261 if (response == NULL) {
1273 if (response == NULL) {
1284 if (response == NULL) {
1304 if (response == NULL) {
1316 if (response == NULL) {
1328 if (response == NULL) {
1339 if (response == NULL) {
1350 if (response == NULL) {
1361 if (response == NULL) {
1372 if (response == NULL) {
1383 if (response == NULL) {
1395 if (response == NULL) {
1407 if (response == NULL) {
1413 for (index = 0; index < response->
num_ids; index++) {
1416 g_free(response->
ids);
1422 if (response == NULL) {
1432 if (response == NULL) {
1444 if (response == NULL) {
1456 if (response == NULL) {
1469 if (response == NULL) {
1481 if (response == NULL) {
1492 if (response == NULL) {
1505 if (response == NULL) {
1517 if (response == NULL) {
1530 if (response == NULL) {
1547 if (response == NULL) {
1552 for (index = 0; index < response->
num_tasks; index++) {
1555 g_free(response->
tasks);
1560 if (response == NULL) {
1569 if (response == NULL) {
1575 for (index = 0; index < response->
num_entries; index++) {
1584 if (response == NULL) {
1597 if (response == NULL) {
1607 if (response == NULL) {
1619 if (response == NULL) {
1630 if (response == NULL) {
1650 if (response == NULL) {
1661 if (response == NULL) {
1672 if (response == NULL) {
1682 if (response == NULL) {
1692 if (response == NULL) {
1701 if (response == NULL) {
1711 if (response == NULL) {
1723 if (response == NULL) {
1731 if (response == NULL) {
1751 if (response == NULL) {
1761 if (response == NULL) {
1766 for (index = 0; index < response->
num_failures; index++) {
1774 if (response == NULL) {
1783 if (response == NULL) {
1793 if (response == NULL) {
1801 if (response == NULL) {
1815 if (response == NULL) {
1829 if (response == NULL) {
1834 for (index = 0; index < response->
num_buckets; index++) {
1843 if (response == NULL) {
1857 if (response == NULL) {
1871 if (response == NULL) {
1885 if (response == NULL) {
1899 if (response == NULL) {
1913 if (response == NULL) {
1927 if (response == NULL) {
1941 if (response == NULL) {
1955 if (response == NULL) {
1969 if (response == NULL) {
1983 if (response == NULL) {
1997 if (response == NULL) {
2011 if (response == NULL) {
2025 if (response == NULL) {
2039 if (response == NULL) {
2044 for (index = 0; index < response->
num_groups; index++) {
2047 g_free(response->
groups);
2053 if (response == NULL) {
2067 if (response == NULL) {
2081 if (response == NULL) {
2095 if (response == NULL) {
2100 for (index = 0; index < response->
num_nodes; index++) {
2103 g_free(response->
nodes);
2109 if (response == NULL) {
2123 if (response == NULL) {
2137 if (response == NULL) {
2151 if (response == NULL) {
2165 if (response == NULL) {
2179 if (response == NULL) {
2193 if (response == NULL) {
2207 if (response == NULL) {
2221 if (response == NULL) {
2235 if (response == NULL) {
2249 if (response == NULL) {
2263 if (response == NULL) {
2277 if (response == NULL) {
2291 if (response == NULL) {
2305 if (response == NULL) {
2319 if (response == NULL) {
2333 if (response == NULL) {
2338 for (index = 0; index < response->
num_pools; index++) {
2341 g_free(response->
pools);
2347 if (response == NULL) {
2361 if (response == NULL) {
2375 if (response == NULL) {
2389 if (response == NULL) {
2403 if (response == NULL) {
2417 if (response == NULL) {
2431 if (response == NULL) {
2445 if (response == NULL) {
2459 if (response == NULL) {
2473 if (response == NULL) {
2487 if (response == NULL) {
2501 if (response == NULL) {
2515 if (response == NULL) {
2520 for (index = 0; index < response->
num_tapes; index++) {
2523 g_free(response->
tapes);
2529 if (response == NULL) {
2543 if (response == NULL) {
2557 if (response == NULL) {
2571 if (response == NULL) {
2585 if (response == NULL) {
2599 if (response == NULL) {
2613 if (response == NULL) {
2627 if (response == NULL) {
2641 if (response == NULL) {
2655 if (response == NULL) {
2669 if (response == NULL) {
2683 if (response == NULL) {
2697 if (response == NULL) {
2710 for (index = 0; index < response->
num_pools; index++) {
2713 g_free(response->
pools);
2718 for (index = 0; index < response->
num_tapes; index++) {
2721 g_free(response->
tapes);
2726 if (response == NULL) {
2736 if (response == NULL) {
2748 if (response == NULL) {
2753 for (index = 0; index < response->
num_objects; index++) {
2761 if (response == NULL) {
2776 if (response == NULL) {
2786 if (response == NULL) {
2793 for (index = 0; index < response->
num_objects; index++) {
2801 if (response == NULL) {
2807 for (index = 0; index < response->
num_objects; index++) {
2815 if (response == NULL) {
2822 for (index = 0; index < response->
num_objects; index++) {
2830 if (response == NULL) {
2835 for (index = 0; index < response->
num_buckets; index++) {
2844 if (response == NULL) {
2853 for (index = 0; index < response->
num_errors; index++) {
2856 g_free(response->
errors);
2861 if (response == NULL) {
2869 for (index = 0; index < response->
num_nodes; index++) {
2872 g_free(response->
nodes);
2880 if (response == NULL) {
2887 for (index = 0; index < response->
num_objects; index++) {
2895 if (response == NULL) {
2903 for (index = 0; index < response->
num_nodes; index++) {
2906 g_free(response->
nodes);
2907 for (index = 0; index < response->
num_objects; index++) {
2918 if (response == NULL) {
2923 for (index = 0; index < response->
num_jobs; index++) {
2926 g_free(response->
jobs);
2931 if (response == NULL) {
2939 for (index = 0; index < response->
num_parts; index++) {
2942 g_free(response->
parts);
2948 if (response == NULL) {
2960 if (response == NULL) {
2973 if (response == NULL) {
2988 if (response == NULL) {
2993 for (index = 0; index < response->
num_types; index++) {
2996 g_free(response->
types);
3001 if (response == NULL) {
3015 if (response == NULL) {
3029 for (index = 0; index < response->
num_objects; index++) {
3038 if (response == NULL) {
3054 for (index = 0; index < response->
num_uploads; index++) {
void ds3_job_node_response_free(ds3_job_node_response *response)
void ds3_target_failure_notification_registration_response_free(ds3_target_failure_notification_registration_response *response)
ds3_str * last_notification
void ds3_cache_filesystem_response_free(ds3_cache_filesystem_response *response)
ds3_str * notification_generation_date
void ds3_error_response_free(ds3_error_response *response)
size_t ds3_read_from_fd(void *buffer, size_t size, size_t nmemb, void *user_data)
void ds3_job_completed_notification_registration_list_response_free(ds3_job_completed_notification_registration_list_response *response)
ds3_suspect_blob_ds3_target_response ** suspect_blob_ds3_targets
ds3_storage_domain_failure_notification_registration_response ** storage_domain_failure_notification_registrations
ds3_node_response ** nodes
ds3_tapes_must_be_onlined_response * tapes_must_be_onlined
ds3_pool_response ** pools
ds3_str * notification_generation_date
void ds3_suspect_blob_ds3_target_response_free(ds3_suspect_blob_ds3_target_response *response)
size_t num_completed_jobs
void ds3_storage_domain_failure_response_free(ds3_storage_domain_failure_response *response)
size_t num_named_detailed_tape_partitions
ds3_str * notification_end_point
void ds3_pool_partition_response_free(ds3_pool_partition_response *response)
void ds3_azure_target_failure_response_free(ds3_azure_target_failure_response *response)
ds3_str * storage_domain_id
void ds3_feature_key_response_free(ds3_feature_key_response *response)
ds3_str * notification_end_point
void ds3_tape_partition_list_response_free(ds3_tape_partition_list_response *response)
void ds3_group_list_response_free(ds3_group_list_response *response)
void ds3_completed_job_response_free(ds3_completed_job_response *response)
ds3_tape_partition_response ** tape_partitions
void ds3_s3_target_failure_list_response_free(ds3_s3_target_failure_list_response *response)
void ds3_degraded_blob_list_response_free(ds3_degraded_blob_list_response *response)
void ds3_tape_failure_response_free(ds3_tape_failure_response *response)
ds3_str * notification_end_point
void ds3_generic_dao_notification_payload_response_free(ds3_generic_dao_notification_payload_response *response)
ds3_bulk_object_list_response * blobs
ds3_user_response * owner
ds3_bulk_object_response ** objects_not_persisted
ds3_str * last_notification
void ds3_s3_object_lost_notification_registration_list_response_free(ds3_s3_object_lost_notification_registration_list_response *response)
size_t num_tapes_to_online
ds3_s3_object_to_delete_response ** deleted_objects
void ds3_capacity_summary_container_response_free(ds3_capacity_summary_container_response *response)
ds3_client * ds3_copy_client(const ds3_client const *client)
ds3_str * last_checkpoint
void ds3_tape_response_free(ds3_tape_response *response)
void ds3_s3_target_failure_notification_registration_list_response_free(ds3_s3_target_failure_notification_registration_list_response *response)
ds3_storage_domain_capacity_summary_response * tape
void ds3_azure_target_failure_notification_registration_list_response_free(ds3_azure_target_failure_notification_registration_list_response *response)
void ds3_azure_target_failure_list_response_free(ds3_azure_target_failure_list_response *response)
ds3_tape_library_response ** tape_libraries
size_t num_ds3_data_replication_rules
size_t num_storage_domain_members
void ds3_build_information_response_free(ds3_build_information_response *response)
void ds3_creds_free(ds3_creds *creds)
ds3_azure_data_replication_rule_response ** azure_data_replication_rules
void ds3_group_response_free(ds3_group_response *response)
ds3_str * last_notification
void ds3_pool_list_response_free(ds3_pool_list_response *response)
size_t num_s3_target_bucket_names
ds3_error * ds3_create_client_from_env(ds3_client **client)
static void get_file_size_posix(const char *file_path, uint64_t *file_size)
void ds3_suspect_blob_pool_list_response_free(ds3_suspect_blob_pool_list_response *response)
ds3_spectra_user_response ** spectra_users
void ds3_storage_domain_response_free(ds3_storage_domain_response *response)
ds3_bucket_response ** buckets
ds3_azure_target_failure_response ** azure_target_failures
void ds3_s3_objects_persisted_notification_payload_response_free(ds3_s3_objects_persisted_notification_payload_response *response)
ds3_feature_key_response ** feature_keys
ds3_detailed_s3_object_response ** detailed_s3_objects
ds3_str * last_notification
ds3_tape_partition_failure_notification_registration_response ** tape_partition_failure_notification_registrations
ds3_str * tape_partition_id
void ds3_s3_target_read_preference_response_free(ds3_s3_target_read_preference_response *response)
void ds3_data_replication_rule_list_response_free(ds3_data_replication_rule_list_response *response)
ds3_str * data_path_ip_address
void ds3_delete_object_error_response_free(ds3_delete_object_error_response *response)
void ds3_azure_target_read_preference_response_free(ds3_azure_target_read_preference_response *response)
void ds3_target_failure_notification_registration_list_response_free(ds3_target_failure_notification_registration_list_response *response)
ds3_type_response ** types
ds3_str * replicated_user_default_data_policy
ds3_data_replication_rule_response ** ds3_data_replication_rules
ds3_multipart_upload_part_response ** parts
void ds3_data_persistence_rule_response_free(ds3_data_persistence_rule_response *response)
ds3_str * notification_end_point
ds3_s3_target_failure_notification_registration_response ** s3_target_failure_notification_registrations
ds3_str ** tape_bar_codes
void ds3_azure_target_list_response_free(ds3_azure_target_list_response *response)
ds3_target_failure_notification_registration_response ** ds3_target_failure_notification_registrations
void ds3_bulk_object_list_response_free(ds3_bulk_object_list_response *response)
void ds3_target_failure_notification_payload_response_free(ds3_target_failure_notification_payload_response *response)
void ds3_tape_partition_failure_list_response_free(ds3_tape_partition_failure_list_response *response)
void ds3_tape_failure_notification_payload_response_free(ds3_tape_failure_notification_payload_response *response)
size_t num_tape_density_directives
void ds3_client_register_logging(ds3_client *client, ds3_log_lvl log_lvl, void(*log_callback)(const char *log_message, void *user_data), void *user_data)
void ds3_azure_target_read_preference_list_response_free(ds3_azure_target_read_preference_list_response *response)
ds3_str * persistence_rule_id
ds3_named_detailed_tape_partition_response ** named_detailed_tape_partitions
void ds3_multipart_upload_part_response_free(ds3_multipart_upload_part_response *response)
void ds3_objects_response_free(ds3_objects_response *response)
void ds3_connection_pool_dec_ref(ds3_connection_pool *pool)
ds3_azure_target_read_preference_response ** azure_target_read_preferences
ds3_str * read_from_tape_id
size_t num_s3_object_cached_notification_registrations
void ds3_s3_object_cached_notification_registration_list_response_free(ds3_s3_object_cached_notification_registration_list_response *response)
void ds3_azure_target_response_free(ds3_azure_target_response *response)
ds3_str * notification_end_point
ds3_str * notification_end_point
ds3_job_node_response ** nodes
ds3_delete_object_error_response ** errors
void ds3_multi_part_upload_response_free(ds3_multi_part_upload_response *response)
void ds3_create_heap_dump_params_response_free(ds3_create_heap_dump_params_response *response)
ds3_suspect_blob_pool_response ** suspect_blob_pools
ds3_bulk_object_list_response * ds3_convert_file_list_with_basepath(const char **file_list, uint64_t num_files, const char *base_path)
void ds3_client_free(ds3_client *client)
ds3_storage_domain_capacity_summary_response * pool
void ds3_request_free(ds3_request *_request)
ds3_error *(* net_callback)(const struct _ds3_client *client, const ds3_request *_request, void *read_user_struct, size_t(*read_handler_func)(void *, size_t, size_t, void *), void *write_user_struct, size_t(*write_handler_func)(void *, size_t, size_t, void *), ds3_string_multimap **return_headers)
ds3_tape_density_directive_response ** tape_density_directives
ds3_str * last_notification
void ds3_list_all_my_buckets_result_response_free(ds3_list_all_my_buckets_result_response *response)
ds3_s3_object_lost_notification_registration_response ** s3_object_lost_notification_registrations
ds3_str * job_creation_date
void ds3_tapes_must_be_onlined_response_free(ds3_tapes_must_be_onlined_response *response)
ds3_str * target_data_policy
void ds3_data_policy_acl_list_response_free(ds3_data_policy_acl_list_response *response)
void ds3_job_creation_failed_notification_registration_response_free(ds3_job_creation_failed_notification_registration_response *response)
void ds3_s3_target_read_preference_list_response_free(ds3_s3_target_read_preference_list_response *response)
ds3_str * upload_id_marker
void ds3_delete_objects_response_free(ds3_delete_objects_response *response)
void ds3_tape_failure_notification_registration_list_response_free(ds3_tape_failure_notification_registration_list_response *response)
void ds3_s3_target_failure_notification_registration_response_free(ds3_s3_target_failure_notification_registration_response *response)
void ds3_bucket_response_free(ds3_bucket_response *response)
ds3_str * last_notification
ds3_str * storage_domain_id
ds3_connection_pool * ds3_connection_pool_init(void)
void ds3_detailed_s3_object_list_response_free(ds3_detailed_s3_object_list_response *response)
ds3_bulk_object_list_response * ds3_convert_file_list(const char **file_list, uint64_t num_files)
ds3_str * pool_partition_id
ds3_azure_target_response ** azure_targets
ds3_physical_placement_response * physical_placement
void ds3_s3_object_cached_notification_registration_response_free(ds3_s3_object_cached_notification_registration_response *response)
void ds3_system_failure_list_response_free(ds3_system_failure_list_response *response)
void ds3_set_of_tape_bar_codes_response_free(ds3_set_of_tape_bar_codes_response *response)
void ds3_azure_data_replication_rule_list_response_free(ds3_azure_data_replication_rule_list_response *response)
ds3_pool_partition_response ** pool_partitions
void ds3_s3_target_bucket_name_response_free(ds3_s3_target_bucket_name_response *response)
ds3_str * next_upload_id_marker
void ds3_s3_objects_cached_notification_payload_response_free(ds3_s3_objects_cached_notification_payload_response *response)
ds3_str * last_notification
ds3_s3_target_failure_response ** s3_target_failures
void ds3_health_verification_result_response_free(ds3_health_verification_result_response *response)
void ds3_node_list_response_free(ds3_node_list_response *response)
void ds3_tape_failure_list_response_free(ds3_tape_failure_list_response *response)
ds3_str * cloud_bucket_prefix
size_t num_tape_failure_notification_registrations
void ds3_named_detailed_tape_partition_list_response_free(ds3_named_detailed_tape_partition_list_response *response)
void ds3_pool_failure_response_free(ds3_pool_failure_response *response)
void ds3_tape_drive_list_response_free(ds3_tape_drive_list_response *response)
size_t num_degraded_blobs
size_t num_job_created_notification_registrations
void ds3_degraded_blob_response_free(ds3_degraded_blob_response *response)
ds3_bulk_object_response ** objects
ds3_objects_response ** objects
void ds3_active_job_list_response_free(ds3_active_job_list_response *response)
void ds3_s3_object_list_response_free(ds3_s3_object_list_response *response)
ds3_str * azure_replication_rule_id
void ds3_target_read_preference_list_response_free(ds3_target_read_preference_list_response *response)
void ds3_data_path_backend_response_free(ds3_data_path_backend_response *response)
ds3_s3_data_replication_rule_response ** s3_data_replication_rules
size_t num_data_persistence_rules
void ds3_storage_domain_failure_notification_registration_response_free(ds3_storage_domain_failure_notification_registration_response *response)
void ds3_database_contents_response_free(ds3_database_contents_response *response)
void ds3_connection_pool_inc_ref(ds3_connection_pool *pool)
ds3_str ** common_prefixes
ds3_data_policy_acl_response ** data_policy_acls
void ds3_target_failure_response_free(ds3_target_failure_response *response)
size_t num_job_completed_notification_registrations
void ds3_azure_target_bucket_name_response_free(ds3_azure_target_bucket_name_response *response)
ds3_pool_response ** pools
ds3_s3_target_read_preference_response ** s3_target_read_preferences
ds3_str * mfg_serial_number
ds3_user_response * owner
ds3_system_failure_response ** system_failures
size_t num_s3_data_replication_rules
void ds3_job_created_notification_payload_response_free(ds3_job_created_notification_payload_response *response)
void ds3_tape_list_response_free(ds3_tape_list_response *response)
ds3_bucket_acl_response ** bucket_acls
ds3_error * ds3_create_error(ds3_error_code code, const char *message)
void ds3_bulk_object_response_free(ds3_bulk_object_response *response)
void ds3_data_policy_acl_response_free(ds3_data_policy_acl_response *response)
ds3_str * notification_generation_date
void ds3_storage_domain_failure_notification_registration_list_response_free(ds3_storage_domain_failure_notification_registration_list_response *response)
ds3_str * data_path_end_point
void ds3_suspect_blob_ds3_target_list_response_free(ds3_suspect_blob_ds3_target_list_response *response)
size_t num_tape_partition_failures
void ds3_target_read_preference_response_free(ds3_target_read_preference_response *response)
ds3_bulk_object_list_response * ds3_init_bulk_object_list()
ds3_str * last_notification
ds3_str * last_notification
ds3_str * notification_generation_date
ds3_str * last_fully_verified
size_t ds3_write_to_fd(void *buffer, size_t size, size_t nmemb, void *user_data)
void ds3_storage_domain_capacity_summary_response_free(ds3_storage_domain_capacity_summary_response *response)
ds3_str * data_path_proxy
size_t ds3_write_to_file(void *buffer, size_t size, size_t nmemb, void *user_data)
size_t num_ds3_target_failures
size_t num_tape_partitions
size_t num_system_failures
ds3_set_of_tape_bar_codes_response ** tapes_to_online
ds3_str * storage_domain_id
ds3_storage_domain_failure_response ** storage_domain_failures
ds3_suspect_blob_azure_target_response ** suspect_blob_azure_targets
void ds3_complete_multipart_upload_result_response_free(ds3_complete_multipart_upload_result_response *response)
size_t num_suspect_blob_azure_targets
void ds3_system_failure_notification_registration_list_response_free(ds3_system_failure_notification_registration_list_response *response)
void ds3_storage_domain_failure_notification_payload_response_free(ds3_storage_domain_failure_notification_payload_response *response)
GHashTable * query_params
ds3_suspect_blob_s3_target_response ** suspect_blob_s3_targets
size_t num_detailed_s3_objects
ds3_str * read_from_ds3_target_id
ds3_data_persistence_rule_response ** data_persistence_rules
void ds3_storage_domain_list_response_free(ds3_storage_domain_list_response *response)
ds3_str * expiration_date
void ds3_detailed_tape_partition_response_free(ds3_detailed_tape_partition_response *response)
ds3_storage_domain_response ** storage_domains
static ds3_bulk_object_response * _ds3_bulk_object_from_file(const char *file_name, const char *base_path)
ds3_str * s3_replication_rule_id
size_t num_s3_target_failure_notification_registrations
ds3_str * notification_generation_date
ds3_str * notification_end_point
size_t num_storage_domains
ds3_bulk_object_list_response * ds3_convert_object_list(const ds3_contents_response **objects, uint64_t num_objects)
void ds3_azure_target_failure_notification_registration_response_free(ds3_azure_target_failure_notification_registration_response *response)
void ds3_s3_object_persisted_notification_registration_list_response_free(ds3_s3_object_persisted_notification_registration_list_response *response)
void ds3_job_completed_notification_registration_response_free(ds3_job_completed_notification_registration_response *response)
void ds3_pool_failure_notification_registration_list_response_free(ds3_pool_failure_notification_registration_list_response *response)
ds3_str * notification_generation_date
size_t num_detailed_tape_failures
ds3_pool_failure_response ** pool_failures
size_t num_suspect_blob_ds3_targets
void ds3_blob_response_free(ds3_blob_response *response)
void ds3_str_free(ds3_str *string)
ds3_s3_target_response ** s3_targets
ds3_completed_job_response ** completed_jobs
void ds3_s3_target_failure_response_free(ds3_s3_target_failure_response *response)
ds3_suspect_blob_tape_response ** suspect_blob_tapes
ds3_str * ds3_str_dup(const ds3_str *string)
void ds3_list_bucket_result_response_free(ds3_list_bucket_result_response *response)
ds3_target_response ** ds3_targets
ds3_str * read_from_azure_target_id
size_t num_system_failure_notification_registrations
The public definitions for the Spectra S3 C SDK.
void ds3_pool_failure_notification_registration_response_free(ds3_pool_failure_notification_registration_response *response)
void ds3_s3_object_persisted_notification_registration_response_free(ds3_s3_object_persisted_notification_registration_response *response)
ds3_str * default_data_policy_id
ds3_str * last_notification
void ds3_feature_key_list_response_free(ds3_feature_key_list_response *response)
void ds3_s3_target_bucket_name_list_response_free(ds3_s3_target_bucket_name_list_response *response)
void ds3_tape_library_response_free(ds3_tape_library_response *response)
void ds3_tape_partition_failure_notification_registration_response_free(ds3_tape_partition_failure_notification_registration_response *response)
ds3_job_creation_failed_notification_registration_response ** job_creation_failed_notification_registrations
ds3_str * notification_end_point
void ds3_s3_data_replication_rule_response_free(ds3_s3_data_replication_rule_response *response)
ds3_str * beans_retriever_name
void ds3_s3_objects_lost_notification_payload_response_free(ds3_s3_objects_lost_notification_payload_response *response)
ds3_system_failure_notification_registration_response ** system_failure_notification_registrations
size_t num_tape_libraries
ds3_str * notification_end_point
void ds3_job_response_free(ds3_job_response *response)
ds3_str * ds3_replication_rule_id
void ds3_tape_density_directive_response_free(ds3_tape_density_directive_response *response)
ds3_str * notification_generation_date
ds3_client * ds3_create_client(const char *const endpoint, ds3_creds *creds)
void ds3_job_chunk_response_free(ds3_job_chunk_response *response)
ds3_str * admin_secret_key
void ds3_node_response_free(ds3_node_response *response)
ds3_job_completed_notification_registration_response ** job_completed_notification_registrations
void ds3_cache_filesystem_list_response_free(ds3_cache_filesystem_list_response *response)
ds3_str * last_notification
ds3_multi_part_upload_response ** uploads
void ds3_duration_response_free(ds3_duration_response *response)
void ds3_cache_filesystem_information_response_free(ds3_cache_filesystem_information_response *response)
void ds3_job_completed_notification_payload_response_free(ds3_job_completed_notification_payload_response *response)
ds3_tape_partition_failure_response ** tape_partition_failures
ds3_bulk_object_response ** objects
ds3_str * description_for_identification
ds3_s3_target_bucket_name_response ** s3_target_bucket_names
ds3_str * notification_generation_date
void ds3_active_job_response_free(ds3_active_job_response *response)
size_t num_s3_object_lost_notification_registrations
size_t num_ds3_target_failure_notification_registrations
ds3_pool_failure_notification_registration_response ** pool_failure_notification_registrations
void ds3_s3_target_failure_notification_payload_response_free(ds3_s3_target_failure_notification_payload_response *response)
void ds3_storage_domain_member_list_response_free(ds3_storage_domain_member_list_response *response)
ds3_str * notification_end_point
ds3_multi_part_upload_part_response ** parts
void ds3_detailed_tape_failure_response_free(ds3_detailed_tape_failure_response *response)
void ds3_pool_failure_notification_payload_response_free(ds3_pool_failure_notification_payload_response *response)
ds3_str * last_notification
ds3_target_failure_response ** ds3_target_failures
size_t num_s3_object_persisted_notification_registrations
void ds3_blob_store_tasks_information_response_free(ds3_blob_store_tasks_information_response *response)
void ds3_cache_entry_information_response_free(ds3_cache_entry_information_response *response)
size_t num_suspect_blob_s3_targets
void ds3_bucket_acl_response_free(ds3_bucket_acl_response *response)
void ds3_contents_response_free(ds3_contents_response *response)
void ds3_paging_free(ds3_paging *paging)
ds3_str * storage_domain_id
void ds3_s3_object_response_free(ds3_s3_object_response *response)
void ds3_storage_domain_member_response_free(ds3_storage_domain_member_response *response)
ds3_error_response * error
void ds3_s3_data_replication_rule_list_response_free(ds3_s3_data_replication_rule_list_response *response)
ds3_user_response * owner
size_t num_deleted_objects
ds3_str * notification_generation_date
void ds3_job_created_notification_registration_response_free(ds3_job_created_notification_registration_response *response)
ds3_str * read_from_s3_target_id
void(* log_callback)(const char *log_message, void *user_data)
ds3_str * last_notification
ds3_tape_drive_response ** tape_drives
void ds3_bucket_details_response_free(ds3_bucket_details_response *response)
size_t num_azure_target_failures
ds3_active_job_response ** active_jobs
void ds3_blob_store_task_information_response_free(ds3_blob_store_task_information_response *response)
ds3_tape_failure_response ** failures
void ds3_suspect_blob_s3_target_response_free(ds3_suspect_blob_s3_target_response *response)
void ds3_multi_part_upload_part_response_free(ds3_multi_part_upload_part_response *response)
ds3_s3_object_cached_notification_registration_response ** s3_object_cached_notification_registrations
void ds3_list_parts_result_response_free(ds3_list_parts_result_response *response)
ds3_str * auto_eject_upon_cron
ds3_azure_target_bucket_name_response ** azure_target_bucket_names
size_t num_s3_target_read_preferences
ds3_cache_filesystem_response ** cache_filesystems
void ds3_suspect_blob_tape_response_free(ds3_suspect_blob_tape_response *response)
ds3_s3_object_persisted_notification_registration_response ** s3_object_persisted_notification_registrations
void ds3_group_member_list_response_free(ds3_group_member_list_response *response)
size_t num_storage_domain_failures
ds3_str * cloud_bucket_suffix
ds3_str * cloud_bucket_suffix
ds3_str ** common_prefixes
size_t num_cache_filesystems
void ds3_bucket_list_response_free(ds3_bucket_list_response *response)
ds3_canceled_job_response ** canceled_jobs
ds3_azure_target_failure_notification_registration_response ** azure_target_failure_notification_registrations
ds3_data_policy_response ** data_policies
void ds3_cache_information_response_free(ds3_cache_information_response *response)
ds3_group_member_response ** group_members
void ds3_spectra_user_list_response_free(ds3_spectra_user_list_response *response)
ds3_bulk_object_response ** objects
size_t num_azure_target_bucket_names
void ds3_pool_response_free(ds3_pool_response *response)
void ds3_group_member_response_free(ds3_group_member_response *response)
size_t num_common_prefixes
void ds3_suspect_blob_pool_response_free(ds3_suspect_blob_pool_response *response)
ds3_str * data_path_end_point
void ds3_job_creation_failed_notification_registration_list_response_free(ds3_job_creation_failed_notification_registration_list_response *response)
void ds3_bucket_acl_list_response_free(ds3_bucket_acl_list_response *response)
void ds3_azure_data_replication_rule_response_free(ds3_azure_data_replication_rule_response *response)
void ds3_tape_failure_notification_registration_response_free(ds3_tape_failure_notification_registration_response *response)
ds3_str * read_from_pool_id
size_t num_job_creation_failed_notification_registrations
ds3_group_response ** groups
size_t num_azure_target_read_preferences
void ds3_pool_failure_list_response_free(ds3_pool_failure_list_response *response)
void ds3_data_policy_response_free(ds3_data_policy_response *response)
size_t num_data_policy_acls
ds3_azure_target_response ** azure_targets
void ds3_system_failure_notification_payload_response_free(ds3_system_failure_notification_payload_response *response)
size_t ds3_read_from_file(void *buffer, size_t size, size_t nmemb, void *user_data)
ds3_str * notification_generation_date
ds3_detailed_tape_failure_response ** detailed_tape_failures
void ds3_detailed_s3_object_response_free(ds3_detailed_s3_object_response *response)
void ds3_tape_partition_failure_notification_payload_response_free(ds3_tape_partition_failure_notification_payload_response *response)
ds3_storage_domain_member_response ** storage_domain_members
void ds3_error_free(ds3_error *error)
ds3_job_created_notification_registration_response ** job_created_notification_registrations
void ds3_user_response_free(ds3_user_response *response)
size_t num_objects_not_persisted
void ds3_s3_object_to_delete_response_free(ds3_s3_object_to_delete_response *response)
void ds3_list_multi_part_uploads_result_response_free(ds3_list_multi_part_uploads_result_response *response)
size_t num_azure_target_failure_notification_registrations
ds3_tape_drive_type * drive_types
void ds3_suspect_blob_azure_target_response_free(ds3_suspect_blob_azure_target_response *response)
ds3_str * notification_end_point
void ds3_client_proxy(ds3_client *client, const char *proxy)
void ds3_azure_target_failure_notification_payload_response_free(ds3_azure_target_failure_notification_payload_response *response)
ds3_error * net_process_request(const ds3_client *client, const ds3_request *_request, void *read_user_struct, size_t(*read_handler_func)(void *, size_t, size_t, void *), void *write_user_struct, size_t(*write_handler_func)(void *, size_t, size_t, void *), ds3_string_multimap **return_headers)
ds3_str * notification_end_point
ds3_bucket_details_response ** buckets
void ds3_s3_object_lost_notification_registration_response_free(ds3_s3_object_lost_notification_registration_response *response)
ds3_str * last_notification
ds3_str * storage_domain_id
size_t num_s3_target_failures
void ds3_target_response_free(ds3_target_response *response)
size_t num_storage_domain_failure_notification_registrations
ds3_str * partially_verified_end_of_tape
ds3_str * notification_generation_date
void ds3_s3_target_list_response_free(ds3_s3_target_list_response *response)
ds3_connection_pool * connection_pool
void ds3_storage_domain_failure_list_response_free(ds3_storage_domain_failure_list_response *response)
void ds3_master_object_list_response_free(ds3_master_object_list_response *response)
void ds3_target_failure_list_response_free(ds3_target_failure_list_response *response)
void ds3_target_list_response_free(ds3_target_list_response *response)
ds3_bulk_object_response ** objects
ds3_str * notification_generation_date
void ds3_system_failure_response_free(ds3_system_failure_response *response)
ds3_bulk_object_response ** objects
size_t num_azure_data_replication_rules
size_t num_suspect_blob_pools
void ds3_tape_partition_failure_response_free(ds3_tape_partition_failure_response *response)
ds3_str * notification_generation_date
void ds3_tape_partition_failure_notification_registration_list_response_free(ds3_tape_partition_failure_notification_registration_list_response *response)
ds3_str * next_key_marker
void ds3_job_list_response_free(ds3_job_list_response *response)
size_t num_pool_partitions
void ds3_pool_partition_list_response_free(ds3_pool_partition_list_response *response)
void ds3_data_persistence_rule_list_response_free(ds3_data_persistence_rule_list_response *response)
ds3_contents_response ** objects
void ds3_spectra_user_response_free(ds3_spectra_user_response *response)
void ds3_initiate_multipart_upload_result_response_free(ds3_initiate_multipart_upload_result_response *response)
ds3_s3_object_response ** s3_objects
void ds3_s3_target_response_free(ds3_s3_target_response *response)
ds3_str * notification_generation_date
void ds3_data_policy_list_response_free(ds3_data_policy_list_response *response)
ds3_str * ds3_str_init(const char *string)
void ds3_delete_result_response_free(ds3_delete_result_response *response)
void ds3_client_register_net(ds3_client *client, ds3_error *(*net_callback)(const ds3_client *client, const ds3_request *_request, void *read_user_struct, size_t(*read_handler_func)(void *, size_t, size_t, void *), void *write_user_struct, size_t(*write_handler_func)(void *, size_t, size_t, void *), ds3_string_multimap **return_headers))
void ds3_canceled_job_list_response_free(ds3_canceled_job_list_response *response)
ds3_str * member_group_id
void ds3_job_creation_failed_notification_payload_response_free(ds3_job_creation_failed_notification_payload_response *response)
void ds3_system_failure_notification_registration_response_free(ds3_system_failure_notification_registration_response *response)
ds3_s3_target_response ** s3_targets
void ds3_suspect_blob_tape_list_response_free(ds3_suspect_blob_tape_list_response *response)
void ds3_canceled_job_response_free(ds3_canceled_job_response *response)
ds3_tape_failure_notification_registration_response ** tape_failure_notification_registrations
void ds3_azure_target_bucket_name_list_response_free(ds3_azure_target_bucket_name_list_response *response)
ds3_str * cloud_bucket_prefix
void ds3_type_response_free(ds3_type_response *response)
ds3_str * storage_domain_id
ds3_tape_drive_type * drive_types
ds3_str * last_notification
void ds3_complete_multipart_upload_response_free(ds3_complete_multipart_upload_response *response)
void ds3_named_detailed_tape_partition_response_free(ds3_named_detailed_tape_partition_response *response)
ds3_creds * ds3_create_creds(const char *access_id, const char *secret_key)
ds3_bulk_object_list_response * ds3_convert_object_list_from_strings(const char **objects, uint64_t num_objects)
void ds3_completed_job_list_response_free(ds3_completed_job_list_response *response)
size_t num_tape_bar_codes
size_t num_pool_failure_notification_registrations
void ds3_tape_density_directive_list_response_free(ds3_tape_density_directive_list_response *response)
ds3_bulk_object_list_response * ds3_init_bulk_object_list_with_size(size_t num_objects)
ds3_degraded_blob_response ** degraded_blobs
ds3_target_response ** ds3_targets
ds3_user_response * owner
void ds3_generic_dao_notification_registration_response_free(ds3_generic_dao_notification_registration_response *response)
size_t num_tape_partition_failure_notification_registrations
void ds3_job_created_notification_registration_list_response_free(ds3_job_created_notification_registration_list_response *response)
void ds3_tape_drive_response_free(ds3_tape_drive_response *response)
void ds3_physical_placement_response_free(ds3_physical_placement_response *response)
size_t num_ds3_target_read_preferences
ds3_target_read_preference_response ** ds3_target_read_preferences
size_t num_common_prefixes
void ds3_system_information_response_free(ds3_system_information_response *response)
ds3_str * notification_end_point
void ds3_detailed_tape_failure_list_response_free(ds3_detailed_tape_failure_list_response *response)
void ds3_suspect_blob_azure_target_list_response_free(ds3_suspect_blob_azure_target_list_response *response)
ds3_tape_response ** tapes
void ds3_tape_partition_response_free(ds3_tape_partition_response *response)
ds3_str * last_fully_verified
ds3_str * notification_end_point
ds3_job_node_response ** nodes
size_t num_suspect_blob_tapes
void ds3_tape_library_list_response_free(ds3_tape_library_list_response *response)
void ds3_data_replication_rule_response_free(ds3_data_replication_rule_response *response)
void ds3_suspect_blob_s3_target_list_response_free(ds3_suspect_blob_s3_target_list_response *response)
ds3_tape_response ** tapes
ds3_str * notification_end_point
ds3_str * notification_generation_date