23 #include <libxml/parser.h> 41 #define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) 47 fprintf(stderr,
"Cannot configure a null ds3_client for logging.\n");
50 if (client->
log != NULL) {
63 if (access_id == NULL || secret_key == NULL) {
64 fprintf(stderr,
"Arguments cannot be NULL\n");
77 void* read_user_struct,
78 size_t (*read_handler_func)(
void*,
size_t,
size_t,
void*),
79 void* write_user_struct,
80 size_t (*write_handler_func)(
void*,
size_t,
size_t,
void*),
83 fprintf(stderr,
"Cannot configure a null ds3_client for net_callback.\n");
92 if (endpoint == NULL) {
93 fprintf(stderr,
"Null endpoint\n");
99 client->
creds = creds;
112 char* endpoint = getenv(
"DS3_ENDPOINT");
113 char* access_key = getenv(
"DS3_ACCESS_KEY");
114 char* secret_key = getenv(
"DS3_SECRET_KEY");
115 char* http_proxy = getenv(
"http_proxy");
117 if (endpoint == NULL) {
121 if (access_key == NULL) {
125 if (secret_key == NULL) {
132 if (http_proxy != NULL) {
143 if (client == NULL) {
160 return copied_client;
179 if (client == NULL) {
195 return fwrite(buffer, size, nmemb, (FILE*) user_data);
199 return fread(buffer, size, nmemb, (FILE*) user_data);
203 return write(*(
int*)user_data, buffer, size * nmemb);
207 return read(*(
int*)user_data, buffer, size * nmemb);
211 static void get_file_size_windows(
const char* file_path, uint64_t* file_size) {
212 BY_HANDLE_FILE_INFORMATION info;
214 char * file_path_windows;
215 gunichar2 * file_path_windows_wide;
218 file_path_windows = g_strdup(file_path);
221 for (
char * ch = file_path_windows; *ch !=
'\0'; ++ch) {
223 case '/': *ch =
'\\';
break;
230 file_path_windows_wide = g_utf8_to_utf16(file_path_windows, -1, NULL, NULL, NULL);
231 if (file_path_windows_wide == NULL) {
232 fprintf(stderr,
"error converting file name to wide char '%s'\n", file_path_windows);
233 g_free(file_path_windows);
239 file_handle = CreateFileW(
240 (
wchar_t*)file_path_windows_wide,
241 FILE_READ_ATTRIBUTES,
242 FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
245 FILE_ATTRIBUTE_NORMAL,
247 g_free(file_path_windows_wide);
249 if (file_handle == INVALID_HANDLE_VALUE) {
250 g_free(file_path_windows);
251 fprintf(stderr,
"error opening file '%s'\n", file_path_windows);
255 res = GetFileInformationByHandle(file_handle, &info);
256 CloseHandle(file_handle);
259 fprintf(stderr,
"error getting file attributes\n");
260 g_free(file_path_windows);
265 if (!(info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
267 size.LowPart = info.nFileSizeLow;
268 size.HighPart = info.nFileSizeHigh;
270 *file_size = size.QuadPart;
275 g_free(file_path_windows);
282 struct stat file_info;
285 result = stat(file_path, &file_info);
287 fprintf(stderr,
"Failed to get file info for '%s' res=%d errno=%d: %s\n", file_path, result, errno, strerror(errno));
292 if (
S_ISDIR(file_info.st_mode)) {
295 *file_size = file_info.st_size;
302 get_file_size_windows(file_path, &size);
310 struct stat file_info;
314 memset(&file_info, 0,
sizeof(
struct stat));
316 if (base_path != NULL) {
317 file_to_stat = g_strconcat(base_path, file_name, NULL);
319 file_to_stat = g_strdup(file_name);
325 get_file_size_windows(file_to_stat, &obj->
length);
330 g_free(file_to_stat);
343 GPtrArray* ds3_bulk_object_response_array = g_ptr_array_new();
344 for (file_index = 0; file_index < num_files; file_index++) {
349 obj_list->
num_objects = ds3_bulk_object_response_array->len;
350 g_ptr_array_free(ds3_bulk_object_response_array, FALSE);
359 GPtrArray* ds3_bulk_object_response_array = g_ptr_array_new();
361 for (object_index = 0; object_index < num_objects; object_index++) {
366 g_ptr_array_add(ds3_bulk_object_response_array, response);
370 obj_list->
num_objects = ds3_bulk_object_response_array->len;
371 g_ptr_array_free(ds3_bulk_object_response_array, FALSE);
380 GPtrArray* ds3_bulk_object_response_array = g_ptr_array_new();
382 for (object_index = 0; object_index < num_objects; object_index++) {
385 g_ptr_array_add(ds3_bulk_object_response_array, response);
389 obj_list->
num_objects = ds3_bulk_object_response_array->len;
390 g_ptr_array_free(ds3_bulk_object_response_array, FALSE);
403 GPtrArray* ds3_bulk_object_response_array = g_ptr_array_new();
405 for (object_index = 0; object_index < num_objects; object_index++) {
407 g_ptr_array_add(ds3_bulk_object_response_array, response);
411 obj_list->
num_objects = ds3_bulk_object_response_array->len;
412 g_ptr_array_free(ds3_bulk_object_response_array, FALSE);
417 if (response == NULL) {
427 if (response == NULL) {
432 for (index = 0; index < response->
num_parts; index++) {
435 g_free(response->
parts);
440 if (response == NULL) {
445 for (index = 0; index < response->
num_strings; index++) {
458 for (index = 0; index < ids->
num_strings; index++) {
466 if (response == NULL) {
488 if (_request == NULL) {
497 if (request->
headers != NULL) {
498 g_hash_table_destroy(request->
headers);
526 if (response == NULL) {
537 if (response == NULL) {
548 if (response == NULL) {
561 if (response == NULL) {
573 if (response == NULL) {
589 if (response == NULL) {
605 if (response == NULL) {
616 if (response == NULL) {
627 if (response == NULL) {
638 if (response == NULL) {
650 if (response == NULL) {
665 if (response == NULL) {
677 if (response == NULL) {
688 if (response == NULL) {
698 if (response == NULL) {
710 if (response == NULL) {
725 if (response == NULL) {
742 if (response == NULL) {
756 if (response == NULL) {
767 if (response == NULL) {
779 if (response == NULL) {
790 if (response == NULL) {
798 if (response == NULL) {
810 if (response == NULL) {
823 if (response == NULL) {
834 if (response == NULL) {
847 if (response == NULL) {
861 if (response == NULL) {
875 if (response == NULL) {
890 if (response == NULL) {
905 if (response == NULL) {
919 if (response == NULL) {
933 if (response == NULL) {
947 if (response == NULL) {
962 if (response == NULL) {
976 if (response == NULL) {
991 if (response == NULL) {
1005 if (response == NULL) {
1019 if (response == NULL) {
1033 if (response == NULL) {
1047 if (response == NULL) {
1061 if (response == NULL) {
1072 if (response == NULL) {
1090 if (response == NULL) {
1102 if (response == NULL) {
1112 if (response == NULL) {
1126 if (response == NULL) {
1137 if (response == NULL) {
1162 if (response == NULL) {
1173 if (response == NULL) {
1188 if (response == NULL) {
1201 if (response == NULL) {
1213 if (response == NULL) {
1226 if (response == NULL) {
1238 if (response == NULL) {
1253 if (response == NULL) {
1265 if (response == NULL) {
1277 if (response == NULL) {
1288 if (response == NULL) {
1303 if (response == NULL) {
1315 if (response == NULL) {
1326 if (response == NULL) {
1346 if (response == NULL) {
1358 if (response == NULL) {
1370 if (response == NULL) {
1381 if (response == NULL) {
1392 if (response == NULL) {
1403 if (response == NULL) {
1414 if (response == NULL) {
1425 if (response == NULL) {
1437 if (response == NULL) {
1449 if (response == NULL) {
1455 for (index = 0; index < response->
num_ids; index++) {
1458 g_free(response->
ids);
1464 if (response == NULL) {
1474 if (response == NULL) {
1486 if (response == NULL) {
1498 if (response == NULL) {
1511 if (response == NULL) {
1523 if (response == NULL) {
1534 if (response == NULL) {
1547 if (response == NULL) {
1559 if (response == NULL) {
1572 if (response == NULL) {
1589 if (response == NULL) {
1594 for (index = 0; index < response->
num_tasks; index++) {
1597 g_free(response->
tasks);
1602 if (response == NULL) {
1611 if (response == NULL) {
1617 for (index = 0; index < response->
num_entries; index++) {
1626 if (response == NULL) {
1639 if (response == NULL) {
1649 if (response == NULL) {
1661 if (response == NULL) {
1672 if (response == NULL) {
1691 if (response == NULL) {
1702 if (response == NULL) {
1713 if (response == NULL) {
1723 if (response == NULL) {
1733 if (response == NULL) {
1742 if (response == NULL) {
1752 if (response == NULL) {
1764 if (response == NULL) {
1772 if (response == NULL) {
1791 if (response == NULL) {
1801 if (response == NULL) {
1806 for (index = 0; index < response->
num_failures; index++) {
1814 if (response == NULL) {
1823 if (response == NULL) {
1833 if (response == NULL) {
1841 if (response == NULL) {
1855 if (response == NULL) {
1869 if (response == NULL) {
1874 for (index = 0; index < response->
num_buckets; index++) {
1883 if (response == NULL) {
1897 if (response == NULL) {
1911 if (response == NULL) {
1925 if (response == NULL) {
1939 if (response == NULL) {
1953 if (response == NULL) {
1967 if (response == NULL) {
1981 if (response == NULL) {
1995 if (response == NULL) {
2009 if (response == NULL) {
2023 if (response == NULL) {
2037 if (response == NULL) {
2051 if (response == NULL) {
2065 if (response == NULL) {
2079 if (response == NULL) {
2084 for (index = 0; index < response->
num_groups; index++) {
2087 g_free(response->
groups);
2093 if (response == NULL) {
2107 if (response == NULL) {
2121 if (response == NULL) {
2135 if (response == NULL) {
2140 for (index = 0; index < response->
num_nodes; index++) {
2143 g_free(response->
nodes);
2149 if (response == NULL) {
2163 if (response == NULL) {
2177 if (response == NULL) {
2191 if (response == NULL) {
2205 if (response == NULL) {
2219 if (response == NULL) {
2233 if (response == NULL) {
2247 if (response == NULL) {
2261 if (response == NULL) {
2275 if (response == NULL) {
2289 if (response == NULL) {
2303 if (response == NULL) {
2317 if (response == NULL) {
2331 if (response == NULL) {
2345 if (response == NULL) {
2359 if (response == NULL) {
2373 if (response == NULL) {
2378 for (index = 0; index < response->
num_pools; index++) {
2381 g_free(response->
pools);
2387 if (response == NULL) {
2401 if (response == NULL) {
2415 if (response == NULL) {
2429 if (response == NULL) {
2443 if (response == NULL) {
2457 if (response == NULL) {
2471 if (response == NULL) {
2485 if (response == NULL) {
2499 if (response == NULL) {
2513 if (response == NULL) {
2527 if (response == NULL) {
2541 if (response == NULL) {
2555 if (response == NULL) {
2560 for (index = 0; index < response->
num_tapes; index++) {
2563 g_free(response->
tapes);
2569 if (response == NULL) {
2583 if (response == NULL) {
2597 if (response == NULL) {
2611 if (response == NULL) {
2625 if (response == NULL) {
2639 if (response == NULL) {
2653 if (response == NULL) {
2667 if (response == NULL) {
2681 if (response == NULL) {
2695 if (response == NULL) {
2709 if (response == NULL) {
2723 if (response == NULL) {
2737 if (response == NULL) {
2750 for (index = 0; index < response->
num_pools; index++) {
2753 g_free(response->
pools);
2758 for (index = 0; index < response->
num_tapes; index++) {
2761 g_free(response->
tapes);
2766 if (response == NULL) {
2776 if (response == NULL) {
2789 if (response == NULL) {
2794 for (index = 0; index < response->
num_objects; index++) {
2803 if (response == NULL) {
2818 if (response == NULL) {
2829 if (response == NULL) {
2836 for (index = 0; index < response->
num_objects; index++) {
2844 if (response == NULL) {
2850 for (index = 0; index < response->
num_objects; index++) {
2858 if (response == NULL) {
2865 for (index = 0; index < response->
num_objects; index++) {
2873 if (response == NULL) {
2878 for (index = 0; index < response->
num_buckets; index++) {
2887 if (response == NULL) {
2896 for (index = 0; index < response->
num_errors; index++) {
2899 g_free(response->
errors);
2904 if (response == NULL) {
2912 for (index = 0; index < response->
num_nodes; index++) {
2915 g_free(response->
nodes);
2923 if (response == NULL) {
2930 for (index = 0; index < response->
num_objects; index++) {
2938 if (response == NULL) {
2946 for (index = 0; index < response->
num_nodes; index++) {
2949 g_free(response->
nodes);
2950 for (index = 0; index < response->
num_objects; index++) {
2961 if (response == NULL) {
2966 for (index = 0; index < response->
num_jobs; index++) {
2969 g_free(response->
jobs);
2974 if (response == NULL) {
2982 for (index = 0; index < response->
num_parts; index++) {
2985 g_free(response->
parts);
2991 if (response == NULL) {
3003 if (response == NULL) {
3017 if (response == NULL) {
3032 if (response == NULL) {
3037 for (index = 0; index < response->
num_types; index++) {
3040 g_free(response->
types);
3045 if (response == NULL) {
3059 if (response == NULL) {
3073 for (index = 0; index < response->
num_objects; index++) {
3086 if (response == NULL) {
3102 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)
void ds3_ids_list_free(ds3_ids_list *ids)
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
ds3_contents_response ** versioned_objects
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
void ds3_uint64_string_map_free(ds3_uint64_string_map *map)
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_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)
size_t num_versioned_objects
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_uint64_string_map * blob_checksums
ds3_str * last_fully_verified
size_t ds3_write_to_fd(void *buffer, size_t size, size_t nmemb, void *user_data)
LIBRARY_API void ds3_metadata_free(ds3_metadata *_metadata)
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_storage_domain_failure_response ** storage_domain_failures
ds3_suspect_blob_azure_target_response ** suspect_blob_azure_targets
ds3_str * storage_domain_member_id
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 * storage_domain_member_id
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_head_object_response_free(ds3_head_object_response *response)
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
ds3_checksum_type * blob_checksum_type
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
uint64_t ds3_get_file_size(const char *file_path)
ds3_str * notification_generation_date