1 //
2 // Copyright (C) 2015 The Android Open Source Project
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 //      http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16 #include "update_engine/update_status_utils.h"
17 
18 #include <base/logging.h>
19 #include <update_engine/dbus-constants.h>
20 
21 using update_engine::UpdateStatus;
22 
23 namespace {
24 
25 const char kWeaveStatusIdle[] = "idle";
26 const char kWeaveStatusCheckingForUpdate[] = "checkingForUpdate";
27 const char kWeaveStatusUpdateAvailable[] = "updateAvailable";
28 const char kWeaveStatusDownloading[] = "downloading";
29 const char kWeaveStatusVerifying[] = "verifying";
30 const char kWeaveStatusFinalizing[] = "finalizing";
31 const char kWeaveStatusUpdatedNeedReboot[] = "updatedNeedReboot";
32 const char kWeaveStatusReportingErrorEvent[] = "reportingErrorEvent";
33 const char kWeaveStatusAttemptingRollback[] = "attemptingRollback";
34 const char kWeaveStatusDisabled[] = "disabled";
35 
36 }  // namespace
37 
38 namespace chromeos_update_engine {
39 
UpdateStatusToString(const UpdateStatus & status)40 const char* UpdateStatusToString(const UpdateStatus& status) {
41   switch (status) {
42     case UpdateStatus::IDLE:
43       return update_engine::kUpdateStatusIdle;
44     case UpdateStatus::CHECKING_FOR_UPDATE:
45       return update_engine::kUpdateStatusCheckingForUpdate;
46     case UpdateStatus::UPDATE_AVAILABLE:
47       return update_engine::kUpdateStatusUpdateAvailable;
48     case UpdateStatus::DOWNLOADING:
49       return update_engine::kUpdateStatusDownloading;
50     case UpdateStatus::VERIFYING:
51       return update_engine::kUpdateStatusVerifying;
52     case UpdateStatus::FINALIZING:
53       return update_engine::kUpdateStatusFinalizing;
54     case UpdateStatus::UPDATED_NEED_REBOOT:
55       return update_engine::kUpdateStatusUpdatedNeedReboot;
56     case UpdateStatus::REPORTING_ERROR_EVENT:
57       return update_engine::kUpdateStatusReportingErrorEvent;
58     case UpdateStatus::ATTEMPTING_ROLLBACK:
59       return update_engine::kUpdateStatusAttemptingRollback;
60     case UpdateStatus::DISABLED:
61       return update_engine::kUpdateStatusDisabled;
62   }
63 
64   NOTREACHED();
65   return nullptr;
66 }
67 
UpdateStatusToWeaveStatus(const UpdateStatus & status)68 const char* UpdateStatusToWeaveStatus(const UpdateStatus& status) {
69   switch (status) {
70     case UpdateStatus::IDLE:
71       return kWeaveStatusIdle;
72     case UpdateStatus::CHECKING_FOR_UPDATE:
73       return kWeaveStatusCheckingForUpdate;
74     case UpdateStatus::UPDATE_AVAILABLE:
75       return kWeaveStatusUpdateAvailable;
76     case UpdateStatus::DOWNLOADING:
77       return kWeaveStatusDownloading;
78     case UpdateStatus::VERIFYING:
79       return kWeaveStatusVerifying;
80     case UpdateStatus::FINALIZING:
81       return kWeaveStatusFinalizing;
82     case UpdateStatus::UPDATED_NEED_REBOOT:
83       return kWeaveStatusUpdatedNeedReboot;
84     case UpdateStatus::REPORTING_ERROR_EVENT:
85       return kWeaveStatusReportingErrorEvent;
86     case UpdateStatus::ATTEMPTING_ROLLBACK:
87       return kWeaveStatusAttemptingRollback;
88     case UpdateStatus::DISABLED:
89       return kWeaveStatusDisabled;
90   }
91 
92   NOTREACHED();
93   return nullptr;
94 }
95 
StringToUpdateStatus(const std::string & s,UpdateStatus * status)96 bool StringToUpdateStatus(const std::string& s,
97                           UpdateStatus* status) {
98   if (s == update_engine::kUpdateStatusIdle) {
99     *status = UpdateStatus::IDLE;
100     return true;
101   } else if (s == update_engine::kUpdateStatusCheckingForUpdate) {
102     *status = UpdateStatus::CHECKING_FOR_UPDATE;
103     return true;
104   } else if (s == update_engine::kUpdateStatusUpdateAvailable) {
105     *status = UpdateStatus::UPDATE_AVAILABLE;
106     return true;
107   } else if (s == update_engine::kUpdateStatusDownloading) {
108     *status = UpdateStatus::DOWNLOADING;
109     return true;
110   } else if (s == update_engine::kUpdateStatusVerifying) {
111     *status = UpdateStatus::VERIFYING;
112     return true;
113   } else if (s == update_engine::kUpdateStatusFinalizing) {
114     *status = UpdateStatus::FINALIZING;
115     return true;
116   } else if (s == update_engine::kUpdateStatusUpdatedNeedReboot) {
117     *status = UpdateStatus::UPDATED_NEED_REBOOT;
118     return true;
119   } else if (s == update_engine::kUpdateStatusReportingErrorEvent) {
120     *status = UpdateStatus::REPORTING_ERROR_EVENT;
121     return true;
122   } else if (s == update_engine::kUpdateStatusAttemptingRollback) {
123     *status = UpdateStatus::ATTEMPTING_ROLLBACK;
124     return true;
125   } else if (s == update_engine::kUpdateStatusDisabled) {
126     *status = UpdateStatus::DISABLED;
127     return true;
128   }
129   return false;
130 }
131 
132 }  // namespace chromeos_update_engine
133