summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/smsutil.c11
-rw-r--r--src/smsutil.h2
-rw-r--r--unit/test-sms.c2
3 files changed, 12 insertions, 3 deletions
diff --git a/src/smsutil.c b/src/smsutil.c
index 07ff903a..863b68f5 100644
--- a/src/smsutil.c
+++ b/src/smsutil.c
@@ -3297,7 +3297,7 @@ static void cbs_assembly_expire(struct cbs_assembly *assembly,
}
}
-void cbs_assembly_location_changed(struct cbs_assembly *assembly,
+void cbs_assembly_location_changed(struct cbs_assembly *assembly, gboolean plmn,
gboolean lac, gboolean ci)
{
/* Location Area wide (in GSM) (which means that a CBS message with the
@@ -3314,6 +3314,15 @@ void cbs_assembly_location_changed(struct cbs_assembly *assembly,
* one cell only.
*/
+ if (plmn) {
+ lac = TRUE;
+ g_slist_free(assembly->recv_plmn);
+ assembly->recv_plmn = NULL;
+
+ cbs_assembly_expire(assembly, cbs_compare_node_by_gs,
+ GUINT_TO_POINTER(CBS_GEO_SCOPE_PLMN));
+ }
+
if (lac) {
/* If LAC changed, then cell id has changed */
ci = TRUE;
diff --git a/src/smsutil.h b/src/smsutil.h
index a60b95d2..2e176d11 100644
--- a/src/smsutil.h
+++ b/src/smsutil.h
@@ -488,7 +488,7 @@ struct cbs_assembly *cbs_assembly_new();
void cbs_assembly_free(struct cbs_assembly *assembly);
GSList *cbs_assembly_add_page(struct cbs_assembly *assembly,
const struct cbs *cbs);
-void cbs_assembly_location_changed(struct cbs_assembly *assembly,
+void cbs_assembly_location_changed(struct cbs_assembly *assembly, gboolean plmn,
gboolean lac, gboolean ci);
char *cbs_topic_ranges_to_string(GSList *ranges);
diff --git a/unit/test-sms.c b/unit/test-sms.c
index fc748c69..67c51f82 100644
--- a/unit/test-sms.c
+++ b/unit/test-sms.c
@@ -966,7 +966,7 @@ static void test_cbs_assembly()
l = cbs_assembly_add_page(assembly, &dec1);
g_assert(l == NULL);
- cbs_assembly_location_changed(assembly, TRUE, TRUE);
+ cbs_assembly_location_changed(assembly, TRUE, TRUE, TRUE);
g_assert(assembly->recv_cell == NULL);
dec1.update_number = 9;