aboutsummaryrefslogtreecommitdiffstats
path: root/src/gsm_04_08.c
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2009-02-22 21:26:29 +0000
committerHarald Welte <laforge@gnumonks.org>2009-02-22 21:26:29 +0000
commit61548987531f07a64155fe3b3de74e7f9f879781 (patch)
treed3648ed48139c861a351cc3e7bd8ae65612ab85d /src/gsm_04_08.c
parent2a1393758daa4904c9817da987424cca465aafb2 (diff)
fix paging response parsing for phase1 phones (classmar2 can be less than 4 bytes in length)
Diffstat (limited to 'src/gsm_04_08.c')
-rw-r--r--src/gsm_04_08.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/gsm_04_08.c b/src/gsm_04_08.c
index ac9a26228..05490768a 100644
--- a/src/gsm_04_08.c
+++ b/src/gsm_04_08.c
@@ -876,15 +876,15 @@ static int gsm0408_rcv_mm(struct msgb *msg)
static int gsm48_rr_rx_pag_resp(struct msgb *msg)
{
struct gsm48_hdr *gh = msgb_l3(msg);
- struct gsm48_paging_response *pr =
- (struct gsm48_paging_response *) gh->data;
- u_int8_t mi_type = pr->mi[0] & GSM_MI_TYPE_MASK;
+ 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;
char mi_string[MI_SIZE];
struct gsm_subscriber *subscr;
struct paging_signal_data sig_data;
int rc = 0;
- mi_to_string(mi_string, sizeof(mi_string), &pr->mi[0], pr->mi_len);
+ mi_to_string(mi_string, sizeof(mi_string), mi_lv+1, *mi_lv);
DEBUGP(DRR, "PAGING RESPONSE: mi_type=0x%02x MI(%s)\n",
mi_type, mi_string);
switch (mi_type) {