910e62b5创建于 1月15日历史提交
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "dbus/dbus_result.h"
#include "dbus/message.h"

namespace dbus {

DBusResult GetResult(dbus::ErrorResponse* response) {
  if (!response) {
    return DBusResult::kErrorResponseMissing;
  }

  const std::string& error_name = response->GetErrorName();
  if (error_name == DBUS_ERROR_NO_REPLY) {
    return DBusResult::kErrorNoReply;
  }

  if (error_name == DBUS_ERROR_TIMEOUT) {
    return DBusResult::kErrorTimeout;
  }

  if (error_name == DBUS_ERROR_TIMED_OUT) {
    return DBusResult::kErrorTimedOut;
  }

  if (error_name == DBUS_ERROR_NOT_SUPPORTED) {
    return DBusResult::kErrorNotSupported;
  }

  if (error_name == DBUS_ERROR_ACCESS_DENIED) {
    return DBusResult::kErrorAccessDenied;
  }

  if (error_name == DBUS_ERROR_DISCONNECTED) {
    return DBusResult::kErrorDisconnected;
  }

  if (error_name == DBUS_ERROR_FAILED) {
    return DBusResult::kErrorFailed;
  }

  if (error_name == DBUS_ERROR_NO_MEMORY) {
    return DBusResult::kErrorNoMemory;
  }

  if (error_name == DBUS_ERROR_SERVICE_UNKNOWN) {
    return DBusResult::kErrorServiceUnknown;
  }

  if (error_name == DBUS_ERROR_NAME_HAS_NO_OWNER) {
    return DBusResult::kErrorNameHasNoOwner;
  }

  if (error_name == DBUS_ERROR_IO_ERROR) {
    return DBusResult::kErrorIOError;
  }

  if (error_name == DBUS_ERROR_BAD_ADDRESS) {
    return DBusResult::kErrorBadAddress;
  }

  if (error_name == DBUS_ERROR_LIMITS_EXCEEDED) {
    return DBusResult::kErrorLimitsExceeded;
  }

  if (error_name == DBUS_ERROR_AUTH_FAILED) {
    return DBusResult::kErrorAuthFailed;
  }

  if (error_name == DBUS_ERROR_NO_SERVER) {
    return DBusResult::kErrorNoServer;
  }

  if (error_name == DBUS_ERROR_NO_NETWORK) {
    return DBusResult::kErrorNoNetwork;
  }

  if (error_name == DBUS_ERROR_ADDRESS_IN_USE) {
    return DBusResult::kErrorAddressInUse;
  }

  if (error_name == DBUS_ERROR_DISCONNECTED) {
    return DBusResult::kErrorDisconnected;
  }

  if (error_name == DBUS_ERROR_INVALID_ARGS) {
    return DBusResult::kErrorInvalidArgs;
  }

  if (error_name == DBUS_ERROR_FILE_NOT_FOUND) {
    return DBusResult::kErrorFileNotFound;
  }

  if (error_name == DBUS_ERROR_FILE_EXISTS) {
    return DBusResult::kErrorFileExists;
  }

  if (error_name == DBUS_ERROR_UNKNOWN_METHOD) {
    return DBusResult::kErrorUnknownMethod;
  }

  if (error_name == DBUS_ERROR_UNKNOWN_OBJECT) {
    return DBusResult::kErrorUnknownObject;
  }

  if (error_name == DBUS_ERROR_UNKNOWN_INTERFACE) {
    return DBusResult::kErrorUnknownInterface;
  }

  if (error_name == DBUS_ERROR_UNKNOWN_PROPERTY) {
    return DBusResult::kErrorUnknownProperty;
  }

  if (error_name == DBUS_ERROR_PROPERTY_READ_ONLY) {
    return DBusResult::kErrorPropertyReadOnly;
  }

  if (error_name == DBUS_ERROR_MATCH_RULE_NOT_FOUND) {
    return DBusResult::kErrorMatchRuleNotFound;
  }

  if (error_name == DBUS_ERROR_MATCH_RULE_INVALID) {
    return DBusResult::kErrorMatchRuleInvalid;
  }

  if (error_name == DBUS_ERROR_SPAWN_EXEC_FAILED) {
    return DBusResult::kErrorSpawnExecFailed;
  }

  if (error_name == DBUS_ERROR_SPAWN_FORK_FAILED) {
    return DBusResult::kErrorSpawnForkFailed;
  }

  if (error_name == DBUS_ERROR_SPAWN_CHILD_EXITED) {
    return DBusResult::kErrorSpawnChildExited;
  }

  if (error_name == DBUS_ERROR_SPAWN_CHILD_SIGNALED) {
    return DBusResult::kErrorSpawnChildSignaled;
  }

  if (error_name == DBUS_ERROR_SPAWN_FAILED) {
    return DBusResult::kErrorSpawnFailed;
  }

  if (error_name == DBUS_ERROR_SPAWN_SETUP_FAILED) {
    return DBusResult::kErrorSpawnSetupFailed;
  }

  if (error_name == DBUS_ERROR_SPAWN_CONFIG_INVALID) {
    return DBusResult::kErrorSpawnConfigInvalid;
  }

  if (error_name == DBUS_ERROR_SPAWN_SERVICE_INVALID) {
    return DBusResult::kErrorSpawnServiceInvalid;
  }

  if (error_name == DBUS_ERROR_SPAWN_SERVICE_NOT_FOUND) {
    return DBusResult::kErrorSpawnServiceNotFound;
  }

  if (error_name == DBUS_ERROR_SPAWN_PERMISSIONS_INVALID) {
    return DBusResult::kErrorSpawnPermissionsInvalid;
  }

  if (error_name == DBUS_ERROR_SPAWN_FILE_INVALID) {
    return DBusResult::kErrorSpawnFileInvalid;
  }

  if (error_name == DBUS_ERROR_SPAWN_NO_MEMORY) {
    return DBusResult::kErrorSpawnNoMemory;
  }

  if (error_name == DBUS_ERROR_UNIX_PROCESS_ID_UNKNOWN) {
    return DBusResult::kErrorUnixProcessIDUnknown;
  }

  if (error_name == DBUS_ERROR_INVALID_SIGNATURE) {
    return DBusResult::kErrorInvalidSignature;
  }

  if (error_name == DBUS_ERROR_INVALID_FILE_CONTENT) {
    return DBusResult::kErrorInvalidFileContent;
  }

  if (error_name == DBUS_ERROR_SELINUX_SECURITY_CONTEXT_UNKNOWN) {
    return DBusResult::kErrorSELinuxSecurityContextUnknown;
  }

  if (error_name == DBUS_ERROR_ADT_AUDIT_DATA_UNKNOWN) {
    return DBusResult::kErrorAdtAuditDataUnknown;
  }

  if (error_name == DBUS_ERROR_OBJECT_PATH_IN_USE) {
    return DBusResult::kErrorObjectPathInUse;
  }

  if (error_name == DBUS_ERROR_INCONSISTENT_MESSAGE) {
    return DBusResult::kErrorInconsistentMessage;
  }

  if (error_name == DBUS_ERROR_INTERACTIVE_AUTHORIZATION_REQUIRED) {
    return DBusResult::kErrorInteractiveAuthorizationRequired;
  }

  return DBusResult::kErrorUnknown;
}

}  // namespace dbus