1// 2// Copyright (C) 2013 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 17#include "shill/cellular/cellular_error.h" 18 19#include <string> 20 21#include <ModemManager/ModemManager.h> 22 23// TODO(armansito): Once we refactor the code to handle the ModemManager D-Bus 24// bindings in a dedicated class, this code should move there. 25// (See crbug.com/246425) 26 27using std::string; 28 29namespace shill { 30 31namespace { 32 33const char* kErrorGprsMissingOrUnknownApn = 34 MM_MOBILE_EQUIPMENT_ERROR_DBUS_PREFIX ".GprsMissingOrUnknownApn"; 35 36const char* kErrorGprsServiceOptionNotSubscribed = 37 MM_MOBILE_EQUIPMENT_ERROR_DBUS_PREFIX ".GprsServiceOptionNotSubscribed"; 38 39const char* kErrorIncorrectPassword = 40 MM_MOBILE_EQUIPMENT_ERROR_DBUS_PREFIX ".IncorrectPassword"; 41 42const char* kErrorSimPin = 43 MM_MOBILE_EQUIPMENT_ERROR_DBUS_PREFIX ".SimPin"; 44 45const char* kErrorSimPuk = 46 MM_MOBILE_EQUIPMENT_ERROR_DBUS_PREFIX ".SimPuk"; 47 48const char* kErrorWrongState = MM_CORE_ERROR_DBUS_PREFIX ".WrongState"; 49 50} // namespace 51 52// static 53void CellularError::FromMM1ChromeosDBusError(brillo::Error* dbus_error, 54 Error* error) { 55 if (!error) 56 return; 57 58 if (!dbus_error) { 59 error->Reset(); 60 return; 61 } 62 63 const string name = dbus_error->GetCode(); 64 const string msg = dbus_error->GetMessage(); 65 Error::Type type; 66 67 if (name == kErrorIncorrectPassword) 68 type = Error::kIncorrectPin; 69 else if (name == kErrorSimPin) 70 type = Error::kPinRequired; 71 else if (name == kErrorSimPuk) 72 type = Error::kPinBlocked; 73 else if (name == kErrorGprsMissingOrUnknownApn) 74 type = Error::kInvalidApn; 75 else if (name == kErrorGprsServiceOptionNotSubscribed) 76 type = Error::kInvalidApn; 77 else if (name == kErrorWrongState) 78 type = Error::kWrongState; 79 else 80 type = Error::kOperationFailed; 81 82 if (!msg.empty()) 83 return error->Populate(type, msg); 84 else 85 return error->Populate(type); 86} 87 88} // namespace shill 89