summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenis Kenzior <denkenz@gmail.com>2009-10-26 16:55:03 -0500
committerDenis Kenzior <denkenz@gmail.com>2009-10-26 16:55:03 -0500
commitbc72cca91b070f61c0cecb0090937eb758e91b24 (patch)
tree2ffa115db0e7e0a3170c867f3ff59fbeca562e65
parente0603f0c68d133374cf0e6fb05bb3e105e5546a4 (diff)
downloadofono-bc72cca91b070f61c0cecb0090937eb758e91b24.tar.bz2
Fix: notify_attached was only used when detached
The standard only specifies that the context might have been detached by the network / mobile equipment. Not attached.
-rw-r--r--drivers/atmodem/gprs.c2
-rw-r--r--include/gprs.h2
-rw-r--r--src/gprs.c16
3 files changed, 12 insertions, 8 deletions
diff --git a/drivers/atmodem/gprs.c b/drivers/atmodem/gprs.c
index 27a3f569..6f4933a7 100644
--- a/drivers/atmodem/gprs.c
+++ b/drivers/atmodem/gprs.c
@@ -200,7 +200,7 @@ static void cgev_notify(GAtResult *result, gpointer user_data)
if (g_str_has_prefix(event, "NW DETACH ") ||
g_str_has_prefix(event, "ME DETACH ")) {
- ofono_gprs_attach_notify(gprs, 0);
+ ofono_gprs_detached_notify(gprs);
return;
}
}
diff --git a/include/gprs.h b/include/gprs.h
index 65c34347..5cec510f 100644
--- a/include/gprs.h
+++ b/include/gprs.h
@@ -51,7 +51,7 @@ struct ofono_gprs_driver {
void ofono_gprs_status_notify(struct ofono_gprs *gprs,
int status, int lac, int ci, int tech);
-void ofono_gprs_attach_notify(struct ofono_gprs *gprs, int attached);
+void ofono_gprs_detached_notify(struct ofono_gprs *gprs);
int ofono_gprs_driver_register(const struct ofono_gprs_driver *d);
void ofono_gprs_driver_unregister(const struct ofono_gprs_driver *d);
diff --git a/src/gprs.c b/src/gprs.c
index 8443f1bf..3aa4721e 100644
--- a/src/gprs.c
+++ b/src/gprs.c
@@ -894,14 +894,18 @@ static GDBusSignalTable manager_signals[] = {
{ }
};
-void ofono_gprs_attach_notify(struct ofono_gprs *gprs, int attached)
+void ofono_gprs_detached_notify(struct ofono_gprs *gprs)
{
- if (gprs->driver_attached != attached &&
- !(gprs->flags & GPRS_FLAG_ATTACHING)) {
- gprs->driver_attached = attached;
+ if (gprs->driver_attached == FALSE)
+ return;
- gprs_netreg_update(gprs);
- }
+ gprs->driver_attached = FALSE;
+
+ gprs_attached_update(gprs);
+
+ /* TODO: The network forced a detach, we should wait for some time
+ * and try to re-attach
+ */
}
static void set_registration_status(struct ofono_gprs *gprs, int status)