mirror of git://git.sysmocom.de/ofono
Refactor: Break up set_online_callback
- Break up into two functions, one for online and one for offline - No longer the need for online_pending variable
This commit is contained in:
parent
7b77888217
commit
adefe451a2
42
src/modem.c
42
src/modem.c
|
@ -69,7 +69,6 @@ struct ofono_modem {
|
||||||
ofono_bool_t powered_pending;
|
ofono_bool_t powered_pending;
|
||||||
guint timeout;
|
guint timeout;
|
||||||
ofono_bool_t online;
|
ofono_bool_t online;
|
||||||
ofono_bool_t online_pending;
|
|
||||||
GHashTable *properties;
|
GHashTable *properties;
|
||||||
struct ofono_sim *sim;
|
struct ofono_sim *sim;
|
||||||
unsigned int sim_watch;
|
unsigned int sim_watch;
|
||||||
|
@ -417,32 +416,35 @@ static void modem_change_state(struct ofono_modem *modem,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void set_online_callback(const struct ofono_error *error,
|
static void online_cb(const struct ofono_error *error, void *data)
|
||||||
void *data)
|
|
||||||
{
|
{
|
||||||
struct ofono_modem *modem = data;
|
struct ofono_modem *modem = data;
|
||||||
DBusMessage *reply = NULL;
|
DBusMessage *reply;
|
||||||
ofono_bool_t online = modem->online_pending;
|
|
||||||
|
|
||||||
if (error && error->type != OFONO_ERROR_TYPE_NO_ERROR) {
|
if (error->type == OFONO_ERROR_TYPE_NO_ERROR)
|
||||||
reply = __ofono_error_failed(modem->pending);
|
|
||||||
online = modem->online;
|
|
||||||
} else if (online && modem->modem_state < MODEM_STATE_OFFLINE) {
|
|
||||||
reply = __ofono_error_failed(modem->pending);
|
|
||||||
online = FALSE;
|
|
||||||
} else
|
|
||||||
reply = dbus_message_new_method_return(modem->pending);
|
reply = dbus_message_new_method_return(modem->pending);
|
||||||
|
else
|
||||||
|
reply = __ofono_error_failed(modem->pending);
|
||||||
|
|
||||||
__ofono_dbus_pending_reply(&modem->pending, reply);
|
__ofono_dbus_pending_reply(&modem->pending, reply);
|
||||||
|
|
||||||
modem->online_pending = online;
|
if (error->type == OFONO_ERROR_TYPE_NO_ERROR)
|
||||||
|
|
||||||
if (modem->online == online)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (online)
|
|
||||||
modem_change_state(modem, MODEM_STATE_ONLINE);
|
modem_change_state(modem, MODEM_STATE_ONLINE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void offline_cb(const struct ofono_error *error, void *data)
|
||||||
|
{
|
||||||
|
struct ofono_modem *modem = data;
|
||||||
|
DBusMessage *reply;
|
||||||
|
|
||||||
|
if (error->type == OFONO_ERROR_TYPE_NO_ERROR)
|
||||||
|
reply = dbus_message_new_method_return(modem->pending);
|
||||||
else
|
else
|
||||||
|
reply = __ofono_error_failed(modem->pending);
|
||||||
|
|
||||||
|
__ofono_dbus_pending_reply(&modem->pending, reply);
|
||||||
|
|
||||||
|
if (error->type == OFONO_ERROR_TYPE_NO_ERROR)
|
||||||
modem_change_state(modem, MODEM_STATE_OFFLINE);
|
modem_change_state(modem, MODEM_STATE_OFFLINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -468,9 +470,9 @@ static DBusMessage *set_property_online(struct ofono_modem *modem,
|
||||||
return __ofono_error_busy(msg);
|
return __ofono_error_busy(msg);
|
||||||
|
|
||||||
modem->pending = dbus_message_ref(msg);
|
modem->pending = dbus_message_ref(msg);
|
||||||
modem->online_pending = online;
|
|
||||||
|
|
||||||
driver->set_online(modem, online, set_online_callback, modem);
|
driver->set_online(modem, online,
|
||||||
|
online ? online_cb : offline_cb, modem);
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue