aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/gsm_04_08.c
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <zecke@selfish.org>2009-08-21 05:18:21 +0200
committerHolger Hans Peter Freyther <zecke@selfish.org>2009-09-28 12:50:49 +0200
commit3ee5d3e8af741176843836ac4e78823fa1d17778 (patch)
tree64c92e4f3f4b0b597ed9c1ca3da4cc6e752a2893 /openbsc/src/gsm_04_08.c
parentadc1478a47323a3ae9bcfd928894a32541269b76 (diff)
[gsm0408] Move paging handling to gsm_04_08_utils.c
Add one method to extract the MI which will allow to load the gsm_subscriber depending on the MSC/BSC setup and then use gsm48_handle_paging_resp to finish the paging response handling.
Diffstat (limited to 'openbsc/src/gsm_04_08.c')
-rw-r--r--openbsc/src/gsm_04_08.c34
1 files changed, 3 insertions, 31 deletions
diff --git a/openbsc/src/gsm_04_08.c b/openbsc/src/gsm_04_08.c
index 3c9ffbbec..bac920e31 100644
--- a/openbsc/src/gsm_04_08.c
+++ b/openbsc/src/gsm_04_08.c
@@ -1463,20 +1463,15 @@ static int gsm48_rr_rx_pag_resp(struct msgb *msg)
struct gsm_bts *bts = msg->lchan->ts->trx->bts;
struct gsm48_hdr *gh = msgb_l3(msg);
u_int8_t *classmark2_lv = gh->data + 1;
- u_int8_t *mi_lv = gh->data + 2 + *classmark2_lv;
- u_int8_t mi_type = mi_lv[1] & GSM_MI_TYPE_MASK;
+ u_int8_t mi_type;
char mi_string[GSM48_MI_SIZE];
struct gsm_subscriber *subscr = NULL;
- struct paging_signal_data sig_data;
int rc = 0;
- gsm48_mi_to_string(mi_string, sizeof(mi_string), mi_lv+1, *mi_lv);
+ gsm48_paging_extract_mi(msg, mi_string, &mi_type);
DEBUGP(DRR, "PAGING RESPONSE: mi_type=0x%02x MI(%s)\n",
mi_type, mi_string);
- if (is_siemens_bts(bts))
- send_siemens_mrpci(msg->lchan, classmark2_lv);
-
switch (mi_type) {
case GSM_MI_TYPE_TMSI:
subscr = subscr_get_by_tmsi(bts->network,
@@ -1499,30 +1494,7 @@ static int gsm48_rr_rx_pag_resp(struct msgb *msg)
memcpy(subscr->equipment.classmark2, classmark2_lv+1, *classmark2_lv);
db_sync_equipment(&subscr->equipment);
- if (!msg->lchan->subscr) {
- msg->lchan->subscr = subscr;
- } else if (msg->lchan->subscr != subscr) {
- DEBUGP(DRR, "<- Channel already owned by someone else?\n");
- subscr_put(subscr);
- return -EINVAL;
- } else {
- DEBUGP(DRR, "<- Channel already owned by us\n");
- subscr_put(subscr);
- subscr = msg->lchan->subscr;
- }
-
- sig_data.subscr = subscr;
- sig_data.bts = msg->lchan->ts->trx->bts;
- sig_data.lchan = msg->lchan;
-
- dispatch_signal(SS_PAGING, S_PAGING_COMPLETED, &sig_data);
-
- /* Stop paging on the bts we received the paging response */
- paging_request_stop(msg->trx->bts, subscr, msg->lchan);
-
- /* FIXME: somehow signal the completion of the PAGING to
- * the entity that requested the paging */
-
+ rc = gsm48_handle_paging_resp(msg, subscr);
return rc;
}