mirror of
https://github.com/akuker/RASCSI.git
synced 2024-12-21 08:29:59 +00:00
Added safeguard against unknown operations
This commit is contained in:
parent
6b14ba6511
commit
b8599ba088
@ -173,10 +173,12 @@ message PbOperationParameter {
|
||||
|
||||
// The list of parameters supported by an operation
|
||||
message PbOperationMetaData {
|
||||
// The operation name at the time the server-side protobuf code was generated.
|
||||
string name = 1;
|
||||
// Optional short localized description, key is the lower case locale (e.g. en, de).
|
||||
// Falling back to "en" is recommended if a description for a particular language is missing.
|
||||
map<string, string> description = 1;
|
||||
repeated PbOperationParameter parameters = 2;
|
||||
map<string, string> description = 2;
|
||||
repeated PbOperationParameter parameters = 3;
|
||||
}
|
||||
|
||||
// Mapping of operations to their ordinals
|
||||
|
@ -467,6 +467,7 @@ PbOperationInfo *RascsiResponse::GetOperationInfo(PbResult& result)
|
||||
void RascsiResponse::CreateOperation(PbOperationInfo *operation_info, PbOperationMetaData *meta_data,
|
||||
const PbOperation& operation, const string& description)
|
||||
{
|
||||
meta_data->set_name(PbOperation_Name(operation));
|
||||
(*meta_data->mutable_description())["en"] = description;
|
||||
int ordinal = PbOperation_descriptor()->FindValueByName(PbOperation_Name(operation))->index();
|
||||
(*operation_info->mutable_operations())[ordinal] = *meta_data;
|
||||
|
@ -281,36 +281,41 @@ void RasctlDisplay::DisplayOperationInfo(const PbOperationInfo& operation_info)
|
||||
|
||||
cout << "Remote operations supported by rascsi and their parameters:" << endl;
|
||||
for (const auto& operation : operations) {
|
||||
cout << " " << PbOperation_Name(operation.first);
|
||||
if (!operation.second.description().empty()) {
|
||||
cout << " (" << operation.second.description().at("en") << ")";
|
||||
}
|
||||
cout << endl;
|
||||
|
||||
for (const auto& parameter : operation.second.parameters()) {
|
||||
cout << " " << parameter.name() << ": "
|
||||
<< (parameter.default_value().empty() ? "mandatory" : "optional");
|
||||
if (!parameter.description().empty()) {
|
||||
cout << " (" << parameter.description().at("en") << ")";
|
||||
if (PbOperation_IsValid(operation.first)) {
|
||||
cout << " " << PbOperation_Name(static_cast<PbOperation>(operation.first));
|
||||
if (!operation.second.description().empty()) {
|
||||
cout << " (" << operation.second.description().at("en") << ")";
|
||||
}
|
||||
cout << endl;
|
||||
|
||||
if (parameter.permitted_values_size()) {
|
||||
cout << " Permitted values: ";
|
||||
bool isFirst = true;
|
||||
for (const auto& permitted_value : parameter.permitted_values()) {
|
||||
if (!isFirst) {
|
||||
cout << ", ";
|
||||
}
|
||||
isFirst = false;
|
||||
cout << permitted_value;
|
||||
for (const auto& parameter : operation.second.parameters()) {
|
||||
cout << " " << parameter.name() << ": "
|
||||
<< (parameter.default_value().empty() ? "mandatory" : "optional");
|
||||
if (!parameter.description().empty()) {
|
||||
cout << " (" << parameter.description().at("en") << ")";
|
||||
}
|
||||
cout << endl;
|
||||
}
|
||||
|
||||
if (!parameter.default_value().empty()) {
|
||||
cout << " Default value: " << parameter.default_value() << endl;
|
||||
if (parameter.permitted_values_size()) {
|
||||
cout << " Permitted values: ";
|
||||
bool isFirst = true;
|
||||
for (const auto& permitted_value : parameter.permitted_values()) {
|
||||
if (!isFirst) {
|
||||
cout << ", ";
|
||||
}
|
||||
isFirst = false;
|
||||
cout << permitted_value;
|
||||
}
|
||||
cout << endl;
|
||||
}
|
||||
|
||||
if (!parameter.default_value().empty()) {
|
||||
cout << " Default value: " << parameter.default_value() << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
cout << " " << operation.second.name() << " (Unknown server-side operation)" << endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user