core, plugins: if modem removed don't process response
We try to avoid a memory leak when info->error is reset, as well as a second re-schedule of the info.
This commit is contained in:
@@ -128,6 +128,11 @@ evdo_state_done (MMAtSerialPort *port,
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error) {
|
||||
/* Leave superclass' reg state alone if AT*HSTATE isn't supported */
|
||||
mm_callback_info_schedule (info);
|
||||
@@ -195,6 +200,11 @@ state_done (MMAtSerialPort *port,
|
||||
GRegex *r;
|
||||
GMatchInfo *match_info;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error) {
|
||||
/* Leave superclass' reg state alone if AT*STATE isn't supported */
|
||||
mm_callback_info_schedule (info);
|
||||
|
||||
@@ -63,6 +63,11 @@ get_string_done (MMAtSerialPort *port,
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error && response && !strcmp (response->str, "ERROR")) {
|
||||
info->error = g_error_new_literal (MM_MOBILE_ERROR,
|
||||
MM_MOBILE_ERROR_SIM_NOT_INSERTED,
|
||||
|
||||
+47
-19
@@ -117,8 +117,16 @@ auth_done (MMAtSerialPort *port,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
MMModemHso *self = MM_MODEM_HSO (info->modem);
|
||||
MMModemHsoPrivate *priv = MM_MODEM_HSO_GET_PRIVATE (self);
|
||||
MMModemHso *self;
|
||||
MMModemHsoPrivate *priv;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
self = MM_MODEM_HSO (info->modem);
|
||||
priv = MM_MODEM_HSO_GET_PRIVATE (self);
|
||||
|
||||
if (error) {
|
||||
priv->auth_idx++;
|
||||
@@ -257,6 +265,11 @@ hso_call_control_done (MMAtSerialPort *port,
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error && !mm_callback_info_get_data (info, IGNORE_ERRORS_TAG))
|
||||
info->error = g_error_copy (error);
|
||||
|
||||
@@ -318,12 +331,13 @@ hso_enabled (MMModem *modem,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
GError *tmp_error;
|
||||
|
||||
tmp_error = mm_modem_check_removed (modem, error);
|
||||
if (tmp_error) {
|
||||
mm_generic_gsm_connect_complete (MM_GENERIC_GSM (modem), tmp_error, info);
|
||||
g_clear_error (&tmp_error);
|
||||
/* Do nothing if modem removed */
|
||||
if (!modem || mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error) {
|
||||
mm_generic_gsm_connect_complete (MM_GENERIC_GSM (modem), error, info);
|
||||
} else {
|
||||
MMModemHsoPrivate *priv = MM_MODEM_HSO_GET_PRIVATE (modem);
|
||||
|
||||
@@ -338,13 +352,14 @@ old_context_clear_done (MMModem *modem,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
GError *tmp_error;
|
||||
|
||||
tmp_error = mm_modem_check_removed (modem, error);
|
||||
if (tmp_error) {
|
||||
mm_generic_gsm_connect_complete (MM_GENERIC_GSM (modem), tmp_error, info);
|
||||
g_clear_error (&tmp_error);
|
||||
} else {
|
||||
/* Do nothing if modem removed */
|
||||
if (!modem || mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
mm_generic_gsm_connect_complete (MM_GENERIC_GSM (modem), error, info);
|
||||
else {
|
||||
/* Success, activate the PDP context and start the data session */
|
||||
hso_call_control (MM_MODEM_HSO (modem), TRUE, FALSE, hso_enabled, info);
|
||||
}
|
||||
@@ -356,12 +371,13 @@ connect_auth_done (MMModem *modem,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
GError *tmp_error;
|
||||
|
||||
tmp_error = mm_modem_check_removed (modem, error);
|
||||
if (tmp_error) {
|
||||
mm_generic_gsm_connect_complete (MM_GENERIC_GSM (modem), tmp_error, info);
|
||||
g_clear_error (&tmp_error);
|
||||
/* Do nothing if modem removed */
|
||||
if (!modem || mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error) {
|
||||
mm_generic_gsm_connect_complete (MM_GENERIC_GSM (modem), error, info);
|
||||
} else {
|
||||
/* Now connect; kill any existing connections first */
|
||||
hso_call_control (MM_MODEM_HSO (modem), FALSE, TRUE, old_context_clear_done, info);
|
||||
@@ -491,6 +507,11 @@ get_ip4_config_done (MMAtSerialPort *port,
|
||||
guint32 tmp;
|
||||
gint cid;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error) {
|
||||
info->error = g_error_copy (error);
|
||||
goto out;
|
||||
@@ -560,7 +581,14 @@ disconnect_owancall_done (MMAtSerialPort *port,
|
||||
GError *error,
|
||||
gpointer user_data)
|
||||
{
|
||||
mm_callback_info_schedule ((MMCallbackInfo *) user_data);
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
mm_callback_info_schedule (info);
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -167,6 +167,11 @@ sysinfo_done (MMAtSerialPort *port,
|
||||
GMatchInfo *match_info;
|
||||
const char *reply;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error) {
|
||||
/* Leave superclass' reg state alone if AT^SYSINFO isn't supported */
|
||||
goto done;
|
||||
|
||||
@@ -171,6 +171,11 @@ set_allowed_mode_done (MMAtSerialPort *port,
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
|
||||
@@ -232,11 +237,18 @@ get_allowed_mode_done (MMAtSerialPort *port,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
MMModemHuaweiGsm *self = MM_MODEM_HUAWEI_GSM (info->modem);
|
||||
MMModemHuaweiGsm *self;
|
||||
int mode_a, mode_b, u1, u2;
|
||||
guint32 band;
|
||||
MMModemGsmAllowedMode mode = MM_MODEM_GSM_ALLOWED_MODE_ANY;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
self = MM_MODEM_HUAWEI_GSM (info->modem);
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
else if (parse_syscfg (self, response->str, &mode_a, &mode_b, &band, &u1, &u2, &mode))
|
||||
@@ -271,8 +283,16 @@ set_band_done (MMAtSerialPort *port,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
MMModemHuaweiGsm *self = MM_MODEM_HUAWEI_GSM (info->modem);
|
||||
MMModemHuaweiGsmPrivate *priv = MM_MODEM_HUAWEI_GSM_GET_PRIVATE (self);
|
||||
MMModemHuaweiGsm *self;
|
||||
MMModemHuaweiGsmPrivate *priv;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
self = MM_MODEM_HUAWEI_GSM (info->modem);
|
||||
priv = MM_MODEM_HUAWEI_GSM_GET_PRIVATE (self);
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
@@ -321,10 +341,17 @@ get_band_done (MMAtSerialPort *port,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
MMModemHuaweiGsm *self = MM_MODEM_HUAWEI_GSM (info->modem);
|
||||
MMModemHuaweiGsm *self;
|
||||
int mode_a, mode_b, u1, u2;
|
||||
guint32 band;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
self = MM_MODEM_HUAWEI_GSM (info->modem);
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
else if (parse_syscfg (self, response->str, &mode_a, &mode_b, &band, &u1, &u2, NULL)) {
|
||||
@@ -410,6 +437,11 @@ get_act_request_done (MMAtSerialPort *port,
|
||||
char *str;
|
||||
int srv_stat = 0;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error) {
|
||||
info->error = g_error_copy (error);
|
||||
goto done;
|
||||
@@ -504,6 +536,11 @@ send_huawei_cpin_done (MMAtSerialPort *port,
|
||||
char *str = NULL;
|
||||
guint32 num = 0;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error) {
|
||||
info->error = g_error_copy (error);
|
||||
goto done;
|
||||
|
||||
@@ -56,6 +56,11 @@ get_allowed_mode_done (MMAtSerialPort *port,
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
gboolean parsed = FALSE;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
else if (!g_str_has_prefix (response->str, "%IPSYS: ")) {
|
||||
@@ -119,6 +124,11 @@ set_allowed_mode_done (MMAtSerialPort *port,
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
|
||||
@@ -235,8 +245,14 @@ get_nwstate_done (MMAtSerialPort *port,
|
||||
{
|
||||
MMCallbackInfo *info = user_data;
|
||||
|
||||
info->error = mm_modem_check_removed (info->modem, error);
|
||||
if (!info->error) {
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
else {
|
||||
MMModemIcera *self = MM_MODEM_ICERA (info->modem);
|
||||
MMModemIceraPrivate *priv = MM_MODEM_ICERA_GET_PRIVATE (self);
|
||||
|
||||
@@ -277,7 +293,14 @@ disconnect_ipdpact_done (MMAtSerialPort *port,
|
||||
GError *error,
|
||||
gpointer user_data)
|
||||
{
|
||||
mm_callback_info_schedule ((MMCallbackInfo *) user_data);
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
mm_callback_info_schedule (info);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -458,6 +481,11 @@ icera_connected (MMAtSerialPort *port,
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error) {
|
||||
mm_generic_gsm_connect_complete (MM_GENERIC_GSM (info->modem), error, info);
|
||||
} else {
|
||||
@@ -481,6 +509,11 @@ old_context_clear_done (MMAtSerialPort *port,
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
/* Activate the PDP context and start the data session */
|
||||
icera_call_control (MM_MODEM_ICERA (info->modem), TRUE, icera_connected, info);
|
||||
}
|
||||
@@ -493,6 +526,11 @@ auth_done (MMAtSerialPort *port,
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
mm_generic_gsm_connect_complete (MM_GENERIC_GSM (info->modem), error, info);
|
||||
else {
|
||||
@@ -574,6 +612,11 @@ get_ip4_config_done (MMAtSerialPort *port,
|
||||
guint32 tmp;
|
||||
gint cid;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error) {
|
||||
info->error = g_error_copy (error);
|
||||
goto out;
|
||||
@@ -710,8 +753,14 @@ is_icera_done (MMAtSerialPort *port,
|
||||
{
|
||||
MMCallbackInfo *info = user_data;
|
||||
|
||||
info->error = mm_modem_check_removed (info->modem, error);
|
||||
if (!info->error)
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
else
|
||||
mm_callback_info_set_result (info, GUINT_TO_POINTER (TRUE), NULL);
|
||||
mm_callback_info_schedule (info);
|
||||
}
|
||||
|
||||
@@ -104,6 +104,11 @@ linktop_set_allowed_mode_done (MMAtSerialPort *port,
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
|
||||
@@ -127,7 +132,7 @@ set_allowed_mode (MMGenericGsm *gsm,
|
||||
mm_callback_info_schedule (info);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
command = g_strdup_printf ("+CFUN=%d", linktop_parse_allowed_mode (mode));
|
||||
mm_at_serial_port_queue_command (port, command, 3, linktop_set_allowed_mode_done, info);
|
||||
g_free (command);
|
||||
@@ -142,6 +147,11 @@ get_allowed_mode_done (MMAtSerialPort *port,
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
gboolean parsed = FALSE;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
else if (!g_str_has_prefix (response->str, "CFUN: ")) {
|
||||
|
||||
@@ -60,9 +60,15 @@ get_allowed_mode_done (MMAtSerialPort *port,
|
||||
MMModemGsmAllowedMode mode = MM_MODEM_GSM_ALLOWED_MODE_ANY;
|
||||
gint mododr = -1;
|
||||
|
||||
info->error = mm_modem_check_removed (info->modem, error);
|
||||
if (info->error)
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error) {
|
||||
info->error = g_error_copy (error);
|
||||
goto done;
|
||||
}
|
||||
|
||||
p = mm_strip_tag (response->str, "+MODODR:");
|
||||
if (!p) {
|
||||
@@ -120,6 +126,11 @@ set_allowed_mode_done (MMAtSerialPort *port,
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
|
||||
@@ -175,6 +186,11 @@ get_act_request_done (MMAtSerialPort *port,
|
||||
MMModemGsmAccessTech act = MM_MODEM_GSM_ACCESS_TECH_UNKNOWN;
|
||||
const char *p;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
else {
|
||||
|
||||
+63
-7
@@ -177,6 +177,11 @@ mbm_set_allowed_mode_done (MMAtSerialPort *port,
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
|
||||
@@ -257,6 +262,11 @@ get_allowed_mode_done (MMAtSerialPort *port,
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
gboolean parsed = FALSE;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
else if (!g_str_has_prefix (response->str, "CFUN: ")) {
|
||||
@@ -351,6 +361,11 @@ mbm_enable_done (MMAtSerialPort *port,
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
/* Start unsolicited signal strength and access technology responses */
|
||||
mm_at_serial_port_queue_command (port, "*ERINFO=1", 3, NULL, NULL);
|
||||
|
||||
@@ -359,14 +374,21 @@ mbm_enable_done (MMAtSerialPort *port,
|
||||
|
||||
static void
|
||||
mbm_enap0_done (MMAtSerialPort *port,
|
||||
GString *response,
|
||||
GError *error,
|
||||
gpointer user_data)
|
||||
GString *response,
|
||||
GError *error,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMCallbackInfo *info = user_data;
|
||||
MMModemMbmPrivate *priv = MM_MODEM_MBM_GET_PRIVATE (info->modem);
|
||||
MMModemMbmPrivate *priv;
|
||||
char *command;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
priv = MM_MODEM_MBM_GET_PRIVATE (info->modem);
|
||||
|
||||
if (!priv->network_mode)
|
||||
priv->network_mode = MBM_NETWORK_MODE_ANY;
|
||||
|
||||
@@ -382,7 +404,14 @@ mbm_init_done (MMAtSerialPort *port,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMCallbackInfo *info = user_data;
|
||||
MMModemMbmPrivate *priv = MM_MODEM_MBM_GET_PRIVATE (info->modem);
|
||||
MMModemMbmPrivate *priv;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
priv = MM_MODEM_MBM_GET_PRIVATE (info->modem);
|
||||
|
||||
if (error) {
|
||||
mm_generic_gsm_enable_complete (MM_GENERIC_GSM (info->modem), error, info);
|
||||
@@ -408,12 +437,19 @@ mbm_emrdy_done (MMAtSerialPort *port,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMCallbackInfo *info = user_data;
|
||||
MMModemMbmPrivate *priv = MM_MODEM_MBM_GET_PRIVATE (info->modem);
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (g_error_matches (error, MM_SERIAL_ERROR, MM_SERIAL_ERROR_RESPONSE_TIMEOUT))
|
||||
mm_warn ("timed out waiting for EMRDY response.");
|
||||
else
|
||||
else {
|
||||
MMModemMbmPrivate *priv = MM_MODEM_MBM_GET_PRIVATE (info->modem);
|
||||
|
||||
priv->have_emrdy = TRUE;
|
||||
}
|
||||
|
||||
do_init (port, info);
|
||||
}
|
||||
@@ -536,6 +572,11 @@ factory_reset_done (MMAtSerialPort *port,
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
mm_serial_port_close (MM_SERIAL_PORT (port));
|
||||
mm_callback_info_schedule (info);
|
||||
}
|
||||
@@ -659,6 +700,11 @@ enap_poll_response (MMAtSerialPort *port,
|
||||
|
||||
g_assert (info);
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
count = GPOINTER_TO_UINT (mm_callback_info_get_data (info, "mbm-enap-poll-count"));
|
||||
|
||||
if (sscanf (response->str, "*ENAP: %d", &state) == 1 && state == 1) {
|
||||
@@ -702,6 +748,11 @@ enap_done (MMAtSerialPort *port,
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
guint tid;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error) {
|
||||
mm_generic_gsm_connect_complete (MM_GENERIC_GSM (info->modem), error, info);
|
||||
return;
|
||||
@@ -796,6 +847,11 @@ send_epin_done (MMAtSerialPort *port,
|
||||
const char *pin_type;
|
||||
int attempts_left = 0;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error) {
|
||||
info->error = g_error_copy (error);
|
||||
goto done;
|
||||
|
||||
@@ -122,16 +122,15 @@ get_rssi_done (MMAtSerialPort *port,
|
||||
MMModemCdma *parent_iface;
|
||||
int qual;
|
||||
|
||||
info->error = mm_modem_check_removed (info->modem, error);
|
||||
if (info->error) {
|
||||
if (info->modem) {
|
||||
/* Fallback to parent's method */
|
||||
g_clear_error (&info->error);
|
||||
parent_iface = g_type_interface_peek_parent (MM_MODEM_CDMA_GET_INTERFACE (info->modem));
|
||||
parent_iface->get_signal_quality (MM_MODEM_CDMA (info->modem), parent_csq_done, info);
|
||||
} else
|
||||
mm_callback_info_schedule (info);
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error) {
|
||||
/* Fallback to parent's method */
|
||||
parent_iface = g_type_interface_peek_parent (MM_MODEM_CDMA_GET_INTERFACE (info->modem));
|
||||
parent_iface->get_signal_quality (MM_MODEM_CDMA (info->modem), parent_csq_done, info);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -149,7 +148,7 @@ get_rssi_done (MMAtSerialPort *port,
|
||||
info->error = g_error_new (MM_MODEM_ERROR, MM_MODEM_ERROR_GENERAL,
|
||||
"%s", "Could not parse signal quality results");
|
||||
}
|
||||
|
||||
|
||||
mm_callback_info_schedule (info);
|
||||
}
|
||||
|
||||
|
||||
@@ -118,6 +118,11 @@ set_allowed_mode_done (MMAtSerialPort *port,
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
|
||||
@@ -227,8 +232,14 @@ get_allowed_mode_done (MMAtSerialPort *port,
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
MMModemGsmAllowedMode mode = MM_MODEM_GSM_ALLOWED_MODE_ANY;
|
||||
|
||||
info->error = mm_modem_check_removed (info->modem, error);
|
||||
if (!info->error) {
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
else {
|
||||
parse_nwrat_response (response, &mode, &info->error);
|
||||
mm_callback_info_set_result (info, GUINT_TO_POINTER (mode), NULL);
|
||||
}
|
||||
@@ -265,6 +276,11 @@ get_act_request_done (MMAtSerialPort *port,
|
||||
MMModemGsmAccessTech act = MM_MODEM_GSM_ACCESS_TECH_UNKNOWN;
|
||||
const char *p;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
else {
|
||||
|
||||
@@ -32,6 +32,11 @@ option_get_allowed_mode_done (MMAtSerialPort *port,
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
gboolean parsed = FALSE;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
else if (!g_str_has_prefix (response->str, "_OPSYS: ")) {
|
||||
@@ -95,6 +100,11 @@ option_set_allowed_mode_done (MMAtSerialPort *port,
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
|
||||
@@ -357,8 +367,14 @@ unsolicited_msg_done (MMAtSerialPort *port,
|
||||
{
|
||||
MMCallbackInfo *info = user_data;
|
||||
|
||||
if (info)
|
||||
if (info) {
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
mm_callback_info_chain_complete_one (info);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -394,6 +410,11 @@ get_act_octi_request_done (MMAtSerialPort *port,
|
||||
MMModemGsmAccessTech octi = MM_MODEM_GSM_ACCESS_TECH_UNKNOWN;
|
||||
MMModemGsmAccessTech owcti;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (!error) {
|
||||
if (parse_octi_response (response, &octi)) {
|
||||
/* If no 3G tech yet or current tech isn't 3G, then 2G tech is the best */
|
||||
@@ -416,6 +437,11 @@ get_act_owcti_request_done (MMAtSerialPort *port,
|
||||
MMModemGsmAccessTech owcti = MM_MODEM_GSM_ACCESS_TECH_UNKNOWN;
|
||||
const char *p;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (!error) {
|
||||
p = mm_strip_tag (response->str, "_OWCTI:");
|
||||
if (owcti_to_mm (*p, &owcti)) {
|
||||
|
||||
@@ -144,6 +144,11 @@ set_band_done (MMAtSerialPort *port,
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
|
||||
@@ -232,6 +237,11 @@ get_band_done (MMAtSerialPort *port,
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
MMModemGsmBand mm_band = MM_MODEM_GSM_BAND_UNKNOWN;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
else if (parse_ipbm (response->str, &mm_band))
|
||||
@@ -290,6 +300,11 @@ send_samsung_pinnum_done (MMAtSerialPort *port,
|
||||
char *str = NULL;
|
||||
guint32 num = 0;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error) {
|
||||
info->error = g_error_copy (error);
|
||||
goto done;
|
||||
@@ -461,7 +476,14 @@ init_all_done (MMAtSerialPort *port,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
MMModemSamsungGsm *self = MM_MODEM_SAMSUNG_GSM (info->modem);
|
||||
MMModemSamsungGsm *self;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
self = MM_MODEM_SAMSUNG_GSM (info->modem);
|
||||
|
||||
if (!error)
|
||||
mm_modem_icera_change_unsolicited_messages (MM_MODEM_ICERA (self), TRUE);
|
||||
@@ -476,7 +498,14 @@ init2_done (MMAtSerialPort *port,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
MMModemSamsungGsm *self = MM_MODEM_SAMSUNG_GSM (info->modem);
|
||||
MMModemSamsungGsm *self;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
self = MM_MODEM_SAMSUNG_GSM (info->modem);
|
||||
|
||||
if (error)
|
||||
mm_generic_gsm_enable_complete (MM_GENERIC_GSM (self), error, info);
|
||||
@@ -493,7 +522,14 @@ init_done (MMAtSerialPort *port,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
MMModemSamsungGsm *self = MM_MODEM_SAMSUNG_GSM (info->modem);
|
||||
MMModemSamsungGsm *self;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
self = MM_MODEM_SAMSUNG_GSM (info->modem);
|
||||
|
||||
if (error)
|
||||
mm_generic_gsm_enable_complete (MM_GENERIC_GSM (self), error, info);
|
||||
|
||||
@@ -148,7 +148,7 @@ status_done (MMAtSerialPort *port,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
MMModemSierraCdmaPrivate *priv = MM_MODEM_SIERRA_CDMA_GET_PRIVATE (info->modem);
|
||||
MMModemSierraCdmaPrivate *priv;
|
||||
char **lines, **iter;
|
||||
gboolean registered = FALSE;
|
||||
gboolean have_sid = FALSE;
|
||||
@@ -156,6 +156,13 @@ status_done (MMAtSerialPort *port,
|
||||
SysMode sys_mode = SYS_MODE_UNKNOWN;
|
||||
gboolean evdo_roam = FALSE, cdma1x_roam = FALSE;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
priv = MM_MODEM_SIERRA_CDMA_GET_PRIVATE (info->modem);
|
||||
|
||||
if (error) {
|
||||
/* Leave superclass' reg state alone if AT!STATUS isn't supported */
|
||||
goto done;
|
||||
@@ -167,11 +174,11 @@ status_done (MMAtSerialPort *port,
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* Sierra CDMA parts have two general formats depending on whether they
|
||||
/* Sierra CDMA parts have two general formats depending on whether they
|
||||
* support EVDO or not. EVDO parts report both 1x and EVDO roaming status
|
||||
* while of course 1x parts only report 1x status. Some modems also do not
|
||||
* report the Roaming information (MP 555 GPS).
|
||||
*
|
||||
*
|
||||
* AT!STATUS responses:
|
||||
*
|
||||
* Unregistered MC5725:
|
||||
@@ -182,7 +189,7 @@ status_done (MMAtSerialPort *port,
|
||||
* Temp: 33 State: 100 Sys Mode: NO SRV
|
||||
* Pilot NOT acquired
|
||||
* Modem has NOT registered
|
||||
*
|
||||
*
|
||||
* Registered MC5725:
|
||||
* -----------------------
|
||||
* Current band: Cellular Sleep
|
||||
@@ -340,10 +347,17 @@ pcstate_done (MMAtSerialPort *port,
|
||||
GError *error,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
/* Ignore errors for now; we're not sure if all Sierra CDMA devices support
|
||||
* at!pcstate.
|
||||
*/
|
||||
mm_callback_info_schedule ((MMCallbackInfo *) user_data);
|
||||
mm_callback_info_schedule (info);
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -74,9 +74,15 @@ get_allowed_mode_done (MMAtSerialPort *port,
|
||||
GRegex *r = NULL;
|
||||
GMatchInfo *match_info;
|
||||
|
||||
info->error = mm_modem_check_removed (info->modem, error);
|
||||
if (info->error)
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error) {
|
||||
info->error = g_error_copy (error);
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* Example response: !SELRAT: 03, UMTS 3G Preferred */
|
||||
r = g_regex_new ("!SELRAT:\\s*(\\d+).*$", 0, 0, NULL);
|
||||
@@ -156,6 +162,11 @@ set_allowed_mode_done (MMAtSerialPort *port,
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
|
||||
@@ -217,6 +228,11 @@ get_act_request_done (MMAtSerialPort *port,
|
||||
MMModemGsmAccessTech act = MM_MODEM_GSM_ACCESS_TECH_UNKNOWN;
|
||||
const char *p;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
else {
|
||||
@@ -260,6 +276,11 @@ get_sim_iccid_done (MMAtSerialPort *port,
|
||||
char buf[21];
|
||||
int i;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error) {
|
||||
info->error = g_error_copy (error);
|
||||
goto done;
|
||||
@@ -415,7 +436,13 @@ ppp_connect_done (MMModem *modem, GError *error, gpointer user_data)
|
||||
{
|
||||
MMCallbackInfo *info = user_data;
|
||||
|
||||
info->error = mm_modem_check_removed (modem, error);
|
||||
/* Do nothing if modem removed */
|
||||
if (!modem || mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
|
||||
mm_callback_info_schedule (info);
|
||||
}
|
||||
|
||||
@@ -427,6 +454,11 @@ net_activate_done (MMAtSerialPort *port,
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
mm_generic_gsm_connect_complete (MM_GENERIC_GSM (info->modem), error, info);
|
||||
}
|
||||
|
||||
@@ -441,6 +473,11 @@ auth_done (MMAtSerialPort *port,
|
||||
gint cid;
|
||||
char *command;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error) {
|
||||
info->error = g_error_copy (error);
|
||||
mm_callback_info_schedule (info);
|
||||
@@ -467,6 +504,11 @@ ps_attach_done (MMAtSerialPort *port,
|
||||
MMModem *parent_modem_iface;
|
||||
const char *number;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error) {
|
||||
info->error = g_error_copy (error);
|
||||
mm_callback_info_schedule (info);
|
||||
|
||||
@@ -67,9 +67,15 @@ get_mode_pref_done (MMAtSerialPort *port,
|
||||
guint32 acqord;
|
||||
MMModemGsmAllowedMode allowed = MM_MODEM_GSM_ALLOWED_MODE_ANY;
|
||||
|
||||
info->error = mm_modem_check_removed (info->modem, error);
|
||||
if (info->error)
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error) {
|
||||
info->error = g_error_copy (error);
|
||||
goto done;
|
||||
}
|
||||
|
||||
p = mm_strip_tag (response->str, "+CNMP:");
|
||||
if (!p) {
|
||||
@@ -125,9 +131,15 @@ get_acq_order_done (MMAtSerialPort *port,
|
||||
const char *p;
|
||||
gint acqord = -1;
|
||||
|
||||
info->error = mm_modem_check_removed (info->modem, error);
|
||||
if (info->error)
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error) {
|
||||
info->error = g_error_copy (error);
|
||||
goto done;
|
||||
}
|
||||
|
||||
p = mm_strip_tag (response->str, "+CNAOP:");
|
||||
if (!p) {
|
||||
@@ -182,6 +194,11 @@ set_acq_order_done (MMAtSerialPort *port,
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
|
||||
@@ -198,8 +215,13 @@ set_mode_pref_done (MMAtSerialPort *port,
|
||||
guint32 naop;
|
||||
char *command;
|
||||
|
||||
info->error = mm_modem_check_removed (info->modem, error);
|
||||
if (info->error) {
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error) {
|
||||
info->error = g_error_copy (error);
|
||||
mm_callback_info_schedule (info);
|
||||
return;
|
||||
}
|
||||
@@ -286,8 +308,13 @@ get_act_tech_done (MMAtSerialPort *port,
|
||||
MMModemGsmAccessTech act = MM_MODEM_GSM_ACCESS_TECH_UNKNOWN;
|
||||
const char *p;
|
||||
|
||||
info->error = mm_modem_check_removed (info->modem, error);
|
||||
if (info->error) {
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error) {
|
||||
info->error = g_error_copy (error);
|
||||
mm_callback_info_schedule (info);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -239,12 +239,19 @@ set_band_done (MMAtSerialPort *port,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
MMModemWavecomGsmPrivate *priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
else
|
||||
else {
|
||||
MMModemWavecomGsmPrivate *priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
|
||||
|
||||
priv->current_bands = GPOINTER_TO_UINT (mm_callback_info_get_data (info, "new-band"));
|
||||
}
|
||||
|
||||
mm_callback_info_schedule (info);
|
||||
}
|
||||
@@ -389,11 +396,16 @@ get_2g_band_done (MMAtSerialPort *port,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
MMModemWavecomGsmPrivate *priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
else {
|
||||
MMModemWavecomGsmPrivate *priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
|
||||
const gchar *p;
|
||||
guint32 mm_band = MM_MODEM_GSM_BAND_UNKNOWN;
|
||||
|
||||
@@ -430,11 +442,16 @@ get_3g_band_done (MMAtSerialPort *port,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
MMModemWavecomGsmPrivate *priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
else {
|
||||
MMModemWavecomGsmPrivate *priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
|
||||
const gchar *p;
|
||||
guint mm_band = MM_MODEM_GSM_BAND_UNKNOWN;
|
||||
guint32 wavecom_band;
|
||||
@@ -516,6 +533,11 @@ get_access_technology_cb (MMAtSerialPort *port,
|
||||
MMModemGsmAccessTech act = MM_MODEM_GSM_ACCESS_TECH_UNKNOWN;
|
||||
const gchar *p;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
else {
|
||||
@@ -583,19 +605,26 @@ get_allowed_mode_cb (MMAtSerialPort *port,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMCallbackInfo *info = user_data;
|
||||
MMModemWavecomGsmPrivate *priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
|
||||
MMModemWavecomGsmPrivate *priv;
|
||||
gint read_mode = -1;
|
||||
gchar *mode_str = NULL;
|
||||
gchar *prefer_str = NULL;
|
||||
GRegex *r = NULL;
|
||||
GMatchInfo *match_info = NULL;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error) {
|
||||
info->error = g_error_copy (error);
|
||||
mm_callback_info_schedule (info);
|
||||
return;
|
||||
}
|
||||
|
||||
priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
|
||||
|
||||
/* Possible responses:
|
||||
* +WWSM: 0 (2G only)
|
||||
* +WWSM: 1 (3G only)
|
||||
@@ -706,12 +735,19 @@ set_allowed_mode_cb (MMAtSerialPort *port,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
MMModemWavecomGsmPrivate *priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
else
|
||||
else {
|
||||
MMModemWavecomGsmPrivate *priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
|
||||
|
||||
priv->allowed_mode = GPOINTER_TO_UINT (mm_callback_info_get_data (info, "new-mode"));
|
||||
}
|
||||
|
||||
mm_callback_info_schedule (info);
|
||||
}
|
||||
@@ -813,17 +849,24 @@ set_highest_ms_class_cb (MMAtSerialPort *port,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
MMModemWavecomGsmPrivate *priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
|
||||
guint new_class;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error) {
|
||||
enable_complete (MM_GENERIC_GSM (info->modem), error, info);
|
||||
return;
|
||||
}
|
||||
|
||||
new_class = GPOINTER_TO_UINT (mm_callback_info_get_data (info, "new-class"));
|
||||
if (new_class)
|
||||
if (new_class) {
|
||||
MMModemWavecomGsmPrivate *priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
|
||||
|
||||
priv->current_ms_class = new_class;
|
||||
}
|
||||
|
||||
/* All done without errors! */
|
||||
mm_dbg ("[5/5] All done");
|
||||
@@ -882,14 +925,21 @@ get_current_ms_class_cb (MMAtSerialPort *port,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMCallbackInfo *info = user_data;
|
||||
MMModemWavecomGsmPrivate *priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
|
||||
MMModemWavecomGsmPrivate *priv;
|
||||
const gchar *p;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error) {
|
||||
enable_complete (MM_GENERIC_GSM (info->modem), error, info);
|
||||
return;
|
||||
}
|
||||
|
||||
priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
|
||||
|
||||
p = mm_strip_tag (response->str, "+CGCLASS:");
|
||||
|
||||
if (strncmp (p,
|
||||
@@ -936,14 +986,21 @@ get_supported_ms_classes_cb (MMAtSerialPort *port,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMCallbackInfo *info = user_data;
|
||||
MMModemWavecomGsmPrivate *priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
|
||||
MMModemWavecomGsmPrivate *priv;
|
||||
const gchar *p;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error) {
|
||||
enable_complete (MM_GENERIC_GSM (info->modem), error, info);
|
||||
return;
|
||||
}
|
||||
|
||||
priv = MM_MODEM_WAVECOM_GSM_GET_PRIVATE (info->modem);
|
||||
|
||||
/* Reset currently supported MS classes */
|
||||
priv->supported_ms_classes = 0;
|
||||
|
||||
@@ -996,6 +1053,11 @@ get_current_functionality_status_cb (MMAtSerialPort *port,
|
||||
const gchar *p;
|
||||
GError *inner_error;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error) {
|
||||
enable_complete (MM_GENERIC_GSM (info->modem), error, info);
|
||||
return;
|
||||
@@ -1027,6 +1089,11 @@ do_enable_power_up_done (MMGenericGsm *gsm,
|
||||
MMAtSerialPort *port;
|
||||
GError *inner_error = NULL;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error) {
|
||||
enable_complete (gsm, error, info);
|
||||
return;
|
||||
|
||||
@@ -115,8 +115,14 @@ get_allowed_mode_done (MMAtSerialPort *port,
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
MMModemGsmAllowedMode mode = MM_MODEM_GSM_ALLOWED_MODE_ANY;
|
||||
|
||||
info->error = mm_modem_check_removed (info->modem, error);
|
||||
if (!info->error) {
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
else {
|
||||
parse_syssel_response (response, &mode, &info->error);
|
||||
mm_callback_info_set_result (info, GUINT_TO_POINTER (mode), NULL);
|
||||
}
|
||||
@@ -151,7 +157,14 @@ set_allowed_mode_done (MMAtSerialPort *port,
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
|
||||
info->error = mm_modem_check_removed (info->modem, error);
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
|
||||
mm_callback_info_schedule (info);
|
||||
}
|
||||
|
||||
|
||||
+41
-5
@@ -103,9 +103,15 @@ get_allowed_mode_done (MMAtSerialPort *port,
|
||||
GRegex *r = NULL;
|
||||
GMatchInfo *match_info;
|
||||
|
||||
info->error = mm_modem_check_removed (info->modem, error);
|
||||
if (info->error)
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error) {
|
||||
info->error = g_error_copy (error);
|
||||
goto done;
|
||||
}
|
||||
|
||||
r = g_regex_new ("+ZSNT:\\s*(\\d),(\\d),(\\d)", G_REGEX_UNGREEDY, 0, NULL);
|
||||
if (!r) {
|
||||
@@ -192,6 +198,11 @@ set_allowed_mode_done (MMAtSerialPort *port,
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
|
||||
@@ -260,6 +271,11 @@ get_act_request_done (MMAtSerialPort *port,
|
||||
MMModemGsmAccessTech act = MM_MODEM_GSM_ACCESS_TECH_UNKNOWN;
|
||||
const char *p;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
if (error)
|
||||
info->error = g_error_copy (error);
|
||||
else {
|
||||
@@ -346,7 +362,14 @@ cpms_try_done (MMAtSerialPort *port,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMCallbackInfo *info = user_data;
|
||||
MMModemZtePrivate *priv = MM_MODEM_ZTE_GET_PRIVATE (info->modem);
|
||||
MMModemZtePrivate *priv;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
priv = MM_MODEM_ZTE_GET_PRIVATE (info->modem);
|
||||
|
||||
if (error && g_error_matches (error, MM_MOBILE_ERROR, MM_MOBILE_ERROR_SIM_BUSY)) {
|
||||
if (priv->cpms_tries++ < 4) {
|
||||
@@ -377,6 +400,11 @@ init_modem_done (MMAtSerialPort *port,
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
mm_at_serial_port_queue_command (port, "E0", 5, NULL, NULL);
|
||||
|
||||
/* Attempt to disable floods of "+ZUSIMR:2" unsolicited responses that
|
||||
@@ -417,8 +445,16 @@ pre_init_done (MMAtSerialPort *port,
|
||||
gpointer user_data)
|
||||
{
|
||||
MMCallbackInfo *info = (MMCallbackInfo *) user_data;
|
||||
MMModemZte *self = MM_MODEM_ZTE (info->modem);
|
||||
MMModemZtePrivate *priv = MM_MODEM_ZTE_GET_PRIVATE (self);
|
||||
MMModemZte *self;
|
||||
MMModemZtePrivate *priv;
|
||||
|
||||
/* If the modem has already been removed, return without
|
||||
* scheduling callback */
|
||||
if (mm_callback_info_check_modem_removed (info))
|
||||
return;
|
||||
|
||||
self = MM_MODEM_ZTE (info->modem);
|
||||
priv = MM_MODEM_ZTE_GET_PRIVATE (self);
|
||||
|
||||
if (error) {
|
||||
/* Retry the init string one more time; the modem sometimes throws it away */
|
||||
|
||||
Reference in New Issue
Block a user