bsc_api: Remove the lchan usage from the Paging Response handling.
This commit is contained in:
parent
758f4dfa17
commit
db4ef0d369
|
@ -55,7 +55,7 @@ int decode_bcd_number(char *output, int output_len, const u_int8_t *bcd_lv,
|
|||
int send_siemens_mrpci(struct gsm_lchan *lchan, u_int8_t *classmark2_lv);
|
||||
int gsm48_extract_mi(uint8_t *classmark2, int length, char *mi_string, uint8_t *mi_type);
|
||||
int gsm48_paging_extract_mi(struct gsm48_pag_resp *pag, int length, char *mi_string, u_int8_t *mi_type);
|
||||
int gsm48_handle_paging_resp(struct msgb *msg, struct gsm_subscriber *subscr);
|
||||
int gsm48_handle_paging_resp(struct gsm_subscriber_connection *conn, struct msgb *msg, struct gsm_subscriber *subscr);
|
||||
|
||||
int gsm48_lchan_modify(struct gsm_lchan *lchan, u_int8_t lchan_mode);
|
||||
int gsm48_rx_rr_modif_ack(struct msgb *msg);
|
||||
|
|
|
@ -971,9 +971,9 @@ static int gsm0408_rcv_mm(struct gsm_subscriber_connection *conn, struct msgb *m
|
|||
}
|
||||
|
||||
/* Receive a PAGING RESPONSE message from the MS */
|
||||
static int gsm48_rx_rr_pag_resp(struct msgb *msg)
|
||||
static int gsm48_rx_rr_pag_resp(struct gsm_subscriber_connection *conn, struct msgb *msg)
|
||||
{
|
||||
struct gsm_bts *bts = msg->lchan->ts->trx->bts;
|
||||
struct gsm_bts *bts = conn->bts;
|
||||
struct gsm48_hdr *gh = msgb_l3(msg);
|
||||
struct gsm48_pag_resp *resp;
|
||||
u_int8_t *classmark2_lv = gh->data + 1;
|
||||
|
@ -1010,7 +1010,7 @@ static int gsm48_rx_rr_pag_resp(struct msgb *msg)
|
|||
memcpy(subscr->equipment.classmark2, classmark2_lv+1, *classmark2_lv);
|
||||
db_sync_equipment(&subscr->equipment);
|
||||
|
||||
rc = gsm48_handle_paging_resp(msg, subscr);
|
||||
rc = gsm48_handle_paging_resp(conn, msg, subscr);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
@ -1172,7 +1172,7 @@ static int gsm0408_rcv_rr(struct gsm_subscriber_connection *conn, struct msgb *m
|
|||
DEBUGP(DRR, "GRPS SUSPEND REQUEST\n");
|
||||
break;
|
||||
case GSM48_MT_RR_PAG_RESP:
|
||||
rc = gsm48_rx_rr_pag_resp(msg);
|
||||
rc = gsm48_rx_rr_pag_resp(conn, msg);
|
||||
break;
|
||||
case GSM48_MT_RR_CHAN_MODE_MODIF_ACK:
|
||||
rc = gsm48_rx_rr_modif_ack(msg);
|
||||
|
|
|
@ -244,7 +244,8 @@ int gsm48_paging_extract_mi(struct gsm48_pag_resp *resp, int length,
|
|||
mi_string, mi_type);
|
||||
}
|
||||
|
||||
int gsm48_handle_paging_resp(struct msgb *msg, struct gsm_subscriber *subscr)
|
||||
int gsm48_handle_paging_resp(struct gsm_subscriber_connection *conn,
|
||||
struct msgb *msg, struct gsm_subscriber *subscr)
|
||||
{
|
||||
struct gsm_bts *bts = msg->lchan->ts->trx->bts;
|
||||
struct gsm48_hdr *gh = msgb_l3(msg);
|
||||
|
@ -254,28 +255,28 @@ int gsm48_handle_paging_resp(struct msgb *msg, struct gsm_subscriber *subscr)
|
|||
if (is_siemens_bts(bts))
|
||||
send_siemens_mrpci(msg->lchan, classmark2_lv);
|
||||
|
||||
if (!msg->lchan->conn.subscr) {
|
||||
msg->lchan->conn.subscr = subscr;
|
||||
} else if (msg->lchan->conn.subscr != subscr) {
|
||||
if (!conn->subscr) {
|
||||
conn->subscr = subscr;
|
||||
} else if (conn->subscr != subscr) {
|
||||
LOGP(DRR, LOGL_ERROR, "<- 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->conn.subscr;
|
||||
subscr = conn->subscr;
|
||||
}
|
||||
|
||||
sig_data.subscr = subscr;
|
||||
sig_data.bts = msg->lchan->ts->trx->bts;
|
||||
sig_data.conn = &msg->lchan->conn;
|
||||
sig_data.bts = conn->bts;
|
||||
sig_data.conn = conn;
|
||||
|
||||
counter_inc(bts->network->stats.paging.completed);
|
||||
|
||||
dispatch_signal(SS_PAGING, S_PAGING_SUCCEEDED, &sig_data);
|
||||
|
||||
/* Stop paging on the bts we received the paging response */
|
||||
paging_request_stop(msg->trx->bts, subscr, &msg->lchan->conn);
|
||||
paging_request_stop(conn->bts, subscr, conn);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue