Skip to content

Commit f938cb2

Browse files
authored
Merge pull request #201 from DenverM80/4_0_update
Update for SpectraS3 4.0 API
2 parents 7a02b5d + da97c4f commit f938cb2

File tree

3 files changed

+129
-10
lines changed

3 files changed

+129
-10
lines changed

src/ds3.c

Lines changed: 103 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,8 @@ static char* _get_ds3_tape_type_str(ds3_tape_type input) {
175175
return "LTO6";
176176
} else if (input == DS3_TAPE_TYPE_LTO7) {
177177
return "LTO7";
178+
} else if (input == DS3_TAPE_TYPE_LTO8) {
179+
return "LTO8";
178180
} else if (input == DS3_TAPE_TYPE_LTO_CLEANING_TAPE) {
179181
return "LTO_CLEANING_TAPE";
180182
} else if (input == DS3_TAPE_TYPE_TS_JC) {
@@ -423,6 +425,8 @@ static char* _get_ds3_pool_failure_type_str(ds3_pool_failure_type input) {
423425
return "FORMAT_FAILED";
424426
} else if (input == DS3_POOL_FAILURE_TYPE_IMPORT_FAILED) {
425427
return "IMPORT_FAILED";
428+
} else if (input == DS3_POOL_FAILURE_TYPE_IMPORT_INCOMPLETE) {
429+
return "IMPORT_INCOMPLETE";
426430
} else if (input == DS3_POOL_FAILURE_TYPE_IMPORT_FAILED_DUE_TO_TAKE_OWNERSHIP_FAILURE) {
427431
return "IMPORT_FAILED_DUE_TO_TAKE_OWNERSHIP_FAILURE";
428432
} else if (input == DS3_POOL_FAILURE_TYPE_IMPORT_FAILED_DUE_TO_DATA_INTEGRITY) {
@@ -547,6 +551,8 @@ static char* _get_ds3_tape_drive_type_str(ds3_tape_drive_type input) {
547551
return "LTO6";
548552
} else if (input == DS3_TAPE_DRIVE_TYPE_LTO7) {
549553
return "LTO7";
554+
} else if (input == DS3_TAPE_DRIVE_TYPE_LTO8) {
555+
return "LTO8";
550556
} else if (input == DS3_TAPE_DRIVE_TYPE_TS1140) {
551557
return "TS1140";
552558
} else if (input == DS3_TAPE_DRIVE_TYPE_TS1150) {
@@ -595,6 +601,8 @@ static char* _get_ds3_tape_failure_type_str(ds3_tape_failure_type input) {
595601
return "GET_TAPE_INFORMATION_FAILED";
596602
} else if (input == DS3_TAPE_FAILURE_TYPE_IMPORT_FAILED) {
597603
return "IMPORT_FAILED";
604+
} else if (input == DS3_TAPE_FAILURE_TYPE_IMPORT_INCOMPLETE) {
605+
return "IMPORT_INCOMPLETE";
598606
} else if (input == DS3_TAPE_FAILURE_TYPE_IMPORT_FAILED_DUE_TO_TAKE_OWNERSHIP_FAILURE) {
599607
return "IMPORT_FAILED_DUE_TO_TAKE_OWNERSHIP_FAILURE";
600608
} else if (input == DS3_TAPE_FAILURE_TYPE_IMPORT_FAILED_DUE_TO_DATA_INTEGRITY) {
@@ -637,6 +645,8 @@ static char* _get_ds3_tape_partition_failure_type_str(ds3_tape_partition_failure
637645
return "TAPE_DRIVE_IN_ERROR";
638646
} else if (input == DS3_TAPE_PARTITION_FAILURE_TYPE_TAPE_DRIVE_MISSING) {
639647
return "TAPE_DRIVE_MISSING";
648+
} else if (input == DS3_TAPE_PARTITION_FAILURE_TYPE_TAPE_DRIVE_QUIESCED) {
649+
return "TAPE_DRIVE_QUIESCED";
640650
} else if (input == DS3_TAPE_PARTITION_FAILURE_TYPE_TAPE_DRIVE_TYPE_MISMATCH) {
641651
return "TAPE_DRIVE_TYPE_MISMATCH";
642652
} else if (input == DS3_TAPE_PARTITION_FAILURE_TYPE_TAPE_EJECTION_BY_OPERATOR_REQUIRED) {
@@ -693,6 +703,8 @@ static char* _get_ds3_target_read_preference_type_str(ds3_target_read_preference
693703
static char* _get_ds3_target_failure_type_str(ds3_target_failure_type input) {
694704
if (input == DS3_TARGET_FAILURE_TYPE_IMPORT_FAILED) {
695705
return "IMPORT_FAILED";
706+
} else if (input == DS3_TARGET_FAILURE_TYPE_IMPORT_INCOMPLETE) {
707+
return "IMPORT_INCOMPLETE";
696708
} else if (input == DS3_TARGET_FAILURE_TYPE_NOT_ONLINE) {
697709
return "NOT_ONLINE";
698710
} else if (input == DS3_TARGET_FAILURE_TYPE_WRITE_FAILED) {
@@ -1512,10 +1524,6 @@ void ds3_request_set_error_message(const ds3_request* request, const char * cons
15121524
void ds3_request_set_expiration_date(const ds3_request* request, const char * const value) {
15131525
_set_query_param(request, "expiration_date", value);
15141526

1515-
}
1516-
void ds3_request_set_folder(const ds3_request* request, const char * const value) {
1517-
_set_query_param(request, "folder", value);
1518-
15191527
}
15201528
void ds3_request_set_force(const ds3_request* request, ds3_bool value) {
15211529
_set_query_param_flag(request, "force", value);
@@ -1844,6 +1852,10 @@ void ds3_request_set_secure_media_allocation(const ds3_request* request, ds3_boo
18441852
void ds3_request_set_serial_number(const ds3_request* request, const char * const value) {
18451853
_set_query_param(request, "serial_number", value);
18461854

1855+
}
1856+
void ds3_request_set_sort_by(const ds3_request* request, const char * const value) {
1857+
_set_query_param(request, "sort_by", value);
1858+
18471859
}
18481860
void ds3_request_set_staged_data_expiration_in_days(const ds3_request* request, const int value) {
18491861
_set_query_param_int(request, "staged_data_expiration_in_days", value);
@@ -2678,6 +2690,12 @@ ds3_request* ds3_init_clear_all_completed_jobs_spectra_s3_request(void) {
26782690
struct _ds3_request* request = _common_request_init(HTTP_DELETE, _build_path("/_rest_/completed_job/", NULL, NULL));
26792691
return (ds3_request*) request;
26802692
}
2693+
ds3_request* ds3_init_close_aggregating_job_spectra_s3_request(const char *const resource_id) {
2694+
struct _ds3_request* request = _common_request_init(HTTP_PUT, _build_path("/_rest_/job/", resource_id, NULL));
2695+
_set_query_param((ds3_request*) request, "close_aggregating_job", NULL);
2696+
2697+
return (ds3_request*) request;
2698+
}
26812699
ds3_request* ds3_init_get_bulk_job_spectra_s3_request(const char *const resource_id, const ds3_bulk_object_list_response* object_list) {
26822700
struct _ds3_request* request = _common_request_init(HTTP_PUT, _build_path("/_rest_/bucket/", resource_id, NULL));
26832701
_set_query_param((ds3_request*) request, "operation", "START_BULK_GET");
@@ -3636,6 +3654,10 @@ ds3_request* ds3_init_modify_all_tape_partitions_spectra_s3_request(const ds3_qu
36363654

36373655
return (ds3_request*) request;
36383656
}
3657+
ds3_request* ds3_init_modify_tape_drive_spectra_s3_request(const char *const resource_id) {
3658+
struct _ds3_request* request = _common_request_init(HTTP_PUT, _build_path("/_rest_/tape_drive/", resource_id, NULL));
3659+
return (ds3_request*) request;
3660+
}
36393661
ds3_request* ds3_init_modify_tape_partition_spectra_s3_request(const char *const resource_id) {
36403662
struct _ds3_request* request = _common_request_init(HTTP_PUT, _build_path("/_rest_/tape_partition/", resource_id, NULL));
36413663
return (ds3_request*) request;
@@ -4603,6 +4625,8 @@ static ds3_pool_failure_type _match_ds3_pool_failure_type(const ds3_log* log, co
46034625
return DS3_POOL_FAILURE_TYPE_FORMAT_FAILED;
46044626
} else if (xmlStrcmp(text, (const xmlChar*) "IMPORT_FAILED") == 0) {
46054627
return DS3_POOL_FAILURE_TYPE_IMPORT_FAILED;
4628+
} else if (xmlStrcmp(text, (const xmlChar*) "IMPORT_INCOMPLETE") == 0) {
4629+
return DS3_POOL_FAILURE_TYPE_IMPORT_INCOMPLETE;
46064630
} else if (xmlStrcmp(text, (const xmlChar*) "IMPORT_FAILED_DUE_TO_TAKE_OWNERSHIP_FAILURE") == 0) {
46074631
return DS3_POOL_FAILURE_TYPE_IMPORT_FAILED_DUE_TO_TAKE_OWNERSHIP_FAILURE;
46084632
} else if (xmlStrcmp(text, (const xmlChar*) "IMPORT_FAILED_DUE_TO_DATA_INTEGRITY") == 0) {
@@ -4717,6 +4741,8 @@ static ds3_tape_drive_type _match_ds3_tape_drive_type(const ds3_log* log, const
47174741
return DS3_TAPE_DRIVE_TYPE_LTO6;
47184742
} else if (xmlStrcmp(text, (const xmlChar*) "LTO7") == 0) {
47194743
return DS3_TAPE_DRIVE_TYPE_LTO7;
4744+
} else if (xmlStrcmp(text, (const xmlChar*) "LTO8") == 0) {
4745+
return DS3_TAPE_DRIVE_TYPE_LTO8;
47204746
} else if (xmlStrcmp(text, (const xmlChar*) "TS1140") == 0) {
47214747
return DS3_TAPE_DRIVE_TYPE_TS1140;
47224748
} else if (xmlStrcmp(text, (const xmlChar*) "TS1150") == 0) {
@@ -4751,6 +4777,8 @@ static ds3_tape_failure_type _match_ds3_tape_failure_type(const ds3_log* log, co
47514777
return DS3_TAPE_FAILURE_TYPE_GET_TAPE_INFORMATION_FAILED;
47524778
} else if (xmlStrcmp(text, (const xmlChar*) "IMPORT_FAILED") == 0) {
47534779
return DS3_TAPE_FAILURE_TYPE_IMPORT_FAILED;
4780+
} else if (xmlStrcmp(text, (const xmlChar*) "IMPORT_INCOMPLETE") == 0) {
4781+
return DS3_TAPE_FAILURE_TYPE_IMPORT_INCOMPLETE;
47544782
} else if (xmlStrcmp(text, (const xmlChar*) "IMPORT_FAILED_DUE_TO_TAKE_OWNERSHIP_FAILURE") == 0) {
47554783
return DS3_TAPE_FAILURE_TYPE_IMPORT_FAILED_DUE_TO_TAKE_OWNERSHIP_FAILURE;
47564784
} else if (xmlStrcmp(text, (const xmlChar*) "IMPORT_FAILED_DUE_TO_DATA_INTEGRITY") == 0) {
@@ -4793,6 +4821,8 @@ static ds3_tape_partition_failure_type _match_ds3_tape_partition_failure_type(co
47934821
return DS3_TAPE_PARTITION_FAILURE_TYPE_TAPE_DRIVE_IN_ERROR;
47944822
} else if (xmlStrcmp(text, (const xmlChar*) "TAPE_DRIVE_MISSING") == 0) {
47954823
return DS3_TAPE_PARTITION_FAILURE_TYPE_TAPE_DRIVE_MISSING;
4824+
} else if (xmlStrcmp(text, (const xmlChar*) "TAPE_DRIVE_QUIESCED") == 0) {
4825+
return DS3_TAPE_PARTITION_FAILURE_TYPE_TAPE_DRIVE_QUIESCED;
47964826
} else if (xmlStrcmp(text, (const xmlChar*) "TAPE_DRIVE_TYPE_MISMATCH") == 0) {
47974827
return DS3_TAPE_PARTITION_FAILURE_TYPE_TAPE_DRIVE_TYPE_MISMATCH;
47984828
} else if (xmlStrcmp(text, (const xmlChar*) "TAPE_EJECTION_BY_OPERATOR_REQUIRED") == 0) {
@@ -4883,6 +4913,8 @@ static ds3_tape_type _match_ds3_tape_type(const ds3_log* log, const xmlChar* tex
48834913
return DS3_TAPE_TYPE_LTO6;
48844914
} else if (xmlStrcmp(text, (const xmlChar*) "LTO7") == 0) {
48854915
return DS3_TAPE_TYPE_LTO7;
4916+
} else if (xmlStrcmp(text, (const xmlChar*) "LTO8") == 0) {
4917+
return DS3_TAPE_TYPE_LTO8;
48864918
} else if (xmlStrcmp(text, (const xmlChar*) "LTO_CLEANING_TAPE") == 0) {
48874919
return DS3_TAPE_TYPE_LTO_CLEANING_TAPE;
48884920
} else if (xmlStrcmp(text, (const xmlChar*) "TS_JC") == 0) {
@@ -4921,6 +4953,8 @@ static ds3_target_access_control_replication _match_ds3_target_access_control_re
49214953
static ds3_target_failure_type _match_ds3_target_failure_type(const ds3_log* log, const xmlChar* text) {
49224954
if (xmlStrcmp(text, (const xmlChar*) "IMPORT_FAILED") == 0) {
49234955
return DS3_TARGET_FAILURE_TYPE_IMPORT_FAILED;
4956+
} else if (xmlStrcmp(text, (const xmlChar*) "IMPORT_INCOMPLETE") == 0) {
4957+
return DS3_TARGET_FAILURE_TYPE_IMPORT_INCOMPLETE;
49244958
} else if (xmlStrcmp(text, (const xmlChar*) "NOT_ONLINE") == 0) {
49254959
return DS3_TARGET_FAILURE_TYPE_NOT_ONLINE;
49264960
} else if (xmlStrcmp(text, (const xmlChar*) "WRITE_FAILED") == 0) {
@@ -7606,6 +7640,13 @@ static ds3_error* _parse_ds3_tape_drive_response(const ds3_client* client, const
76067640
response->mfg_serial_number = xml_get_string(doc, child_node);
76077641
} else if (element_equal(child_node, "PartitionId")) {
76087642
response->partition_id = xml_get_string(doc, child_node);
7643+
} else if (element_equal(child_node, "Quiesced")) {
7644+
xmlChar* text = xmlNodeListGetString(doc, child_node, 1);
7645+
if (text == NULL) {
7646+
continue;
7647+
}
7648+
response->quiesced = _match_ds3_quiesced(client->log, text);
7649+
xmlFree(text);
76097650
} else if (element_equal(child_node, "SerialNumber")) {
76107651
response->serial_number = xml_get_string(doc, child_node);
76117652
} else if (element_equal(child_node, "State")) {
@@ -7753,6 +7794,8 @@ static ds3_error* _parse_ds3_tape_partition_response(const ds3_client* client, c
77537794
}
77547795
response->quiesced = _match_ds3_quiesced(client->log, text);
77557796
xmlFree(text);
7797+
} else if (element_equal(child_node, "SerialId")) {
7798+
response->serial_id = xml_get_string(doc, child_node);
77567799
} else if (element_equal(child_node, "SerialNumber")) {
77577800
response->serial_number = xml_get_string(doc, child_node);
77587801
} else if (element_equal(child_node, "State")) {
@@ -9026,6 +9069,8 @@ static ds3_error* _parse_ds3_named_detailed_tape_partition_response(const ds3_cl
90269069
}
90279070
response->quiesced = _match_ds3_quiesced(client->log, text);
90289071
xmlFree(text);
9072+
} else if (element_equal(child_node, "SerialId")) {
9073+
response->serial_id = xml_get_string(doc, child_node);
90299074
} else if (element_equal(child_node, "SerialNumber")) {
90309075
response->serial_number = xml_get_string(doc, child_node);
90319076
} else if (element_equal(child_node, "State")) {
@@ -12331,6 +12376,13 @@ static ds3_error* _parse_top_level_ds3_tape_drive_response(const ds3_client* cli
1233112376
response->mfg_serial_number = xml_get_string(doc, child_node);
1233212377
} else if (element_equal(child_node, "PartitionId")) {
1233312378
response->partition_id = xml_get_string(doc, child_node);
12379+
} else if (element_equal(child_node, "Quiesced")) {
12380+
xmlChar* text = xmlNodeListGetString(doc, child_node, 1);
12381+
if (text == NULL) {
12382+
continue;
12383+
}
12384+
response->quiesced = _match_ds3_quiesced(client->log, text);
12385+
xmlFree(text);
1233412386
} else if (element_equal(child_node, "SerialNumber")) {
1233512387
response->serial_number = xml_get_string(doc, child_node);
1233612388
} else if (element_equal(child_node, "State")) {
@@ -12458,6 +12510,8 @@ static ds3_error* _parse_top_level_ds3_tape_partition_response(const ds3_client*
1245812510
}
1245912511
response->quiesced = _match_ds3_quiesced(client->log, text);
1246012512
xmlFree(text);
12513+
} else if (element_equal(child_node, "SerialId")) {
12514+
response->serial_id = xml_get_string(doc, child_node);
1246112515
} else if (element_equal(child_node, "SerialNumber")) {
1246212516
response->serial_number = xml_get_string(doc, child_node);
1246312517
} else if (element_equal(child_node, "State")) {
@@ -13180,6 +13234,8 @@ static ds3_error* _parse_top_level_ds3_detailed_tape_partition_response(const ds
1318013234
}
1318113235
response->quiesced = _match_ds3_quiesced(client->log, text);
1318213236
xmlFree(text);
13237+
} else if (element_equal(child_node, "SerialId")) {
13238+
response->serial_id = xml_get_string(doc, child_node);
1318313239
} else if (element_equal(child_node, "SerialNumber")) {
1318413240
response->serial_number = xml_get_string(doc, child_node);
1318513241
} else if (element_equal(child_node, "State")) {
@@ -18981,6 +19037,26 @@ ds3_error* ds3_clear_all_completed_jobs_spectra_s3_request(const ds3_client* cli
1898119037

1898219038
return _internal_request_dispatcher(client, request, NULL, NULL, NULL, NULL, NULL);
1898319039
}
19040+
ds3_error* ds3_close_aggregating_job_spectra_s3_request(const ds3_client* client, const ds3_request* request, ds3_master_object_list_response** response) {
19041+
ds3_error* error;
19042+
GByteArray* xml_blob;
19043+
19044+
int num_slashes = num_chars_in_ds3_str(request->path, '/');
19045+
if (num_slashes < 2 || ((num_slashes == 2) && ('/' == request->path->value[request->path->size-1]))) {
19046+
return ds3_create_error(DS3_ERROR_MISSING_ARGS, "The resource type parameter is required.");
19047+
} else if (g_ascii_strncasecmp(request->path->value, "//", 2) == 0) {
19048+
return ds3_create_error(DS3_ERROR_MISSING_ARGS, "The resource id parameter is required.");
19049+
}
19050+
19051+
xml_blob = g_byte_array_new();
19052+
error = _internal_request_dispatcher(client, request, xml_blob, ds3_load_buffer, NULL, NULL, NULL);
19053+
if (error != NULL) {
19054+
g_byte_array_free(xml_blob, TRUE);
19055+
return error;
19056+
}
19057+
19058+
return _parse_top_level_ds3_master_object_list_response(client, request, response, xml_blob);
19059+
}
1898419060
ds3_error* ds3_get_bulk_job_spectra_s3_request(const ds3_client* client, const ds3_request* request, ds3_master_object_list_response** response) {
1898519061
ds3_error* error;
1898619062
ds3_xml_send_buff send_buff;
@@ -22227,6 +22303,26 @@ ds3_error* ds3_modify_all_tape_partitions_spectra_s3_request(const ds3_client* c
2222722303

2222822304
return _internal_request_dispatcher(client, request, NULL, NULL, NULL, NULL, NULL);
2222922305
}
22306+
ds3_error* ds3_modify_tape_drive_spectra_s3_request(const ds3_client* client, const ds3_request* request, ds3_tape_drive_response** response) {
22307+
ds3_error* error;
22308+
GByteArray* xml_blob;
22309+
22310+
int num_slashes = num_chars_in_ds3_str(request->path, '/');
22311+
if (num_slashes < 2 || ((num_slashes == 2) && ('/' == request->path->value[request->path->size-1]))) {
22312+
return ds3_create_error(DS3_ERROR_MISSING_ARGS, "The resource type parameter is required.");
22313+
} else if (g_ascii_strncasecmp(request->path->value, "//", 2) == 0) {
22314+
return ds3_create_error(DS3_ERROR_MISSING_ARGS, "The resource id parameter is required.");
22315+
}
22316+
22317+
xml_blob = g_byte_array_new();
22318+
error = _internal_request_dispatcher(client, request, xml_blob, ds3_load_buffer, NULL, NULL, NULL);
22319+
if (error != NULL) {
22320+
g_byte_array_free(xml_blob, TRUE);
22321+
return error;
22322+
}
22323+
22324+
return _parse_top_level_ds3_tape_drive_response(client, request, response, xml_blob);
22325+
}
2223022326
ds3_error* ds3_modify_tape_partition_spectra_s3_request(const ds3_client* client, const ds3_request* request, ds3_tape_partition_response** response) {
2223122327
ds3_error* error;
2223222328
GByteArray* xml_blob;
@@ -24160,6 +24256,7 @@ void ds3_tape_partition_response_free(ds3_tape_partition_response* response) {
2416024256
ds3_str_free(response->id);
2416124257
ds3_str_free(response->library_id);
2416224258
ds3_str_free(response->name);
24259+
ds3_str_free(response->serial_id);
2416324260
ds3_str_free(response->serial_number);
2416424261

2416524262
g_free(response);
@@ -24620,6 +24717,7 @@ void ds3_detailed_tape_partition_response_free(ds3_detailed_tape_partition_respo
2462024717
ds3_str_free(response->id);
2462124718
ds3_str_free(response->library_id);
2462224719
ds3_str_free(response->name);
24720+
ds3_str_free(response->serial_id);
2462324721
ds3_str_free(response->serial_number);
2462424722
g_free(response->tape_types);
2462524723

@@ -24716,6 +24814,7 @@ void ds3_named_detailed_tape_partition_response_free(ds3_named_detailed_tape_par
2471624814
ds3_str_free(response->id);
2471724815
ds3_str_free(response->library_id);
2471824816
ds3_str_free(response->name);
24817+
ds3_str_free(response->serial_id);
2471924818
ds3_str_free(response->serial_number);
2472024819
g_free(response->tape_types);
2472124820

0 commit comments

Comments
 (0)