Index: q931.c =================================================================== RCS file: /usr/cvsroot/libpri/q931.c,v retrieving revision 1.83 diff -u -r1.83 q931.c --- q931.c 23 Jul 2004 16:20:06 -0000 1.83 +++ q931.c 28 Jul 2004 08:02:00 -0000 @@ -866,11 +866,23 @@ static FUNC_RECV(receive_redirecting_number) { - call->redirectingplan = ie->data[0] & 0x7f; - call->redirectingpres = ie->data[1] & 0x7f; - call->redirectingreason = ie->data[2] & 0x0f; - - q931_get_number(call->redirectingnum, sizeof(call->redirectingnum), ie->data + 3, len - 5); + int extbit; + call->redirectingplan = ie->data[0] & 0x7f; + extbit = (ie->data[0] >> 7) & 0x01; + if (extbit){ + call->redirectingpres = 0; + q931_get_number(call->redirectingnum, sizeof(call->redirectingnum), ie->data + 1, len - 3); + } else { + call->redirectingpres = ie->data[1] & 0x7f; + extbit = (ie->data[1] >> 7) & 0x01; + if (extbit){ + call->redirectingreason = 0; + q931_get_number(call->redirectingnum, sizeof(call->redirectingnum), ie->data + 2, len - 4); + } else { + call->redirectingreason = ie->data[2] & 0x0f; + q931_get_number(call->redirectingnum, sizeof(call->redirectingnum), ie->data + 3, len - 5); + } + } return 0; }