diff options
Diffstat (limited to 'openbsc/src/gsm_subscriber.c')
-rw-r--r-- | openbsc/src/gsm_subscriber.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/openbsc/src/gsm_subscriber.c b/openbsc/src/gsm_subscriber.c index f066eca67..dc7d638f1 100644 --- a/openbsc/src/gsm_subscriber.c +++ b/openbsc/src/gsm_subscriber.c @@ -84,6 +84,7 @@ static int subscr_paging_dispatch(unsigned int hooknum, unsigned int event, sig_data.subscr = subscr; sig_data.bts = conn ? conn->bts : NULL; sig_data.conn = conn; + sig_data.paging_result = event; dispatch_signal( SS_PAGING, event == GSM_PAGING_SUCCEEDED ? @@ -169,7 +170,7 @@ static void subscr_send_paging_request(struct gsm_subscriber *subscr) /* paging failed, quit now */ if (rc <= 0) { - subscr_paging_cb(GSM_HOOK_RR_PAGING, GSM_PAGING_EXPIRED, + subscr_paging_cb(GSM_HOOK_RR_PAGING, GSM_PAGING_BUSY, NULL, NULL, subscr); } } @@ -293,6 +294,8 @@ struct gsm_subscriber *subscr_get_by_id(struct gsm_network *net, int subscr_update(struct gsm_subscriber *s, struct gsm_bts *bts, int reason) { + int rc; + /* FIXME: Migrate pending requests from one BSC to another */ switch (reason) { case GSM_SUBSCRIBER_UPDATE_ATTACHED: @@ -301,6 +304,8 @@ int subscr_update(struct gsm_subscriber *s, struct gsm_bts *bts, int reason) s->lac = bts->location_area_code; LOGP(DMM, LOGL_INFO, "Subscriber %s ATTACHED LAC=%u\n", subscr_name(s), s->lac); + rc = db_sync_subscriber(s); + db_subscriber_update(s); dispatch_signal(SS_SUBSCR, S_SUBSCR_ATTACHED, s); break; case GSM_SUBSCRIBER_UPDATE_DETACHED: @@ -308,14 +313,19 @@ int subscr_update(struct gsm_subscriber *s, struct gsm_bts *bts, int reason) if (bts->location_area_code == s->lac) s->lac = GSM_LAC_RESERVED_DETACHED; LOGP(DMM, LOGL_INFO, "Subscriber %s DETACHED\n", subscr_name(s)); + rc = db_sync_subscriber(s); + db_subscriber_update(s); dispatch_signal(SS_SUBSCR, S_SUBSCR_DETACHED, s); break; default: fprintf(stderr, "subscr_update with unknown reason: %d\n", reason); + rc = db_sync_subscriber(s); + db_subscriber_update(s); break; }; - return db_sync_subscriber(s); + + return rc; } void subscr_update_from_db(struct gsm_subscriber *sub) |