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;