void __connman_technology_set_offlinemode(connman_bool_t offlinemode) { GSList *list; int err = -EINVAL; if (global_offlinemode == offlinemode) return; DBG("offlinemode %s", offlinemode ? "On" : "Off"); global_offlinemode = offlinemode; /* Traverse technology list, enable/disable each technology. */ for (list = technology_list; list; list = list->next) { struct connman_technology *technology = list->data; if (offlinemode) err = technology_disable(technology); if (!offlinemode && (technology->enable_persistent || technology->type == CONNMAN_SERVICE_TYPE_CELLULAR)) err = technology_enable(technology); DBG("technology %i, err %i", technology->type, err); } connman_technology_save_offlinemode(); __connman_notifier_offlinemode(offlinemode); }
int __connman_technology_set_offlinemode(connman_bool_t offlinemode) { GSList *list; int err = -EINVAL; if (global_offlinemode == offlinemode) return 0; DBG("offlinemode %s", offlinemode ? "On" : "Off"); /* * This is a bit tricky. When you set offlinemode, there is no * way to differentiate between attempting offline mode and * resuming offlinemode from last saved profile. We need that * information in rfkill_update, otherwise it falls back on the * technology's persistent state. Hence we set the offline mode here * but save it & call the notifier only if its successful. */ global_offlinemode = offlinemode; /* Traverse technology list, enable/disable each technology. */ for (list = technology_list; list; list = list->next) { struct connman_technology *technology = list->data; if (offlinemode) err = technology_disable(technology); if (!offlinemode && technology->enable_persistent) err = technology_enable(technology); } if (err == 0 || err == -EINPROGRESS || err == -EALREADY) { connman_technology_save_offlinemode(); __connman_notifier_offlinemode(offlinemode); } else global_offlinemode = connman_technology_load_offlinemode(); return err; }
static DBusMessage *set_powered(struct connman_technology *technology, DBusMessage *msg, connman_bool_t powered) { DBusMessage *reply = NULL; int err = 0; if (technology->rfkill_driven && technology->hardblocked == TRUE) { err = -EACCES; goto make_reply; } if (powered == TRUE) err = technology_enable(technology); else err = technology_disable(technology); if (err != -EBUSY) { technology->enable_persistent = powered; technology_save(technology); } make_reply: if (err == -EINPROGRESS) { technology->pending_reply = dbus_message_ref(msg); technology->pending_timeout = g_timeout_add_seconds(10, technology_pending_reply, technology); } else if (err == -EALREADY) { if (powered == TRUE) reply = __connman_error_already_enabled(msg); else reply = __connman_error_already_disabled(msg); } else if (err < 0) reply = __connman_error_failed(msg, -err); else reply = g_dbus_create_reply(msg, DBUS_TYPE_INVALID); return reply; }