Lines Matching refs:pc
114 { struct l3_process *pc = st->l3.proc; /* start of processes */ in l3dss1_search_dummy_proc() local
118 while (pc) in l3dss1_search_dummy_proc()
119 { if ((pc->callref == -1) && (pc->prot.dss1.invoke_id == id)) in l3dss1_search_dummy_proc()
120 return (pc); in l3dss1_search_dummy_proc()
121 pc = pc->next; in l3dss1_search_dummy_proc()
134 struct l3_process *pc = NULL; in l3dss1_dummy_return_result() local
136 if ((pc = l3dss1_search_dummy_proc(st, id))) in l3dss1_dummy_return_result()
137 { L3DelTimer(&pc->timer); /* remove timer */ in l3dss1_dummy_return_result()
139 cs = pc->st->l1.hardware; in l3dss1_dummy_return_result()
143 ic.parm.dss1_io.hl_id = pc->prot.dss1.invoke_id; in l3dss1_dummy_return_result()
144 ic.parm.dss1_io.ll_id = pc->prot.dss1.ll_id; in l3dss1_dummy_return_result()
145 ic.parm.dss1_io.proc = pc->prot.dss1.proc; in l3dss1_dummy_return_result()
149 free_invoke_id(pc->st, pc->prot.dss1.invoke_id); in l3dss1_dummy_return_result()
150 pc->prot.dss1.invoke_id = 0; /* reset id */ in l3dss1_dummy_return_result()
153 dss1_release_l3_process(pc); in l3dss1_dummy_return_result()
167 struct l3_process *pc = NULL; in l3dss1_dummy_error_return() local
169 if ((pc = l3dss1_search_dummy_proc(st, id))) in l3dss1_dummy_error_return()
170 { L3DelTimer(&pc->timer); /* remove timer */ in l3dss1_dummy_error_return()
172 cs = pc->st->l1.hardware; in l3dss1_dummy_error_return()
176 ic.parm.dss1_io.hl_id = pc->prot.dss1.invoke_id; in l3dss1_dummy_error_return()
177 ic.parm.dss1_io.ll_id = pc->prot.dss1.ll_id; in l3dss1_dummy_error_return()
178 ic.parm.dss1_io.proc = pc->prot.dss1.proc; in l3dss1_dummy_error_return()
182 free_invoke_id(pc->st, pc->prot.dss1.invoke_id); in l3dss1_dummy_error_return()
183 pc->prot.dss1.invoke_id = 0; /* reset id */ in l3dss1_dummy_error_return()
186 dss1_release_l3_process(pc); in l3dss1_dummy_error_return()
221 l3dss1_parse_facility(struct PStack *st, struct l3_process *pc, in l3dss1_parse_facility() argument
229 if (pc) in l3dss1_parse_facility()
230 st = pc->st; /* valid Stack */ in l3dss1_parse_facility()
352 if (!pc) in l3dss1_parse_facility()
385 if (ident > pc->para.chargeinfo) { in l3dss1_parse_facility()
386 pc->para.chargeinfo = ident; in l3dss1_parse_facility()
387 st->l3.l3l4(st, CC_CHARGE | INDICATION, pc); in l3dss1_parse_facility()
391 l3_debug(st, "charging info during %d", pc->para.chargeinfo); in l3dss1_parse_facility()
394 l3_debug(st, "charging info final %d", pc->para.chargeinfo); in l3dss1_parse_facility()
408 if (ident > pc->para.chargeinfo) { in l3dss1_parse_facility()
409 pc->para.chargeinfo = ident; in l3dss1_parse_facility()
410 st->l3.l3l4(st, CC_CHARGE | INDICATION, pc); in l3dss1_parse_facility()
413 l3_debug(st, "charging info final %d", pc->para.chargeinfo); in l3dss1_parse_facility()
431 if (!pc) in l3dss1_parse_facility()
436 if ((pc->prot.dss1.invoke_id) && (pc->prot.dss1.invoke_id == id)) in l3dss1_parse_facility()
438 free_invoke_id(st, pc->prot.dss1.invoke_id); in l3dss1_parse_facility()
439 pc->prot.dss1.remote_result = 0; /* success */ in l3dss1_parse_facility()
440 pc->prot.dss1.invoke_id = 0; in l3dss1_parse_facility()
441 pc->redir_result = pc->prot.dss1.remote_result; in l3dss1_parse_facility()
442 …st->l3.l3l4(st, CC_REDIR | INDICATION, pc); } /* Diversion succes… in l3dss1_parse_facility()
476 if (!pc) in l3dss1_parse_facility()
481 if ((pc->prot.dss1.invoke_id) && (pc->prot.dss1.invoke_id == id)) in l3dss1_parse_facility()
483 free_invoke_id(st, pc->prot.dss1.invoke_id); in l3dss1_parse_facility()
484 pc->prot.dss1.remote_result = err_ret; /* result */ in l3dss1_parse_facility()
485 pc->prot.dss1.invoke_id = 0; in l3dss1_parse_facility()
486 pc->redir_result = pc->prot.dss1.remote_result; in l3dss1_parse_facility()
487 st->l3.l3l4(st, CC_REDIR | INDICATION, pc); in l3dss1_parse_facility()
499 l3dss1_message(struct l3_process *pc, u_char mt) in l3dss1_message() argument
507 MsgHead(p, pc->callref, mt); in l3dss1_message()
508 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3dss1_message()
512 l3dss1_message_cause(struct l3_process *pc, u_char mt, u_char cause) in l3dss1_message_cause() argument
519 MsgHead(p, pc->callref, mt); in l3dss1_message_cause()
529 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3dss1_message_cause()
533 l3dss1_status_send(struct l3_process *pc, u_char pr, void *arg) in l3dss1_status_send() argument
540 MsgHead(p, pc->callref, MT_STATUS); in l3dss1_status_send()
545 *p++ = pc->para.cause | 0x80; in l3dss1_status_send()
549 *p++ = pc->state & 0x3f; in l3dss1_status_send()
555 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3dss1_status_send()
559 l3dss1_msg_without_setup(struct l3_process *pc, u_char pr, void *arg) in l3dss1_msg_without_setup() argument
570 switch (pc->para.cause) { in l3dss1_msg_without_setup()
576 MsgHead(p, pc->callref, MT_RELEASE_COMPLETE); in l3dss1_msg_without_setup()
580 *p++ = pc->para.cause | 0x80; in l3dss1_msg_without_setup()
584 pc->para.cause); in l3dss1_msg_without_setup()
591 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3dss1_msg_without_setup()
592 dss1_release_l3_process(pc); in l3dss1_msg_without_setup()
696 ie_in_set(struct l3_process *pc, u_char ie, int *checklist) { in ie_in_set() argument
713 check_infoelements(struct l3_process *pc, struct sk_buff *skb, int *checklist) in check_infoelements() argument
739 if (pc->debug & L3_DEB_CHECK) in check_infoelements()
740 l3_debug(pc->st, "check IE shift%scodeset %d->%d", in check_infoelements()
746 if ((newpos = ie_in_set(pc, *p, cl))) { in check_infoelements()
754 if (ie_in_set(pc, *p, comp_required)) in check_infoelements()
771 if (pc->debug & L3_DEB_CHECK) in check_infoelements()
772 l3_debug(pc->st, "check IE shift back codeset %d->%d", in check_infoelements()
779 if (pc->debug & L3_DEB_CHECK) in check_infoelements()
780 l3_debug(pc->st, "check IE MT(%x) %d/%d/%d/%d", in check_infoelements()
796 l3dss1_check_messagetype_validity(struct l3_process *pc, int mt, void *arg) in l3dss1_check_messagetype_validity() argument
822 if (pc->debug & L3_DEB_CHECK) in l3dss1_check_messagetype_validity()
823 l3_debug(pc->st, "l3dss1_check_messagetype_validity mt(%x) OK", mt); in l3dss1_check_messagetype_validity()
828 if (pc->debug & (L3_DEB_CHECK | L3_DEB_WARN)) in l3dss1_check_messagetype_validity()
829 l3_debug(pc->st, "l3dss1_check_messagetype_validity mt(%x) fail", mt); in l3dss1_check_messagetype_validity()
830 pc->para.cause = 97; in l3dss1_check_messagetype_validity()
831 l3dss1_status_send(pc, 0, NULL); in l3dss1_check_messagetype_validity()
838 l3dss1_std_ie_err(struct l3_process *pc, int ret) { in l3dss1_std_ie_err() argument
840 if (pc->debug & L3_DEB_CHECK) in l3dss1_std_ie_err()
841 l3_debug(pc->st, "check_infoelements ret %d", ret); in l3dss1_std_ie_err()
846 pc->para.cause = 96; in l3dss1_std_ie_err()
847 l3dss1_status_send(pc, 0, NULL); in l3dss1_std_ie_err()
850 pc->para.cause = 99; in l3dss1_std_ie_err()
851 l3dss1_status_send(pc, 0, NULL); in l3dss1_std_ie_err()
854 pc->para.cause = 100; in l3dss1_std_ie_err()
855 l3dss1_status_send(pc, 0, NULL); in l3dss1_std_ie_err()
864 l3dss1_get_channel_id(struct l3_process *pc, struct sk_buff *skb) { in l3dss1_get_channel_id() argument
871 if (pc->debug & L3_DEB_WARN) in l3dss1_get_channel_id()
872 l3_debug(pc->st, "wrong chid len %d", *p); in l3dss1_get_channel_id()
877 if (pc->debug & L3_DEB_WARN) in l3dss1_get_channel_id()
878 l3_debug(pc->st, "wrong chid %x", *p); in l3dss1_get_channel_id()
887 l3dss1_get_cause(struct l3_process *pc, struct sk_buff *skb) { in l3dss1_get_cause() argument
892 pc->para.cause = 31; in l3dss1_get_cause()
893 pc->para.loc = 0; in l3dss1_get_cause()
900 pc->para.loc = *p++; in l3dss1_get_cause()
905 if (l && !(pc->para.loc & 0x80)) { in l3dss1_get_cause()
910 pc->para.cause = *p++; in l3dss1_get_cause()
912 if (!(pc->para.cause & 0x80)) in l3dss1_get_cause()
917 pc->para.diag[i++] = *p++; in l3dss1_get_cause()
926 l3dss1_msg_with_uus(struct l3_process *pc, u_char cmd) in l3dss1_msg_with_uus() argument
933 MsgHead(p, pc->callref, cmd); in l3dss1_msg_with_uus()
935 if (pc->prot.dss1.uus1_data[0]) in l3dss1_msg_with_uus()
937 *p++ = strlen(pc->prot.dss1.uus1_data) + 1; in l3dss1_msg_with_uus()
939 strcpy(p, pc->prot.dss1.uus1_data); in l3dss1_msg_with_uus()
940 p += strlen(pc->prot.dss1.uus1_data); in l3dss1_msg_with_uus()
941 pc->prot.dss1.uus1_data[0] = '\0'; in l3dss1_msg_with_uus()
948 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3dss1_msg_with_uus()
952 l3dss1_release_req(struct l3_process *pc, u_char pr, void *arg) in l3dss1_release_req() argument
954 StopAllL3Timer(pc); in l3dss1_release_req()
955 newl3state(pc, 19); in l3dss1_release_req()
956 if (!pc->prot.dss1.uus1_data[0]) in l3dss1_release_req()
957 l3dss1_message(pc, MT_RELEASE); in l3dss1_release_req()
959 l3dss1_msg_with_uus(pc, MT_RELEASE); in l3dss1_release_req()
960 L3AddTimer(&pc->timer, T308, CC_T308_1); in l3dss1_release_req()
964 l3dss1_release_cmpl(struct l3_process *pc, u_char pr, void *arg) in l3dss1_release_cmpl() argument
969 if ((ret = l3dss1_get_cause(pc, skb)) > 0) { in l3dss1_release_cmpl()
970 if (pc->debug & L3_DEB_WARN) in l3dss1_release_cmpl()
971 l3_debug(pc->st, "RELCMPL get_cause ret(%d)", ret); in l3dss1_release_cmpl()
973 pc->para.cause = NO_CAUSE; in l3dss1_release_cmpl()
974 StopAllL3Timer(pc); in l3dss1_release_cmpl()
975 newl3state(pc, 0); in l3dss1_release_cmpl()
976 pc->st->l3.l3l4(pc->st, CC_RELEASE | CONFIRM, pc); in l3dss1_release_cmpl()
977 dss1_release_l3_process(pc); in l3dss1_release_cmpl()
1220 l3dss1_setup_req(struct l3_process *pc, u_char pr, in l3dss1_setup_req() argument
1236 MsgHead(p, pc->callref, MT_SETUP); in l3dss1_setup_req()
1238 teln = pc->para.setup.phone; in l3dss1_setup_req()
1251 switch (pc->para.setup.si1) { in l3dss1_setup_req()
1301 if (pc->debug & L3_DEB_WARN) in l3dss1_setup_req()
1302 l3_debug(pc->st, "Wrong MSN Code"); in l3dss1_setup_req()
1313 msn = pc->para.setup.eazmsn; in l3dss1_setup_req()
1373 …if ((pc->para.setup.si2 >= 160) && (pc->para.setup.si2 <= 175)) { // sync. Bitratenadaption, V.110… in l3dss1_setup_req()
1380 *p++ = EncodeSyncParams(pc->para.setup.si2 - 160, 0x80); in l3dss1_setup_req()
1381 …} else if ((pc->para.setup.si2 >= 176) && (pc->para.setup.si2 <= 191)) { // sync. Bitratenadaption… in l3dss1_setup_req()
1388 *p++ = EncodeSyncParams(pc->para.setup.si2 - 176, 0); in l3dss1_setup_req()
1390 } else if (pc->para.setup.si2 >= 192) { // async. Bitratenadaption, V.110/X.30 in l3dss1_setup_req()
1397 p = EncodeASyncParams(p, pc->para.setup.si2 - 192); in l3dss1_setup_req()
1400 switch (pc->para.setup.si1) { in l3dss1_setup_req()
1424 L3DelTimer(&pc->timer); in l3dss1_setup_req()
1425 L3AddTimer(&pc->timer, T303, CC_T303); in l3dss1_setup_req()
1426 newl3state(pc, 1); in l3dss1_setup_req()
1427 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3dss1_setup_req()
1431 l3dss1_call_proc(struct l3_process *pc, u_char pr, void *arg) in l3dss1_call_proc() argument
1436 if ((id = l3dss1_get_channel_id(pc, skb)) >= 0) { in l3dss1_call_proc()
1437 if ((0 == id) || ((3 == id) && (0x10 == pc->para.moderate))) { in l3dss1_call_proc()
1438 if (pc->debug & L3_DEB_WARN) in l3dss1_call_proc()
1439 l3_debug(pc->st, "setup answer with wrong chid %x", id); in l3dss1_call_proc()
1440 pc->para.cause = 100; in l3dss1_call_proc()
1441 l3dss1_status_send(pc, pr, NULL); in l3dss1_call_proc()
1444 pc->para.bchannel = id; in l3dss1_call_proc()
1445 } else if (1 == pc->state) { in l3dss1_call_proc()
1446 if (pc->debug & L3_DEB_WARN) in l3dss1_call_proc()
1447 l3_debug(pc->st, "setup answer wrong chid (ret %d)", id); in l3dss1_call_proc()
1449 pc->para.cause = 96; in l3dss1_call_proc()
1451 pc->para.cause = 100; in l3dss1_call_proc()
1452 l3dss1_status_send(pc, pr, NULL); in l3dss1_call_proc()
1456 ret = check_infoelements(pc, skb, ie_CALL_PROCEEDING); in l3dss1_call_proc()
1458 l3dss1_std_ie_err(pc, ret); in l3dss1_call_proc()
1461 L3DelTimer(&pc->timer); in l3dss1_call_proc()
1462 newl3state(pc, 3); in l3dss1_call_proc()
1463 L3AddTimer(&pc->timer, T310, CC_T310); in l3dss1_call_proc()
1465 l3dss1_std_ie_err(pc, ret); in l3dss1_call_proc()
1466 pc->st->l3.l3l4(pc->st, CC_PROCEEDING | INDICATION, pc); in l3dss1_call_proc()
1470 l3dss1_setup_ack(struct l3_process *pc, u_char pr, void *arg) in l3dss1_setup_ack() argument
1475 if ((id = l3dss1_get_channel_id(pc, skb)) >= 0) { in l3dss1_setup_ack()
1476 if ((0 == id) || ((3 == id) && (0x10 == pc->para.moderate))) { in l3dss1_setup_ack()
1477 if (pc->debug & L3_DEB_WARN) in l3dss1_setup_ack()
1478 l3_debug(pc->st, "setup answer with wrong chid %x", id); in l3dss1_setup_ack()
1479 pc->para.cause = 100; in l3dss1_setup_ack()
1480 l3dss1_status_send(pc, pr, NULL); in l3dss1_setup_ack()
1483 pc->para.bchannel = id; in l3dss1_setup_ack()
1485 if (pc->debug & L3_DEB_WARN) in l3dss1_setup_ack()
1486 l3_debug(pc->st, "setup answer wrong chid (ret %d)", id); in l3dss1_setup_ack()
1488 pc->para.cause = 96; in l3dss1_setup_ack()
1490 pc->para.cause = 100; in l3dss1_setup_ack()
1491 l3dss1_status_send(pc, pr, NULL); in l3dss1_setup_ack()
1495 ret = check_infoelements(pc, skb, ie_SETUP_ACKNOWLEDGE); in l3dss1_setup_ack()
1497 l3dss1_std_ie_err(pc, ret); in l3dss1_setup_ack()
1500 L3DelTimer(&pc->timer); in l3dss1_setup_ack()
1501 newl3state(pc, 2); in l3dss1_setup_ack()
1502 L3AddTimer(&pc->timer, T304, CC_T304); in l3dss1_setup_ack()
1504 l3dss1_std_ie_err(pc, ret); in l3dss1_setup_ack()
1505 pc->st->l3.l3l4(pc->st, CC_MORE_INFO | INDICATION, pc); in l3dss1_setup_ack()
1509 l3dss1_disconnect(struct l3_process *pc, u_char pr, void *arg) in l3dss1_disconnect() argument
1516 StopAllL3Timer(pc); in l3dss1_disconnect()
1517 if ((ret = l3dss1_get_cause(pc, skb))) { in l3dss1_disconnect()
1518 if (pc->debug & L3_DEB_WARN) in l3dss1_disconnect()
1519 l3_debug(pc->st, "DISC get_cause ret(%d)", ret); in l3dss1_disconnect()
1526 l3dss1_parse_facility(pc->st, pc, pc->callref, p); in l3dss1_disconnect()
1527 ret = check_infoelements(pc, skb, ie_DISCONNECT); in l3dss1_disconnect()
1532 ret = pc->state; in l3dss1_disconnect()
1533 newl3state(pc, 12); in l3dss1_disconnect()
1535 newl3state(pc, 19); in l3dss1_disconnect()
1537 pc->st->l3.l3l4(pc->st, CC_DISCONNECT | INDICATION, pc); in l3dss1_disconnect()
1539 l3dss1_release_req(pc, pr, NULL); in l3dss1_disconnect()
1541 l3dss1_message_cause(pc, MT_RELEASE, cause); in l3dss1_disconnect()
1542 L3AddTimer(&pc->timer, T308, CC_T308_1); in l3dss1_disconnect()
1547 l3dss1_connect(struct l3_process *pc, u_char pr, void *arg) in l3dss1_connect() argument
1552 ret = check_infoelements(pc, skb, ie_CONNECT); in l3dss1_connect()
1554 l3dss1_std_ie_err(pc, ret); in l3dss1_connect()
1557 L3DelTimer(&pc->timer); /* T310 */ in l3dss1_connect()
1558 newl3state(pc, 10); in l3dss1_connect()
1559 pc->para.chargeinfo = 0; in l3dss1_connect()
1562 l3dss1_std_ie_err(pc, ret); in l3dss1_connect()
1563 pc->st->l3.l3l4(pc->st, CC_SETUP | CONFIRM, pc); in l3dss1_connect()
1567 l3dss1_alerting(struct l3_process *pc, u_char pr, void *arg) in l3dss1_alerting() argument
1572 ret = check_infoelements(pc, skb, ie_ALERTING); in l3dss1_alerting()
1574 l3dss1_std_ie_err(pc, ret); in l3dss1_alerting()
1577 L3DelTimer(&pc->timer); /* T304 */ in l3dss1_alerting()
1578 newl3state(pc, 4); in l3dss1_alerting()
1580 l3dss1_std_ie_err(pc, ret); in l3dss1_alerting()
1581 pc->st->l3.l3l4(pc->st, CC_ALERTING | INDICATION, pc); in l3dss1_alerting()
1585 l3dss1_setup(struct l3_process *pc, u_char pr, void *arg) in l3dss1_setup() argument
1603 pc->para.setup.si2 = 0; in l3dss1_setup()
1607 pc->para.setup.si1 = 1; in l3dss1_setup()
1610 pc->para.setup.si1 = 7; in l3dss1_setup()
1613 pc->para.setup.si2 = DecodeSI2(skb); in l3dss1_setup()
1617 pc->para.setup.si1 = 2; in l3dss1_setup()
1623 pc->para.setup.si1 = 3; in l3dss1_setup()
1626 pc->para.setup.si1 = 4; in l3dss1_setup()
1634 pc->para.setup.si1 = 8; in l3dss1_setup()
1641 pc->para.moderate = p[3] & 0x7f; in l3dss1_setup()
1648 if (pc->debug & L3_DEB_SI) in l3dss1_setup()
1649 l3_debug(pc->st, "SI=%d, AI=%d", in l3dss1_setup()
1650 pc->para.setup.si1, pc->para.setup.si2); in l3dss1_setup()
1652 if (pc->debug & L3_DEB_WARN) in l3dss1_setup()
1653 l3_debug(pc->st, "setup with wrong bearer(l=%d:%x,%x)", in l3dss1_setup()
1655 pc->para.cause = 100; in l3dss1_setup()
1656 l3dss1_msg_without_setup(pc, pr, NULL); in l3dss1_setup()
1660 if (pc->debug & L3_DEB_WARN) in l3dss1_setup()
1661 l3_debug(pc->st, "setup without bearer capabilities"); in l3dss1_setup()
1663 pc->para.cause = 96; in l3dss1_setup()
1664 l3dss1_msg_without_setup(pc, pr, NULL); in l3dss1_setup()
1670 if ((id = l3dss1_get_channel_id(pc, skb)) >= 0) { in l3dss1_setup()
1671 if ((pc->para.bchannel = id)) { in l3dss1_setup()
1672 if ((3 == id) && (0x10 == pc->para.moderate)) { in l3dss1_setup()
1673 if (pc->debug & L3_DEB_WARN) in l3dss1_setup()
1674 l3_debug(pc->st, "setup with wrong chid %x", in l3dss1_setup()
1676 pc->para.cause = 100; in l3dss1_setup()
1677 l3dss1_msg_without_setup(pc, pr, NULL); in l3dss1_setup()
1682 { if (pc->debug & L3_DEB_WARN) in l3dss1_setup()
1683 l3_debug(pc->st, "setup without bchannel, call waiting"); in l3dss1_setup()
1687 if (pc->debug & L3_DEB_WARN) in l3dss1_setup()
1688 l3_debug(pc->st, "setup with wrong chid ret %d", id); in l3dss1_setup()
1690 pc->para.cause = 96; in l3dss1_setup()
1692 pc->para.cause = 100; in l3dss1_setup()
1693 l3dss1_msg_without_setup(pc, pr, NULL); in l3dss1_setup()
1697 err = check_infoelements(pc, skb, ie_SETUP); in l3dss1_setup()
1699 pc->para.cause = 96; in l3dss1_setup()
1700 l3dss1_msg_without_setup(pc, pr, NULL); in l3dss1_setup()
1705 iecpy(pc->para.setup.eazmsn, p, 1); in l3dss1_setup()
1707 pc->para.setup.eazmsn[0] = 0; in l3dss1_setup()
1715 strcat(pc->para.setup.eazmsn, tmp); in l3dss1_setup()
1716 } else if (pc->debug & L3_DEB_WARN) in l3dss1_setup()
1717 l3_debug(pc->st, "wrong called subaddress"); in l3dss1_setup()
1721 pc->para.setup.plan = p[2]; in l3dss1_setup()
1723 iecpy(pc->para.setup.phone, p, 1); in l3dss1_setup()
1724 pc->para.setup.screen = 0; in l3dss1_setup()
1726 iecpy(pc->para.setup.phone, p, 2); in l3dss1_setup()
1727 pc->para.setup.screen = p[3]; in l3dss1_setup()
1730 pc->para.setup.phone[0] = 0; in l3dss1_setup()
1731 pc->para.setup.plan = 0; in l3dss1_setup()
1732 pc->para.setup.screen = 0; in l3dss1_setup()
1740 strcat(pc->para.setup.phone, tmp); in l3dss1_setup()
1741 } else if (pc->debug & L3_DEB_WARN) in l3dss1_setup()
1742 l3_debug(pc->st, "wrong calling subaddress"); in l3dss1_setup()
1744 newl3state(pc, 6); in l3dss1_setup()
1746 l3dss1_std_ie_err(pc, err); in l3dss1_setup()
1747 pc->st->l3.l3l4(pc->st, CC_SETUP | INDICATION, pc); in l3dss1_setup()
1751 l3dss1_reset(struct l3_process *pc, u_char pr, void *arg) in l3dss1_reset() argument
1753 dss1_release_l3_process(pc); in l3dss1_reset()
1757 l3dss1_disconnect_req(struct l3_process *pc, u_char pr, void *arg) in l3dss1_disconnect_req() argument
1765 if (pc->para.cause != NO_CAUSE) in l3dss1_disconnect_req()
1766 cause = pc->para.cause; in l3dss1_disconnect_req()
1768 StopAllL3Timer(pc); in l3dss1_disconnect_req()
1770 MsgHead(p, pc->callref, MT_DISCONNECT); in l3dss1_disconnect_req()
1777 if (pc->prot.dss1.uus1_data[0]) in l3dss1_disconnect_req()
1779 *p++ = strlen(pc->prot.dss1.uus1_data) + 1; in l3dss1_disconnect_req()
1781 strcpy(p, pc->prot.dss1.uus1_data); in l3dss1_disconnect_req()
1782 p += strlen(pc->prot.dss1.uus1_data); in l3dss1_disconnect_req()
1783 pc->prot.dss1.uus1_data[0] = '\0'; in l3dss1_disconnect_req()
1790 newl3state(pc, 11); in l3dss1_disconnect_req()
1791 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3dss1_disconnect_req()
1792 L3AddTimer(&pc->timer, T305, CC_T305); in l3dss1_disconnect_req()
1796 l3dss1_setup_rsp(struct l3_process *pc, u_char pr, in l3dss1_setup_rsp() argument
1799 if (!pc->para.bchannel) in l3dss1_setup_rsp()
1800 { if (pc->debug & L3_DEB_WARN) in l3dss1_setup_rsp()
1801 l3_debug(pc->st, "D-chan connect for waiting call"); in l3dss1_setup_rsp()
1802 l3dss1_disconnect_req(pc, pr, arg); in l3dss1_setup_rsp()
1805 newl3state(pc, 8); in l3dss1_setup_rsp()
1806 l3dss1_message(pc, MT_CONNECT); in l3dss1_setup_rsp()
1807 L3DelTimer(&pc->timer); in l3dss1_setup_rsp()
1808 L3AddTimer(&pc->timer, T313, CC_T313); in l3dss1_setup_rsp()
1812 l3dss1_connect_ack(struct l3_process *pc, u_char pr, void *arg) in l3dss1_connect_ack() argument
1817 ret = check_infoelements(pc, skb, ie_CONNECT_ACKNOWLEDGE); in l3dss1_connect_ack()
1819 l3dss1_std_ie_err(pc, ret); in l3dss1_connect_ack()
1822 newl3state(pc, 10); in l3dss1_connect_ack()
1823 L3DelTimer(&pc->timer); in l3dss1_connect_ack()
1825 l3dss1_std_ie_err(pc, ret); in l3dss1_connect_ack()
1826 pc->st->l3.l3l4(pc->st, CC_SETUP_COMPL | INDICATION, pc); in l3dss1_connect_ack()
1830 l3dss1_reject_req(struct l3_process *pc, u_char pr, void *arg) in l3dss1_reject_req() argument
1838 if (pc->para.cause != NO_CAUSE) in l3dss1_reject_req()
1839 cause = pc->para.cause; in l3dss1_reject_req()
1841 MsgHead(p, pc->callref, MT_RELEASE_COMPLETE); in l3dss1_reject_req()
1852 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3dss1_reject_req()
1853 pc->st->l3.l3l4(pc->st, CC_RELEASE | INDICATION, pc); in l3dss1_reject_req()
1854 newl3state(pc, 0); in l3dss1_reject_req()
1855 dss1_release_l3_process(pc); in l3dss1_reject_req()
1859 l3dss1_release(struct l3_process *pc, u_char pr, void *arg) in l3dss1_release() argument
1865 StopAllL3Timer(pc); in l3dss1_release()
1866 if ((ret = l3dss1_get_cause(pc, skb)) > 0) { in l3dss1_release()
1867 if (pc->debug & L3_DEB_WARN) in l3dss1_release()
1868 l3_debug(pc->st, "REL get_cause ret(%d)", ret); in l3dss1_release()
1870 pc->para.cause = NO_CAUSE; in l3dss1_release()
1872 l3dss1_parse_facility(pc->st, pc, pc->callref, p); in l3dss1_release()
1874 if ((ret < 0) && (pc->state != 11)) in l3dss1_release()
1878 ret = check_infoelements(pc, skb, ie_RELEASE); in l3dss1_release()
1884 l3dss1_message_cause(pc, MT_RELEASE_COMPLETE, cause); in l3dss1_release()
1886 l3dss1_message(pc, MT_RELEASE_COMPLETE); in l3dss1_release()
1887 pc->st->l3.l3l4(pc->st, CC_RELEASE | INDICATION, pc); in l3dss1_release()
1888 newl3state(pc, 0); in l3dss1_release()
1889 dss1_release_l3_process(pc); in l3dss1_release()
1893 l3dss1_alert_req(struct l3_process *pc, u_char pr, in l3dss1_alert_req() argument
1896 newl3state(pc, 7); in l3dss1_alert_req()
1897 if (!pc->prot.dss1.uus1_data[0]) in l3dss1_alert_req()
1898 l3dss1_message(pc, MT_ALERTING); in l3dss1_alert_req()
1900 l3dss1_msg_with_uus(pc, MT_ALERTING); in l3dss1_alert_req()
1904 l3dss1_proceed_req(struct l3_process *pc, u_char pr, in l3dss1_proceed_req() argument
1907 newl3state(pc, 9); in l3dss1_proceed_req()
1908 l3dss1_message(pc, MT_CALL_PROCEEDING); in l3dss1_proceed_req()
1909 pc->st->l3.l3l4(pc->st, CC_PROCEED_SEND | INDICATION, pc); in l3dss1_proceed_req()
1913 l3dss1_setup_ack_req(struct l3_process *pc, u_char pr, in l3dss1_setup_ack_req() argument
1916 newl3state(pc, 25); in l3dss1_setup_ack_req()
1917 L3DelTimer(&pc->timer); in l3dss1_setup_ack_req()
1918 L3AddTimer(&pc->timer, T302, CC_T302); in l3dss1_setup_ack_req()
1919 l3dss1_message(pc, MT_SETUP_ACKNOWLEDGE); in l3dss1_setup_ack_req()
1926 l3dss1_deliver_display(struct l3_process *pc, int pr, u_char *infp) in l3dss1_deliver_display() argument
1934 if (!pc->chan) return; in l3dss1_deliver_display()
1941 cs = pc->st->l1.hardware; in l3dss1_deliver_display()
1943 ic.arg = pc->chan->chan; in l3dss1_deliver_display()
1949 l3dss1_progress(struct l3_process *pc, u_char pr, void *arg) in l3dss1_progress() argument
1958 pc->para.cause = 100; in l3dss1_progress()
1977 pc->para.cause = 100; in l3dss1_progress()
1983 pc->para.cause = 100; in l3dss1_progress()
1988 pc->para.cause = 96; in l3dss1_progress()
1992 if (pc->debug & L3_DEB_WARN) in l3dss1_progress()
1993 l3_debug(pc->st, "progress error %d", err); in l3dss1_progress()
1994 l3dss1_status_send(pc, pr, NULL); in l3dss1_progress()
1998 err = check_infoelements(pc, skb, ie_PROGRESS); in l3dss1_progress()
2000 l3dss1_std_ie_err(pc, err); in l3dss1_progress()
2002 pc->st->l3.l3l4(pc->st, CC_PROGRESS | INDICATION, pc); in l3dss1_progress()
2006 l3dss1_notify(struct l3_process *pc, u_char pr, void *arg) in l3dss1_notify() argument
2015 pc->para.cause = 100; in l3dss1_notify()
2023 pc->para.cause = 100; in l3dss1_notify()
2029 pc->para.cause = 96; in l3dss1_notify()
2033 if (pc->debug & L3_DEB_WARN) in l3dss1_notify()
2034 l3_debug(pc->st, "notify error %d", err); in l3dss1_notify()
2035 l3dss1_status_send(pc, pr, NULL); in l3dss1_notify()
2039 err = check_infoelements(pc, skb, ie_NOTIFY); in l3dss1_notify()
2041 l3dss1_std_ie_err(pc, err); in l3dss1_notify()
2043 pc->st->l3.l3l4(pc->st, CC_NOTIFY | INDICATION, pc); in l3dss1_notify()
2047 l3dss1_status_enq(struct l3_process *pc, u_char pr, void *arg) in l3dss1_status_enq() argument
2052 ret = check_infoelements(pc, skb, ie_STATUS_ENQUIRY); in l3dss1_status_enq()
2053 l3dss1_std_ie_err(pc, ret); in l3dss1_status_enq()
2054 pc->para.cause = 30; /* response to STATUS_ENQUIRY */ in l3dss1_status_enq()
2055 l3dss1_status_send(pc, pr, NULL); in l3dss1_status_enq()
2059 l3dss1_information(struct l3_process *pc, u_char pr, void *arg) in l3dss1_information() argument
2066 ret = check_infoelements(pc, skb, ie_INFORMATION); in l3dss1_information()
2068 l3dss1_std_ie_err(pc, ret); in l3dss1_information()
2069 if (pc->state == 25) { /* overlap receiving */ in l3dss1_information()
2070 L3DelTimer(&pc->timer); in l3dss1_information()
2074 strcat(pc->para.setup.eazmsn, tmp); in l3dss1_information()
2075 pc->st->l3.l3l4(pc->st, CC_MORE_INFO | INDICATION, pc); in l3dss1_information()
2077 L3AddTimer(&pc->timer, T302, CC_T302); in l3dss1_information()
2084 static void l3dss1_redir_req(struct l3_process *pc, u_char pr, void *arg) in l3dss1_redir_req() argument
2095 strcpy(pc->prot.dss1.uus1_data, pc->chan->setup.eazmsn); /* copy uus element if available */ in l3dss1_redir_req()
2096 if (!pc->chan->setup.phone[0]) in l3dss1_redir_req()
2097 { pc->para.cause = -1; in l3dss1_redir_req()
2098 l3dss1_disconnect_req(pc, pr, arg); /* disconnect immediately */ in l3dss1_redir_req()
2102 if (pc->prot.dss1.invoke_id) in l3dss1_redir_req()
2103 free_invoke_id(pc->st, pc->prot.dss1.invoke_id); in l3dss1_redir_req()
2105 if (!(pc->prot.dss1.invoke_id = new_invoke_id(pc->st))) in l3dss1_redir_req()
2108 MsgHead(p, pc->callref, MT_FACILITY); in l3dss1_redir_req()
2110 …for (subp = pc->chan->setup.phone; (*subp) && (*subp != '.'); subp++) len_phone++; /* len of phone… in l3dss1_redir_req()
2121 *p++ = pc->prot.dss1.invoke_id; /* invoke id */ in l3dss1_redir_req()
2134 *p++ = pc->chan->setup.phone[l]; in l3dss1_redir_req()
2144 *p++ = pc->chan->setup.screen; in l3dss1_redir_req()
2150 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3dss1_redir_req()
2156 static void l3dss1_redir_req_early(struct l3_process *pc, u_char pr, void *arg) in l3dss1_redir_req_early() argument
2158 l3dss1_proceed_req(pc, pr, arg); in l3dss1_redir_req_early()
2159 l3dss1_redir_req(pc, pr, arg); in l3dss1_redir_req_early()
2173 struct l3_process *pc = NULL; in l3dss1_cmd_global() local
2207 if (!(pc = dss1_new_l3_process(st, -1))) in l3dss1_cmd_global()
2211 pc->prot.dss1.ll_id = ic->parm.dss1_io.ll_id; /* remember id */ in l3dss1_cmd_global()
2212 pc->prot.dss1.proc = ic->parm.dss1_io.proc; /* and procedure */ in l3dss1_cmd_global()
2216 if (pc) dss1_release_l3_process(pc); in l3dss1_cmd_global()
2221 if (pc) in l3dss1_cmd_global()
2222 { pc->prot.dss1.invoke_id = id; /* remember id */ in l3dss1_cmd_global()
2223 L3AddTimer(&pc->timer, ic->parm.dss1_io.timeout, CC_TDSS1_IO | REQUEST); in l3dss1_cmd_global()
2231 if ((pc = l3dss1_search_dummy_proc(st, ic->parm.dss1_io.hl_id))) in l3dss1_cmd_global()
2232 { L3DelTimer(&pc->timer); /* remove timer */ in l3dss1_cmd_global()
2233 dss1_release_l3_process(pc); in l3dss1_cmd_global()
2250 l3dss1_io_timer(struct l3_process *pc) in l3dss1_io_timer() argument
2252 struct IsdnCardState *cs = pc->st->l1.hardware; in l3dss1_io_timer()
2254 L3DelTimer(&pc->timer); /* remove timer */ in l3dss1_io_timer()
2259 ic.parm.dss1_io.hl_id = pc->prot.dss1.invoke_id; in l3dss1_io_timer()
2260 ic.parm.dss1_io.ll_id = pc->prot.dss1.ll_id; in l3dss1_io_timer()
2261 ic.parm.dss1_io.proc = pc->prot.dss1.proc; in l3dss1_io_timer()
2265 free_invoke_id(pc->st, pc->prot.dss1.invoke_id); in l3dss1_io_timer()
2266 pc->prot.dss1.invoke_id = 0; /* reset id */ in l3dss1_io_timer()
2270 dss1_release_l3_process(pc); in l3dss1_io_timer()
2274 l3dss1_release_ind(struct l3_process *pc, u_char pr, void *arg) in l3dss1_release_ind() argument
2290 pc->st->l3.l3l4(pc->st, CC_RELEASE | INDICATION, pc); in l3dss1_release_ind()
2291 newl3state(pc, 0); in l3dss1_release_ind()
2292 dss1_release_l3_process(pc); in l3dss1_release_ind()
2294 pc->st->l3.l3l4(pc->st, CC_IGNORE | INDICATION, pc); in l3dss1_release_ind()
2299 l3dss1_dummy(struct l3_process *pc, u_char pr, void *arg) in l3dss1_dummy() argument
2304 l3dss1_t302(struct l3_process *pc, u_char pr, void *arg) in l3dss1_t302() argument
2306 L3DelTimer(&pc->timer); in l3dss1_t302()
2307 pc->para.loc = 0; in l3dss1_t302()
2308 pc->para.cause = 28; /* invalid number */ in l3dss1_t302()
2309 l3dss1_disconnect_req(pc, pr, NULL); in l3dss1_t302()
2310 pc->st->l3.l3l4(pc->st, CC_SETUP_ERR, pc); in l3dss1_t302()
2314 l3dss1_t303(struct l3_process *pc, u_char pr, void *arg) in l3dss1_t303() argument
2316 if (pc->N303 > 0) { in l3dss1_t303()
2317 pc->N303--; in l3dss1_t303()
2318 L3DelTimer(&pc->timer); in l3dss1_t303()
2319 l3dss1_setup_req(pc, pr, arg); in l3dss1_t303()
2321 L3DelTimer(&pc->timer); in l3dss1_t303()
2322 l3dss1_message_cause(pc, MT_RELEASE_COMPLETE, 102); in l3dss1_t303()
2323 pc->st->l3.l3l4(pc->st, CC_NOSETUP_RSP, pc); in l3dss1_t303()
2324 dss1_release_l3_process(pc); in l3dss1_t303()
2329 l3dss1_t304(struct l3_process *pc, u_char pr, void *arg) in l3dss1_t304() argument
2331 L3DelTimer(&pc->timer); in l3dss1_t304()
2332 pc->para.loc = 0; in l3dss1_t304()
2333 pc->para.cause = 102; in l3dss1_t304()
2334 l3dss1_disconnect_req(pc, pr, NULL); in l3dss1_t304()
2335 pc->st->l3.l3l4(pc->st, CC_SETUP_ERR, pc); in l3dss1_t304()
2340 l3dss1_t305(struct l3_process *pc, u_char pr, void *arg) in l3dss1_t305() argument
2348 L3DelTimer(&pc->timer); in l3dss1_t305()
2349 if (pc->para.cause != NO_CAUSE) in l3dss1_t305()
2350 cause = pc->para.cause; in l3dss1_t305()
2352 MsgHead(p, pc->callref, MT_RELEASE); in l3dss1_t305()
2363 newl3state(pc, 19); in l3dss1_t305()
2364 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3dss1_t305()
2365 L3AddTimer(&pc->timer, T308, CC_T308_1); in l3dss1_t305()
2369 l3dss1_t310(struct l3_process *pc, u_char pr, void *arg) in l3dss1_t310() argument
2371 L3DelTimer(&pc->timer); in l3dss1_t310()
2372 pc->para.loc = 0; in l3dss1_t310()
2373 pc->para.cause = 102; in l3dss1_t310()
2374 l3dss1_disconnect_req(pc, pr, NULL); in l3dss1_t310()
2375 pc->st->l3.l3l4(pc->st, CC_SETUP_ERR, pc); in l3dss1_t310()
2379 l3dss1_t313(struct l3_process *pc, u_char pr, void *arg) in l3dss1_t313() argument
2381 L3DelTimer(&pc->timer); in l3dss1_t313()
2382 pc->para.loc = 0; in l3dss1_t313()
2383 pc->para.cause = 102; in l3dss1_t313()
2384 l3dss1_disconnect_req(pc, pr, NULL); in l3dss1_t313()
2385 pc->st->l3.l3l4(pc->st, CC_CONNECT_ERR, pc); in l3dss1_t313()
2389 l3dss1_t308_1(struct l3_process *pc, u_char pr, void *arg) in l3dss1_t308_1() argument
2391 newl3state(pc, 19); in l3dss1_t308_1()
2392 L3DelTimer(&pc->timer); in l3dss1_t308_1()
2393 l3dss1_message(pc, MT_RELEASE); in l3dss1_t308_1()
2394 L3AddTimer(&pc->timer, T308, CC_T308_2); in l3dss1_t308_1()
2398 l3dss1_t308_2(struct l3_process *pc, u_char pr, void *arg) in l3dss1_t308_2() argument
2400 L3DelTimer(&pc->timer); in l3dss1_t308_2()
2401 pc->st->l3.l3l4(pc->st, CC_RELEASE_ERR, pc); in l3dss1_t308_2()
2402 dss1_release_l3_process(pc); in l3dss1_t308_2()
2406 l3dss1_t318(struct l3_process *pc, u_char pr, void *arg) in l3dss1_t318() argument
2408 L3DelTimer(&pc->timer); in l3dss1_t318()
2409 pc->para.cause = 102; /* Timer expiry */ in l3dss1_t318()
2410 pc->para.loc = 0; /* local */ in l3dss1_t318()
2411 pc->st->l3.l3l4(pc->st, CC_RESUME_ERR, pc); in l3dss1_t318()
2412 newl3state(pc, 19); in l3dss1_t318()
2413 l3dss1_message(pc, MT_RELEASE); in l3dss1_t318()
2414 L3AddTimer(&pc->timer, T308, CC_T308_1); in l3dss1_t318()
2418 l3dss1_t319(struct l3_process *pc, u_char pr, void *arg) in l3dss1_t319() argument
2420 L3DelTimer(&pc->timer); in l3dss1_t319()
2421 pc->para.cause = 102; /* Timer expiry */ in l3dss1_t319()
2422 pc->para.loc = 0; /* local */ in l3dss1_t319()
2423 pc->st->l3.l3l4(pc->st, CC_SUSPEND_ERR, pc); in l3dss1_t319()
2424 newl3state(pc, 10); in l3dss1_t319()
2428 l3dss1_restart(struct l3_process *pc, u_char pr, void *arg) in l3dss1_restart() argument
2430 L3DelTimer(&pc->timer); in l3dss1_restart()
2431 pc->st->l3.l3l4(pc->st, CC_RELEASE | INDICATION, pc); in l3dss1_restart()
2432 dss1_release_l3_process(pc); in l3dss1_restart()
2436 l3dss1_status(struct l3_process *pc, u_char pr, void *arg) in l3dss1_status() argument
2443 if ((ret = l3dss1_get_cause(pc, skb))) { in l3dss1_status()
2444 if (pc->debug & L3_DEB_WARN) in l3dss1_status()
2445 l3_debug(pc->st, "STATUS get_cause ret(%d)", ret); in l3dss1_status()
2455 if (!ie_in_set(pc, *p, l3_valid_states)) in l3dss1_status()
2462 ret = check_infoelements(pc, skb, ie_STATUS); in l3dss1_status()
2471 if (pc->debug & L3_DEB_WARN) in l3dss1_status()
2472 l3_debug(pc->st, "STATUS error(%d/%d)", ret, cause); in l3dss1_status()
2473 tmp = pc->para.cause; in l3dss1_status()
2474 pc->para.cause = cause; in l3dss1_status()
2475 l3dss1_status_send(pc, 0, NULL); in l3dss1_status()
2477 pc->para.cause = tmp; in l3dss1_status()
2481 cause = pc->para.cause; in l3dss1_status()
2487 pc->st->l3.l3l4(pc->st, CC_RELEASE | INDICATION, pc); in l3dss1_status()
2488 newl3state(pc, 0); in l3dss1_status()
2489 dss1_release_l3_process(pc); in l3dss1_status()
2494 l3dss1_facility(struct l3_process *pc, u_char pr, void *arg) in l3dss1_facility() argument
2499 ret = check_infoelements(pc, skb, ie_FACILITY); in l3dss1_facility()
2500 l3dss1_std_ie_err(pc, ret); in l3dss1_facility()
2504 l3dss1_parse_facility(pc->st, pc, pc->callref, p); in l3dss1_facility()
2509 l3dss1_suspend_req(struct l3_process *pc, u_char pr, void *arg) in l3dss1_suspend_req() argument
2515 u_char *msg = pc->chan->setup.phone; in l3dss1_suspend_req()
2517 MsgHead(p, pc->callref, MT_SUSPEND); in l3dss1_suspend_req()
2525 l3_debug(pc->st, "SUS wrong CALL_ID len %d", l); in l3dss1_suspend_req()
2532 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3dss1_suspend_req()
2533 newl3state(pc, 15); in l3dss1_suspend_req()
2534 L3AddTimer(&pc->timer, T319, CC_T319); in l3dss1_suspend_req()
2538 l3dss1_suspend_ack(struct l3_process *pc, u_char pr, void *arg) in l3dss1_suspend_ack() argument
2543 L3DelTimer(&pc->timer); in l3dss1_suspend_ack()
2544 newl3state(pc, 0); in l3dss1_suspend_ack()
2545 pc->para.cause = NO_CAUSE; in l3dss1_suspend_ack()
2546 pc->st->l3.l3l4(pc->st, CC_SUSPEND | CONFIRM, pc); in l3dss1_suspend_ack()
2548 if ((ret = check_infoelements(pc, skb, ie_SUSPEND_ACKNOWLEDGE))) in l3dss1_suspend_ack()
2549 if (pc->debug & L3_DEB_WARN) in l3dss1_suspend_ack()
2550 l3_debug(pc->st, "SUSPACK check ie(%d)", ret); in l3dss1_suspend_ack()
2551 dss1_release_l3_process(pc); in l3dss1_suspend_ack()
2555 l3dss1_suspend_rej(struct l3_process *pc, u_char pr, void *arg) in l3dss1_suspend_rej() argument
2560 if ((ret = l3dss1_get_cause(pc, skb))) { in l3dss1_suspend_rej()
2561 if (pc->debug & L3_DEB_WARN) in l3dss1_suspend_rej()
2562 l3_debug(pc->st, "SUSP_REJ get_cause ret(%d)", ret); in l3dss1_suspend_rej()
2564 pc->para.cause = 96; in l3dss1_suspend_rej()
2566 pc->para.cause = 100; in l3dss1_suspend_rej()
2567 l3dss1_status_send(pc, pr, NULL); in l3dss1_suspend_rej()
2570 ret = check_infoelements(pc, skb, ie_SUSPEND_REJECT); in l3dss1_suspend_rej()
2572 l3dss1_std_ie_err(pc, ret); in l3dss1_suspend_rej()
2575 L3DelTimer(&pc->timer); in l3dss1_suspend_rej()
2576 pc->st->l3.l3l4(pc->st, CC_SUSPEND_ERR, pc); in l3dss1_suspend_rej()
2577 newl3state(pc, 10); in l3dss1_suspend_rej()
2579 l3dss1_std_ie_err(pc, ret); in l3dss1_suspend_rej()
2583 l3dss1_resume_req(struct l3_process *pc, u_char pr, void *arg) in l3dss1_resume_req() argument
2589 u_char *msg = pc->para.setup.phone; in l3dss1_resume_req()
2591 MsgHead(p, pc->callref, MT_RESUME); in l3dss1_resume_req()
2600 l3_debug(pc->st, "RES wrong CALL_ID len %d", l); in l3dss1_resume_req()
2607 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3dss1_resume_req()
2608 newl3state(pc, 17); in l3dss1_resume_req()
2609 L3AddTimer(&pc->timer, T318, CC_T318); in l3dss1_resume_req()
2613 l3dss1_resume_ack(struct l3_process *pc, u_char pr, void *arg) in l3dss1_resume_ack() argument
2618 if ((id = l3dss1_get_channel_id(pc, skb)) > 0) { in l3dss1_resume_ack()
2619 if ((0 == id) || ((3 == id) && (0x10 == pc->para.moderate))) { in l3dss1_resume_ack()
2620 if (pc->debug & L3_DEB_WARN) in l3dss1_resume_ack()
2621 l3_debug(pc->st, "resume ack with wrong chid %x", id); in l3dss1_resume_ack()
2622 pc->para.cause = 100; in l3dss1_resume_ack()
2623 l3dss1_status_send(pc, pr, NULL); in l3dss1_resume_ack()
2626 pc->para.bchannel = id; in l3dss1_resume_ack()
2627 } else if (1 == pc->state) { in l3dss1_resume_ack()
2628 if (pc->debug & L3_DEB_WARN) in l3dss1_resume_ack()
2629 l3_debug(pc->st, "resume ack without chid (ret %d)", id); in l3dss1_resume_ack()
2630 pc->para.cause = 96; in l3dss1_resume_ack()
2631 l3dss1_status_send(pc, pr, NULL); in l3dss1_resume_ack()
2634 ret = check_infoelements(pc, skb, ie_RESUME_ACKNOWLEDGE); in l3dss1_resume_ack()
2636 l3dss1_std_ie_err(pc, ret); in l3dss1_resume_ack()
2639 L3DelTimer(&pc->timer); in l3dss1_resume_ack()
2640 pc->st->l3.l3l4(pc->st, CC_RESUME | CONFIRM, pc); in l3dss1_resume_ack()
2641 newl3state(pc, 10); in l3dss1_resume_ack()
2643 l3dss1_std_ie_err(pc, ret); in l3dss1_resume_ack()
2647 l3dss1_resume_rej(struct l3_process *pc, u_char pr, void *arg) in l3dss1_resume_rej() argument
2652 if ((ret = l3dss1_get_cause(pc, skb))) { in l3dss1_resume_rej()
2653 if (pc->debug & L3_DEB_WARN) in l3dss1_resume_rej()
2654 l3_debug(pc->st, "RES_REJ get_cause ret(%d)", ret); in l3dss1_resume_rej()
2656 pc->para.cause = 96; in l3dss1_resume_rej()
2658 pc->para.cause = 100; in l3dss1_resume_rej()
2659 l3dss1_status_send(pc, pr, NULL); in l3dss1_resume_rej()
2662 ret = check_infoelements(pc, skb, ie_RESUME_REJECT); in l3dss1_resume_rej()
2664 l3dss1_std_ie_err(pc, ret); in l3dss1_resume_rej()
2667 L3DelTimer(&pc->timer); in l3dss1_resume_rej()
2668 pc->st->l3.l3l4(pc->st, CC_RESUME_ERR, pc); in l3dss1_resume_rej()
2669 newl3state(pc, 0); in l3dss1_resume_rej()
2671 l3dss1_std_ie_err(pc, ret); in l3dss1_resume_rej()
2672 dss1_release_l3_process(pc); in l3dss1_resume_rej()
2676 l3dss1_global_restart(struct l3_process *pc, u_char pr, void *arg) in l3dss1_global_restart() argument
2685 newl3state(pc, 2); in l3dss1_global_restart()
2686 L3DelTimer(&pc->timer); in l3dss1_global_restart()
2690 l3_debug(pc->st, "Restart %x", ri); in l3dss1_global_restart()
2692 l3_debug(pc->st, "Restart without restart IE"); in l3dss1_global_restart()
2699 if (pc->st->l3.debug) in l3dss1_global_restart()
2700 l3_debug(pc->st, "Restart for channel %d", chan); in l3dss1_global_restart()
2702 newl3state(pc, 2); in l3dss1_global_restart()
2703 up = pc->st->l3.proc; in l3dss1_global_restart()
2712 MsgHead(p, pc->callref, MT_RESTART_ACKNOWLEDGE); in l3dss1_global_restart()
2725 newl3state(pc, 0); in l3dss1_global_restart()
2726 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3dss1_global_restart()
2730 l3dss1_dl_reset(struct l3_process *pc, u_char pr, void *arg) in l3dss1_dl_reset() argument
2732 pc->para.cause = 0x29; /* Temporary failure */ in l3dss1_dl_reset()
2733 pc->para.loc = 0; in l3dss1_dl_reset()
2734 l3dss1_disconnect_req(pc, pr, NULL); in l3dss1_dl_reset()
2735 pc->st->l3.l3l4(pc->st, CC_SETUP_ERR, pc); in l3dss1_dl_reset()
2739 l3dss1_dl_release(struct l3_process *pc, u_char pr, void *arg) in l3dss1_dl_release() argument
2741 newl3state(pc, 0); in l3dss1_dl_release()
2742 pc->para.cause = 0x1b; /* Destination out of order */ in l3dss1_dl_release()
2743 pc->para.loc = 0; in l3dss1_dl_release()
2744 pc->st->l3.l3l4(pc->st, CC_RELEASE | INDICATION, pc); in l3dss1_dl_release()
2745 release_l3_process(pc); in l3dss1_dl_release()
2749 l3dss1_dl_reestablish(struct l3_process *pc, u_char pr, void *arg) in l3dss1_dl_reestablish() argument
2751 L3DelTimer(&pc->timer); in l3dss1_dl_reestablish()
2752 L3AddTimer(&pc->timer, T309, CC_T309); in l3dss1_dl_reestablish()
2753 l3_msg(pc->st, DL_ESTABLISH | REQUEST, NULL); in l3dss1_dl_reestablish()
2757 l3dss1_dl_reest_status(struct l3_process *pc, u_char pr, void *arg) in l3dss1_dl_reest_status() argument
2759 L3DelTimer(&pc->timer); in l3dss1_dl_reest_status()
2761 pc->para.cause = 0x1F; /* normal, unspecified */ in l3dss1_dl_reest_status()
2762 l3dss1_status_send(pc, 0, NULL); in l3dss1_dl_reest_status()