diff options
author | Harald Welte <laforge@gnumonks.org> | 2009-08-09 19:07:00 +0200 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2009-08-09 19:07:00 +0200 |
commit | ee5ad1658214efce8fb9c92b7e6ad21484a66e55 (patch) | |
tree | d9c9b37af36e88afcc0c3f0879b6877f37bfd6f4 /openbsc | |
parent | d11ea93e261c44d6171eebd7d268810a12e6fb74 (diff) |
ensure we send the LOCATION UPDATE ACCEPT before issuing any signal
Diffstat (limited to 'openbsc')
-rw-r--r-- | openbsc/src/gsm_04_08.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/openbsc/src/gsm_04_08.c b/openbsc/src/gsm_04_08.c index 3e307b15f..967e4ce58 100644 --- a/openbsc/src/gsm_04_08.c +++ b/openbsc/src/gsm_04_08.c @@ -364,11 +364,18 @@ static int gsm0408_authorize(struct gsm_lchan *lchan, struct msgb *msg) u_int32_t tmsi; if (authorize_subscriber(lchan->loc_operation, lchan->subscr)) { + int rc; + db_subscriber_alloc_tmsi(lchan->subscr); - subscr_update(lchan->subscr, msg->trx->bts, GSM_SUBSCRIBER_UPDATE_ATTACHED); tmsi = strtoul(lchan->subscr->tmsi, NULL, 10); release_loc_updating_req(lchan); - return gsm0408_loc_upd_acc(msg->lchan, tmsi); + rc = gsm0408_loc_upd_acc(msg->lchan, tmsi); + /* call subscr_update after putting the loc_upd_acc + * in the transmit queue, since S_SUBSCR_ATTACHED might + * trigger further action like SMS delivery */ + subscr_update(lchan->subscr, msg->trx->bts, + GSM_SUBSCRIBER_UPDATE_ATTACHED); + return rc; } return 0; @@ -1053,6 +1060,7 @@ int gsm0408_loc_upd_acc(struct gsm_lchan *lchan, u_int32_t tmsi) ret = gsm48_sendmsg(msg, NULL); + /* send MM INFO with network name */ ret = gsm48_tx_mm_info(lchan); return ret; |