-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patherror.h
134 lines (110 loc) · 3.82 KB
/
error.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
// Copyright 2018 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SHILL_ERROR_H_
#define SHILL_ERROR_H_
#include <memory>
#include <string>
#include <string_view>
#include <base/location.h>
namespace brillo {
class Error;
using ErrorPtr = std::unique_ptr<Error>;
} // namespace brillo
namespace shill {
class Error {
public:
enum Type {
kSuccess = 0, // No error.
kOperationFailed, // failure, otherwise unspecified
kAlreadyConnected,
kAlreadyExists,
kIllegalOperation,
kIncorrectPin,
kInProgress,
kInternalError,
kInvalidApn,
kInvalidArguments,
kInvalidNetworkName,
kInvalidPassphrase,
kInvalidProperty,
kNoCarrier,
kNotConnected,
kNotFound,
kNotImplemented,
kNotOnHomeNetwork,
kNotRegistered,
kNotSupported,
kOperationAborted,
kOperationTimeout,
kPassphraseRequired,
kPermissionDenied,
kPinBlocked,
kPinRequired,
kTechnologyNotAvailable,
kWepNotSupported,
kWrongState,
kOperationNotAllowed,
kNumErrors,
};
Error(); // Success by default.
explicit Error(Type type); // Uses the default message for |type|.
Error(Type type, std::string_view message);
Error(Type type,
std::string_view message,
std::string_view detailed_error_type);
Error(Type type, std::string_view message, const base::Location& location);
Error(const Error&);
Error& operator=(const Error&);
~Error();
void Populate(Type type); // Uses the default message for |type|.
void Populate(Type type, std::string_view message);
void Populate(Type type,
std::string_view message,
std::string_view detailed_error_type);
void Populate(Type type,
std::string_view message,
const base::Location& location);
void Log() const;
void Reset();
// Sets the Chromeos |error| and returns true if Error represents failure.
// Leaves error unchanged, and returns false otherwise.
bool ToChromeosError(brillo::ErrorPtr* error) const;
bool ToChromeosErrorNoLog(brillo::ErrorPtr* error) const;
bool ToDetailedError(brillo::ErrorPtr* error) const;
bool ToDetailedErrorNoLog(brillo::ErrorPtr* error) const;
Type type() const { return type_; }
const std::string& message() const { return message_; }
const base::Location& location() const { return location_; }
bool IsSuccess() const { return type_ == kSuccess; }
bool IsFailure() const { return !IsSuccess(); }
static std::string GetDBusResult(Type type);
static std::string GetDefaultMessage(Type type);
static void LogMessage(const base::Location& from_here,
Type type,
std::string_view message);
// Log an error message from |from_here|. If |error| is non-NULL, also
// populate it.
static void PopulateAndLog(const base::Location& from_here,
Error* error,
Type type,
std::string_view message);
static std::string GetLocationAsString(const base::Location& location);
// Note: This error message is used in tast tests.
static constexpr char kServiceNotFoundMsg[] =
"Matching service was not found";
private:
Type type_;
std::string message_;
// For frontend we need a user friendly error message, but for effective
// diagnostics we also need the actual error reported by the underlying
// connectivity module which could be reported through UMA or
// structured metrics.
std::string detailed_error_type_;
std::string detailed_message_;
base::Location location_;
};
// stream operator provided to facilitate logging
std::ostream& operator<<(std::ostream& stream, const shill::Error& error);
} // namespace shill
#endif // SHILL_ERROR_H_