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()
1302 if (pc->debug & L3_DEB_WARN) in l3dss1_setup_req()
1303 l3_debug(pc->st, "Wrong MSN Code"); in l3dss1_setup_req()
1314 msn = pc->para.setup.eazmsn; in l3dss1_setup_req()
1374 …if ((pc->para.setup.si2 >= 160) && (pc->para.setup.si2 <= 175)) { // sync. Bitratenadaption, V.110… in l3dss1_setup_req()
1381 *p++ = EncodeSyncParams(pc->para.setup.si2 - 160, 0x80); in l3dss1_setup_req()
1382 …} else if ((pc->para.setup.si2 >= 176) && (pc->para.setup.si2 <= 191)) { // sync. Bitratenadaption… in l3dss1_setup_req()
1389 *p++ = EncodeSyncParams(pc->para.setup.si2 - 176, 0); in l3dss1_setup_req()
1391 } else if (pc->para.setup.si2 >= 192) { // async. Bitratenadaption, V.110/X.30 in l3dss1_setup_req()
1398 p = EncodeASyncParams(p, pc->para.setup.si2 - 192); in l3dss1_setup_req()
1401 switch (pc->para.setup.si1) { in l3dss1_setup_req()
1425 L3DelTimer(&pc->timer); in l3dss1_setup_req()
1426 L3AddTimer(&pc->timer, T303, CC_T303); in l3dss1_setup_req()
1427 newl3state(pc, 1); in l3dss1_setup_req()
1428 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3dss1_setup_req()
1432 l3dss1_call_proc(struct l3_process *pc, u_char pr, void *arg) in l3dss1_call_proc() argument
1437 if ((id = l3dss1_get_channel_id(pc, skb)) >= 0) { in l3dss1_call_proc()
1438 if ((0 == id) || ((3 == id) && (0x10 == pc->para.moderate))) { in l3dss1_call_proc()
1439 if (pc->debug & L3_DEB_WARN) in l3dss1_call_proc()
1440 l3_debug(pc->st, "setup answer with wrong chid %x", id); in l3dss1_call_proc()
1441 pc->para.cause = 100; in l3dss1_call_proc()
1442 l3dss1_status_send(pc, pr, NULL); in l3dss1_call_proc()
1445 pc->para.bchannel = id; in l3dss1_call_proc()
1446 } else if (1 == pc->state) { in l3dss1_call_proc()
1447 if (pc->debug & L3_DEB_WARN) in l3dss1_call_proc()
1448 l3_debug(pc->st, "setup answer wrong chid (ret %d)", id); in l3dss1_call_proc()
1450 pc->para.cause = 96; in l3dss1_call_proc()
1452 pc->para.cause = 100; in l3dss1_call_proc()
1453 l3dss1_status_send(pc, pr, NULL); in l3dss1_call_proc()
1457 ret = check_infoelements(pc, skb, ie_CALL_PROCEEDING); in l3dss1_call_proc()
1459 l3dss1_std_ie_err(pc, ret); in l3dss1_call_proc()
1462 L3DelTimer(&pc->timer); in l3dss1_call_proc()
1463 newl3state(pc, 3); in l3dss1_call_proc()
1464 L3AddTimer(&pc->timer, T310, CC_T310); in l3dss1_call_proc()
1466 l3dss1_std_ie_err(pc, ret); in l3dss1_call_proc()
1467 pc->st->l3.l3l4(pc->st, CC_PROCEEDING | INDICATION, pc); in l3dss1_call_proc()
1471 l3dss1_setup_ack(struct l3_process *pc, u_char pr, void *arg) in l3dss1_setup_ack() argument
1476 if ((id = l3dss1_get_channel_id(pc, skb)) >= 0) { in l3dss1_setup_ack()
1477 if ((0 == id) || ((3 == id) && (0x10 == pc->para.moderate))) { in l3dss1_setup_ack()
1478 if (pc->debug & L3_DEB_WARN) in l3dss1_setup_ack()
1479 l3_debug(pc->st, "setup answer with wrong chid %x", id); in l3dss1_setup_ack()
1480 pc->para.cause = 100; in l3dss1_setup_ack()
1481 l3dss1_status_send(pc, pr, NULL); in l3dss1_setup_ack()
1484 pc->para.bchannel = id; in l3dss1_setup_ack()
1486 if (pc->debug & L3_DEB_WARN) in l3dss1_setup_ack()
1487 l3_debug(pc->st, "setup answer wrong chid (ret %d)", id); in l3dss1_setup_ack()
1489 pc->para.cause = 96; in l3dss1_setup_ack()
1491 pc->para.cause = 100; in l3dss1_setup_ack()
1492 l3dss1_status_send(pc, pr, NULL); in l3dss1_setup_ack()
1496 ret = check_infoelements(pc, skb, ie_SETUP_ACKNOWLEDGE); in l3dss1_setup_ack()
1498 l3dss1_std_ie_err(pc, ret); in l3dss1_setup_ack()
1501 L3DelTimer(&pc->timer); in l3dss1_setup_ack()
1502 newl3state(pc, 2); in l3dss1_setup_ack()
1503 L3AddTimer(&pc->timer, T304, CC_T304); in l3dss1_setup_ack()
1505 l3dss1_std_ie_err(pc, ret); in l3dss1_setup_ack()
1506 pc->st->l3.l3l4(pc->st, CC_MORE_INFO | INDICATION, pc); in l3dss1_setup_ack()
1510 l3dss1_disconnect(struct l3_process *pc, u_char pr, void *arg) in l3dss1_disconnect() argument
1517 StopAllL3Timer(pc); in l3dss1_disconnect()
1518 if ((ret = l3dss1_get_cause(pc, skb))) { in l3dss1_disconnect()
1519 if (pc->debug & L3_DEB_WARN) in l3dss1_disconnect()
1520 l3_debug(pc->st, "DISC get_cause ret(%d)", ret); in l3dss1_disconnect()
1527 l3dss1_parse_facility(pc->st, pc, pc->callref, p); in l3dss1_disconnect()
1528 ret = check_infoelements(pc, skb, ie_DISCONNECT); in l3dss1_disconnect()
1533 ret = pc->state; in l3dss1_disconnect()
1534 newl3state(pc, 12); in l3dss1_disconnect()
1536 newl3state(pc, 19); in l3dss1_disconnect()
1538 pc->st->l3.l3l4(pc->st, CC_DISCONNECT | INDICATION, pc); in l3dss1_disconnect()
1540 l3dss1_release_req(pc, pr, NULL); in l3dss1_disconnect()
1542 l3dss1_message_cause(pc, MT_RELEASE, cause); in l3dss1_disconnect()
1543 L3AddTimer(&pc->timer, T308, CC_T308_1); in l3dss1_disconnect()
1548 l3dss1_connect(struct l3_process *pc, u_char pr, void *arg) in l3dss1_connect() argument
1553 ret = check_infoelements(pc, skb, ie_CONNECT); in l3dss1_connect()
1555 l3dss1_std_ie_err(pc, ret); in l3dss1_connect()
1558 L3DelTimer(&pc->timer); /* T310 */ in l3dss1_connect()
1559 newl3state(pc, 10); in l3dss1_connect()
1560 pc->para.chargeinfo = 0; in l3dss1_connect()
1563 l3dss1_std_ie_err(pc, ret); in l3dss1_connect()
1564 pc->st->l3.l3l4(pc->st, CC_SETUP | CONFIRM, pc); in l3dss1_connect()
1568 l3dss1_alerting(struct l3_process *pc, u_char pr, void *arg) in l3dss1_alerting() argument
1573 ret = check_infoelements(pc, skb, ie_ALERTING); in l3dss1_alerting()
1575 l3dss1_std_ie_err(pc, ret); in l3dss1_alerting()
1578 L3DelTimer(&pc->timer); /* T304 */ in l3dss1_alerting()
1579 newl3state(pc, 4); in l3dss1_alerting()
1581 l3dss1_std_ie_err(pc, ret); in l3dss1_alerting()
1582 pc->st->l3.l3l4(pc->st, CC_ALERTING | INDICATION, pc); in l3dss1_alerting()
1586 l3dss1_setup(struct l3_process *pc, u_char pr, void *arg) in l3dss1_setup() argument
1604 pc->para.setup.si2 = 0; in l3dss1_setup()
1608 pc->para.setup.si1 = 1; in l3dss1_setup()
1611 pc->para.setup.si1 = 7; in l3dss1_setup()
1614 pc->para.setup.si2 = DecodeSI2(skb); in l3dss1_setup()
1618 pc->para.setup.si1 = 2; in l3dss1_setup()
1624 pc->para.setup.si1 = 3; in l3dss1_setup()
1627 pc->para.setup.si1 = 4; in l3dss1_setup()
1635 pc->para.setup.si1 = 8; in l3dss1_setup()
1642 pc->para.moderate = p[3] & 0x7f; in l3dss1_setup()
1649 if (pc->debug & L3_DEB_SI) in l3dss1_setup()
1650 l3_debug(pc->st, "SI=%d, AI=%d", in l3dss1_setup()
1651 pc->para.setup.si1, pc->para.setup.si2); in l3dss1_setup()
1653 if (pc->debug & L3_DEB_WARN) in l3dss1_setup()
1654 l3_debug(pc->st, "setup with wrong bearer(l=%d:%x,%x)", in l3dss1_setup()
1656 pc->para.cause = 100; in l3dss1_setup()
1657 l3dss1_msg_without_setup(pc, pr, NULL); in l3dss1_setup()
1661 if (pc->debug & L3_DEB_WARN) in l3dss1_setup()
1662 l3_debug(pc->st, "setup without bearer capabilities"); in l3dss1_setup()
1664 pc->para.cause = 96; in l3dss1_setup()
1665 l3dss1_msg_without_setup(pc, pr, NULL); in l3dss1_setup()
1671 if ((id = l3dss1_get_channel_id(pc, skb)) >= 0) { in l3dss1_setup()
1672 if ((pc->para.bchannel = id)) { in l3dss1_setup()
1673 if ((3 == id) && (0x10 == pc->para.moderate)) { in l3dss1_setup()
1674 if (pc->debug & L3_DEB_WARN) in l3dss1_setup()
1675 l3_debug(pc->st, "setup with wrong chid %x", in l3dss1_setup()
1677 pc->para.cause = 100; in l3dss1_setup()
1678 l3dss1_msg_without_setup(pc, pr, NULL); in l3dss1_setup()
1683 { if (pc->debug & L3_DEB_WARN) in l3dss1_setup()
1684 l3_debug(pc->st, "setup without bchannel, call waiting"); in l3dss1_setup()
1688 if (pc->debug & L3_DEB_WARN) in l3dss1_setup()
1689 l3_debug(pc->st, "setup with wrong chid ret %d", id); in l3dss1_setup()
1691 pc->para.cause = 96; in l3dss1_setup()
1693 pc->para.cause = 100; in l3dss1_setup()
1694 l3dss1_msg_without_setup(pc, pr, NULL); in l3dss1_setup()
1698 err = check_infoelements(pc, skb, ie_SETUP); in l3dss1_setup()
1700 pc->para.cause = 96; in l3dss1_setup()
1701 l3dss1_msg_without_setup(pc, pr, NULL); in l3dss1_setup()
1706 iecpy(pc->para.setup.eazmsn, p, 1); in l3dss1_setup()
1708 pc->para.setup.eazmsn[0] = 0; in l3dss1_setup()
1716 strcat(pc->para.setup.eazmsn, tmp); in l3dss1_setup()
1717 } else if (pc->debug & L3_DEB_WARN) in l3dss1_setup()
1718 l3_debug(pc->st, "wrong called subaddress"); in l3dss1_setup()
1722 pc->para.setup.plan = p[2]; in l3dss1_setup()
1724 iecpy(pc->para.setup.phone, p, 1); in l3dss1_setup()
1725 pc->para.setup.screen = 0; in l3dss1_setup()
1727 iecpy(pc->para.setup.phone, p, 2); in l3dss1_setup()
1728 pc->para.setup.screen = p[3]; in l3dss1_setup()
1731 pc->para.setup.phone[0] = 0; in l3dss1_setup()
1732 pc->para.setup.plan = 0; in l3dss1_setup()
1733 pc->para.setup.screen = 0; in l3dss1_setup()
1741 strcat(pc->para.setup.phone, tmp); in l3dss1_setup()
1742 } else if (pc->debug & L3_DEB_WARN) in l3dss1_setup()
1743 l3_debug(pc->st, "wrong calling subaddress"); in l3dss1_setup()
1745 newl3state(pc, 6); in l3dss1_setup()
1747 l3dss1_std_ie_err(pc, err); in l3dss1_setup()
1748 pc->st->l3.l3l4(pc->st, CC_SETUP | INDICATION, pc); in l3dss1_setup()
1752 l3dss1_reset(struct l3_process *pc, u_char pr, void *arg) in l3dss1_reset() argument
1754 dss1_release_l3_process(pc); in l3dss1_reset()
1758 l3dss1_disconnect_req(struct l3_process *pc, u_char pr, void *arg) in l3dss1_disconnect_req() argument
1766 if (pc->para.cause != NO_CAUSE) in l3dss1_disconnect_req()
1767 cause = pc->para.cause; in l3dss1_disconnect_req()
1769 StopAllL3Timer(pc); in l3dss1_disconnect_req()
1771 MsgHead(p, pc->callref, MT_DISCONNECT); in l3dss1_disconnect_req()
1778 if (pc->prot.dss1.uus1_data[0]) in l3dss1_disconnect_req()
1780 *p++ = strlen(pc->prot.dss1.uus1_data) + 1; in l3dss1_disconnect_req()
1782 strcpy(p, pc->prot.dss1.uus1_data); in l3dss1_disconnect_req()
1783 p += strlen(pc->prot.dss1.uus1_data); in l3dss1_disconnect_req()
1784 pc->prot.dss1.uus1_data[0] = '\0'; in l3dss1_disconnect_req()
1791 newl3state(pc, 11); in l3dss1_disconnect_req()
1792 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3dss1_disconnect_req()
1793 L3AddTimer(&pc->timer, T305, CC_T305); in l3dss1_disconnect_req()
1797 l3dss1_setup_rsp(struct l3_process *pc, u_char pr, in l3dss1_setup_rsp() argument
1800 if (!pc->para.bchannel) in l3dss1_setup_rsp()
1801 { if (pc->debug & L3_DEB_WARN) in l3dss1_setup_rsp()
1802 l3_debug(pc->st, "D-chan connect for waiting call"); in l3dss1_setup_rsp()
1803 l3dss1_disconnect_req(pc, pr, arg); in l3dss1_setup_rsp()
1806 newl3state(pc, 8); in l3dss1_setup_rsp()
1807 l3dss1_message(pc, MT_CONNECT); in l3dss1_setup_rsp()
1808 L3DelTimer(&pc->timer); in l3dss1_setup_rsp()
1809 L3AddTimer(&pc->timer, T313, CC_T313); in l3dss1_setup_rsp()
1813 l3dss1_connect_ack(struct l3_process *pc, u_char pr, void *arg) in l3dss1_connect_ack() argument
1818 ret = check_infoelements(pc, skb, ie_CONNECT_ACKNOWLEDGE); in l3dss1_connect_ack()
1820 l3dss1_std_ie_err(pc, ret); in l3dss1_connect_ack()
1823 newl3state(pc, 10); in l3dss1_connect_ack()
1824 L3DelTimer(&pc->timer); in l3dss1_connect_ack()
1826 l3dss1_std_ie_err(pc, ret); in l3dss1_connect_ack()
1827 pc->st->l3.l3l4(pc->st, CC_SETUP_COMPL | INDICATION, pc); in l3dss1_connect_ack()
1831 l3dss1_reject_req(struct l3_process *pc, u_char pr, void *arg) in l3dss1_reject_req() argument
1839 if (pc->para.cause != NO_CAUSE) in l3dss1_reject_req()
1840 cause = pc->para.cause; in l3dss1_reject_req()
1842 MsgHead(p, pc->callref, MT_RELEASE_COMPLETE); in l3dss1_reject_req()
1853 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3dss1_reject_req()
1854 pc->st->l3.l3l4(pc->st, CC_RELEASE | INDICATION, pc); in l3dss1_reject_req()
1855 newl3state(pc, 0); in l3dss1_reject_req()
1856 dss1_release_l3_process(pc); in l3dss1_reject_req()
1860 l3dss1_release(struct l3_process *pc, u_char pr, void *arg) in l3dss1_release() argument
1866 StopAllL3Timer(pc); in l3dss1_release()
1867 if ((ret = l3dss1_get_cause(pc, skb)) > 0) { in l3dss1_release()
1868 if (pc->debug & L3_DEB_WARN) in l3dss1_release()
1869 l3_debug(pc->st, "REL get_cause ret(%d)", ret); in l3dss1_release()
1871 pc->para.cause = NO_CAUSE; in l3dss1_release()
1873 l3dss1_parse_facility(pc->st, pc, pc->callref, p); in l3dss1_release()
1875 if ((ret < 0) && (pc->state != 11)) in l3dss1_release()
1879 ret = check_infoelements(pc, skb, ie_RELEASE); in l3dss1_release()
1885 l3dss1_message_cause(pc, MT_RELEASE_COMPLETE, cause); in l3dss1_release()
1887 l3dss1_message(pc, MT_RELEASE_COMPLETE); in l3dss1_release()
1888 pc->st->l3.l3l4(pc->st, CC_RELEASE | INDICATION, pc); in l3dss1_release()
1889 newl3state(pc, 0); in l3dss1_release()
1890 dss1_release_l3_process(pc); in l3dss1_release()
1894 l3dss1_alert_req(struct l3_process *pc, u_char pr, in l3dss1_alert_req() argument
1897 newl3state(pc, 7); in l3dss1_alert_req()
1898 if (!pc->prot.dss1.uus1_data[0]) in l3dss1_alert_req()
1899 l3dss1_message(pc, MT_ALERTING); in l3dss1_alert_req()
1901 l3dss1_msg_with_uus(pc, MT_ALERTING); in l3dss1_alert_req()
1905 l3dss1_proceed_req(struct l3_process *pc, u_char pr, in l3dss1_proceed_req() argument
1908 newl3state(pc, 9); in l3dss1_proceed_req()
1909 l3dss1_message(pc, MT_CALL_PROCEEDING); in l3dss1_proceed_req()
1910 pc->st->l3.l3l4(pc->st, CC_PROCEED_SEND | INDICATION, pc); in l3dss1_proceed_req()
1914 l3dss1_setup_ack_req(struct l3_process *pc, u_char pr, in l3dss1_setup_ack_req() argument
1917 newl3state(pc, 25); in l3dss1_setup_ack_req()
1918 L3DelTimer(&pc->timer); in l3dss1_setup_ack_req()
1919 L3AddTimer(&pc->timer, T302, CC_T302); in l3dss1_setup_ack_req()
1920 l3dss1_message(pc, MT_SETUP_ACKNOWLEDGE); in l3dss1_setup_ack_req()
1927 l3dss1_deliver_display(struct l3_process *pc, int pr, u_char *infp) in l3dss1_deliver_display() argument
1935 if (!pc->chan) return; in l3dss1_deliver_display()
1942 cs = pc->st->l1.hardware; in l3dss1_deliver_display()
1944 ic.arg = pc->chan->chan; in l3dss1_deliver_display()
1950 l3dss1_progress(struct l3_process *pc, u_char pr, void *arg) in l3dss1_progress() argument
1959 pc->para.cause = 100; in l3dss1_progress()
1978 pc->para.cause = 100; in l3dss1_progress()
1984 pc->para.cause = 100; in l3dss1_progress()
1989 pc->para.cause = 96; in l3dss1_progress()
1993 if (pc->debug & L3_DEB_WARN) in l3dss1_progress()
1994 l3_debug(pc->st, "progress error %d", err); in l3dss1_progress()
1995 l3dss1_status_send(pc, pr, NULL); in l3dss1_progress()
1999 err = check_infoelements(pc, skb, ie_PROGRESS); in l3dss1_progress()
2001 l3dss1_std_ie_err(pc, err); in l3dss1_progress()
2003 pc->st->l3.l3l4(pc->st, CC_PROGRESS | INDICATION, pc); in l3dss1_progress()
2007 l3dss1_notify(struct l3_process *pc, u_char pr, void *arg) in l3dss1_notify() argument
2016 pc->para.cause = 100; in l3dss1_notify()
2024 pc->para.cause = 100; in l3dss1_notify()
2030 pc->para.cause = 96; in l3dss1_notify()
2034 if (pc->debug & L3_DEB_WARN) in l3dss1_notify()
2035 l3_debug(pc->st, "notify error %d", err); in l3dss1_notify()
2036 l3dss1_status_send(pc, pr, NULL); in l3dss1_notify()
2040 err = check_infoelements(pc, skb, ie_NOTIFY); in l3dss1_notify()
2042 l3dss1_std_ie_err(pc, err); in l3dss1_notify()
2044 pc->st->l3.l3l4(pc->st, CC_NOTIFY | INDICATION, pc); in l3dss1_notify()
2048 l3dss1_status_enq(struct l3_process *pc, u_char pr, void *arg) in l3dss1_status_enq() argument
2053 ret = check_infoelements(pc, skb, ie_STATUS_ENQUIRY); in l3dss1_status_enq()
2054 l3dss1_std_ie_err(pc, ret); in l3dss1_status_enq()
2055 pc->para.cause = 30; /* response to STATUS_ENQUIRY */ in l3dss1_status_enq()
2056 l3dss1_status_send(pc, pr, NULL); in l3dss1_status_enq()
2060 l3dss1_information(struct l3_process *pc, u_char pr, void *arg) in l3dss1_information() argument
2067 ret = check_infoelements(pc, skb, ie_INFORMATION); in l3dss1_information()
2069 l3dss1_std_ie_err(pc, ret); in l3dss1_information()
2070 if (pc->state == 25) { /* overlap receiving */ in l3dss1_information()
2071 L3DelTimer(&pc->timer); in l3dss1_information()
2075 strcat(pc->para.setup.eazmsn, tmp); in l3dss1_information()
2076 pc->st->l3.l3l4(pc->st, CC_MORE_INFO | INDICATION, pc); in l3dss1_information()
2078 L3AddTimer(&pc->timer, T302, CC_T302); in l3dss1_information()
2085 static void l3dss1_redir_req(struct l3_process *pc, u_char pr, void *arg) in l3dss1_redir_req() argument
2096 strcpy(pc->prot.dss1.uus1_data, pc->chan->setup.eazmsn); /* copy uus element if available */ in l3dss1_redir_req()
2097 if (!pc->chan->setup.phone[0]) in l3dss1_redir_req()
2098 { pc->para.cause = -1; in l3dss1_redir_req()
2099 l3dss1_disconnect_req(pc, pr, arg); /* disconnect immediately */ in l3dss1_redir_req()
2103 if (pc->prot.dss1.invoke_id) in l3dss1_redir_req()
2104 free_invoke_id(pc->st, pc->prot.dss1.invoke_id); in l3dss1_redir_req()
2106 if (!(pc->prot.dss1.invoke_id = new_invoke_id(pc->st))) in l3dss1_redir_req()
2109 MsgHead(p, pc->callref, MT_FACILITY); in l3dss1_redir_req()
2111 …for (subp = pc->chan->setup.phone; (*subp) && (*subp != '.'); subp++) len_phone++; /* len of phone… in l3dss1_redir_req()
2122 *p++ = pc->prot.dss1.invoke_id; /* invoke id */ in l3dss1_redir_req()
2135 *p++ = pc->chan->setup.phone[l]; in l3dss1_redir_req()
2145 *p++ = pc->chan->setup.screen; in l3dss1_redir_req()
2151 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3dss1_redir_req()
2157 static void l3dss1_redir_req_early(struct l3_process *pc, u_char pr, void *arg) in l3dss1_redir_req_early() argument
2159 l3dss1_proceed_req(pc, pr, arg); in l3dss1_redir_req_early()
2160 l3dss1_redir_req(pc, pr, arg); in l3dss1_redir_req_early()
2174 struct l3_process *pc = NULL; in l3dss1_cmd_global() local
2208 if (!(pc = dss1_new_l3_process(st, -1))) in l3dss1_cmd_global()
2212 pc->prot.dss1.ll_id = ic->parm.dss1_io.ll_id; /* remember id */ in l3dss1_cmd_global()
2213 pc->prot.dss1.proc = ic->parm.dss1_io.proc; /* and procedure */ in l3dss1_cmd_global()
2217 if (pc) dss1_release_l3_process(pc); in l3dss1_cmd_global()
2222 if (pc) in l3dss1_cmd_global()
2223 { pc->prot.dss1.invoke_id = id; /* remember id */ in l3dss1_cmd_global()
2224 L3AddTimer(&pc->timer, ic->parm.dss1_io.timeout, CC_TDSS1_IO | REQUEST); in l3dss1_cmd_global()
2232 if ((pc = l3dss1_search_dummy_proc(st, ic->parm.dss1_io.hl_id))) in l3dss1_cmd_global()
2233 { L3DelTimer(&pc->timer); /* remove timer */ in l3dss1_cmd_global()
2234 dss1_release_l3_process(pc); in l3dss1_cmd_global()
2251 l3dss1_io_timer(struct l3_process *pc) in l3dss1_io_timer() argument
2253 struct IsdnCardState *cs = pc->st->l1.hardware; in l3dss1_io_timer()
2255 L3DelTimer(&pc->timer); /* remove timer */ in l3dss1_io_timer()
2260 ic.parm.dss1_io.hl_id = pc->prot.dss1.invoke_id; in l3dss1_io_timer()
2261 ic.parm.dss1_io.ll_id = pc->prot.dss1.ll_id; in l3dss1_io_timer()
2262 ic.parm.dss1_io.proc = pc->prot.dss1.proc; in l3dss1_io_timer()
2266 free_invoke_id(pc->st, pc->prot.dss1.invoke_id); in l3dss1_io_timer()
2267 pc->prot.dss1.invoke_id = 0; /* reset id */ in l3dss1_io_timer()
2271 dss1_release_l3_process(pc); in l3dss1_io_timer()
2275 l3dss1_release_ind(struct l3_process *pc, u_char pr, void *arg) in l3dss1_release_ind() argument
2291 pc->st->l3.l3l4(pc->st, CC_RELEASE | INDICATION, pc); in l3dss1_release_ind()
2292 newl3state(pc, 0); in l3dss1_release_ind()
2293 dss1_release_l3_process(pc); in l3dss1_release_ind()
2295 pc->st->l3.l3l4(pc->st, CC_IGNORE | INDICATION, pc); in l3dss1_release_ind()
2300 l3dss1_dummy(struct l3_process *pc, u_char pr, void *arg) in l3dss1_dummy() argument
2305 l3dss1_t302(struct l3_process *pc, u_char pr, void *arg) in l3dss1_t302() argument
2307 L3DelTimer(&pc->timer); in l3dss1_t302()
2308 pc->para.loc = 0; in l3dss1_t302()
2309 pc->para.cause = 28; /* invalid number */ in l3dss1_t302()
2310 l3dss1_disconnect_req(pc, pr, NULL); in l3dss1_t302()
2311 pc->st->l3.l3l4(pc->st, CC_SETUP_ERR, pc); in l3dss1_t302()
2315 l3dss1_t303(struct l3_process *pc, u_char pr, void *arg) in l3dss1_t303() argument
2317 if (pc->N303 > 0) { in l3dss1_t303()
2318 pc->N303--; in l3dss1_t303()
2319 L3DelTimer(&pc->timer); in l3dss1_t303()
2320 l3dss1_setup_req(pc, pr, arg); in l3dss1_t303()
2322 L3DelTimer(&pc->timer); in l3dss1_t303()
2323 l3dss1_message_cause(pc, MT_RELEASE_COMPLETE, 102); in l3dss1_t303()
2324 pc->st->l3.l3l4(pc->st, CC_NOSETUP_RSP, pc); in l3dss1_t303()
2325 dss1_release_l3_process(pc); in l3dss1_t303()
2330 l3dss1_t304(struct l3_process *pc, u_char pr, void *arg) in l3dss1_t304() argument
2332 L3DelTimer(&pc->timer); in l3dss1_t304()
2333 pc->para.loc = 0; in l3dss1_t304()
2334 pc->para.cause = 102; in l3dss1_t304()
2335 l3dss1_disconnect_req(pc, pr, NULL); in l3dss1_t304()
2336 pc->st->l3.l3l4(pc->st, CC_SETUP_ERR, pc); in l3dss1_t304()
2341 l3dss1_t305(struct l3_process *pc, u_char pr, void *arg) in l3dss1_t305() argument
2349 L3DelTimer(&pc->timer); in l3dss1_t305()
2350 if (pc->para.cause != NO_CAUSE) in l3dss1_t305()
2351 cause = pc->para.cause; in l3dss1_t305()
2353 MsgHead(p, pc->callref, MT_RELEASE); in l3dss1_t305()
2364 newl3state(pc, 19); in l3dss1_t305()
2365 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3dss1_t305()
2366 L3AddTimer(&pc->timer, T308, CC_T308_1); in l3dss1_t305()
2370 l3dss1_t310(struct l3_process *pc, u_char pr, void *arg) in l3dss1_t310() argument
2372 L3DelTimer(&pc->timer); in l3dss1_t310()
2373 pc->para.loc = 0; in l3dss1_t310()
2374 pc->para.cause = 102; in l3dss1_t310()
2375 l3dss1_disconnect_req(pc, pr, NULL); in l3dss1_t310()
2376 pc->st->l3.l3l4(pc->st, CC_SETUP_ERR, pc); in l3dss1_t310()
2380 l3dss1_t313(struct l3_process *pc, u_char pr, void *arg) in l3dss1_t313() argument
2382 L3DelTimer(&pc->timer); in l3dss1_t313()
2383 pc->para.loc = 0; in l3dss1_t313()
2384 pc->para.cause = 102; in l3dss1_t313()
2385 l3dss1_disconnect_req(pc, pr, NULL); in l3dss1_t313()
2386 pc->st->l3.l3l4(pc->st, CC_CONNECT_ERR, pc); in l3dss1_t313()
2390 l3dss1_t308_1(struct l3_process *pc, u_char pr, void *arg) in l3dss1_t308_1() argument
2392 newl3state(pc, 19); in l3dss1_t308_1()
2393 L3DelTimer(&pc->timer); in l3dss1_t308_1()
2394 l3dss1_message(pc, MT_RELEASE); in l3dss1_t308_1()
2395 L3AddTimer(&pc->timer, T308, CC_T308_2); in l3dss1_t308_1()
2399 l3dss1_t308_2(struct l3_process *pc, u_char pr, void *arg) in l3dss1_t308_2() argument
2401 L3DelTimer(&pc->timer); in l3dss1_t308_2()
2402 pc->st->l3.l3l4(pc->st, CC_RELEASE_ERR, pc); in l3dss1_t308_2()
2403 dss1_release_l3_process(pc); in l3dss1_t308_2()
2407 l3dss1_t318(struct l3_process *pc, u_char pr, void *arg) in l3dss1_t318() argument
2409 L3DelTimer(&pc->timer); in l3dss1_t318()
2410 pc->para.cause = 102; /* Timer expiry */ in l3dss1_t318()
2411 pc->para.loc = 0; /* local */ in l3dss1_t318()
2412 pc->st->l3.l3l4(pc->st, CC_RESUME_ERR, pc); in l3dss1_t318()
2413 newl3state(pc, 19); in l3dss1_t318()
2414 l3dss1_message(pc, MT_RELEASE); in l3dss1_t318()
2415 L3AddTimer(&pc->timer, T308, CC_T308_1); in l3dss1_t318()
2419 l3dss1_t319(struct l3_process *pc, u_char pr, void *arg) in l3dss1_t319() argument
2421 L3DelTimer(&pc->timer); in l3dss1_t319()
2422 pc->para.cause = 102; /* Timer expiry */ in l3dss1_t319()
2423 pc->para.loc = 0; /* local */ in l3dss1_t319()
2424 pc->st->l3.l3l4(pc->st, CC_SUSPEND_ERR, pc); in l3dss1_t319()
2425 newl3state(pc, 10); in l3dss1_t319()
2429 l3dss1_restart(struct l3_process *pc, u_char pr, void *arg) in l3dss1_restart() argument
2431 L3DelTimer(&pc->timer); in l3dss1_restart()
2432 pc->st->l3.l3l4(pc->st, CC_RELEASE | INDICATION, pc); in l3dss1_restart()
2433 dss1_release_l3_process(pc); in l3dss1_restart()
2437 l3dss1_status(struct l3_process *pc, u_char pr, void *arg) in l3dss1_status() argument
2444 if ((ret = l3dss1_get_cause(pc, skb))) { in l3dss1_status()
2445 if (pc->debug & L3_DEB_WARN) in l3dss1_status()
2446 l3_debug(pc->st, "STATUS get_cause ret(%d)", ret); in l3dss1_status()
2456 if (!ie_in_set(pc, *p, l3_valid_states)) in l3dss1_status()
2463 ret = check_infoelements(pc, skb, ie_STATUS); in l3dss1_status()
2472 if (pc->debug & L3_DEB_WARN) in l3dss1_status()
2473 l3_debug(pc->st, "STATUS error(%d/%d)", ret, cause); in l3dss1_status()
2474 tmp = pc->para.cause; in l3dss1_status()
2475 pc->para.cause = cause; in l3dss1_status()
2476 l3dss1_status_send(pc, 0, NULL); in l3dss1_status()
2478 pc->para.cause = tmp; in l3dss1_status()
2482 cause = pc->para.cause; in l3dss1_status()
2488 pc->st->l3.l3l4(pc->st, CC_RELEASE | INDICATION, pc); in l3dss1_status()
2489 newl3state(pc, 0); in l3dss1_status()
2490 dss1_release_l3_process(pc); in l3dss1_status()
2495 l3dss1_facility(struct l3_process *pc, u_char pr, void *arg) in l3dss1_facility() argument
2500 ret = check_infoelements(pc, skb, ie_FACILITY); in l3dss1_facility()
2501 l3dss1_std_ie_err(pc, ret); in l3dss1_facility()
2505 l3dss1_parse_facility(pc->st, pc, pc->callref, p); in l3dss1_facility()
2510 l3dss1_suspend_req(struct l3_process *pc, u_char pr, void *arg) in l3dss1_suspend_req() argument
2516 u_char *msg = pc->chan->setup.phone; in l3dss1_suspend_req()
2518 MsgHead(p, pc->callref, MT_SUSPEND); in l3dss1_suspend_req()
2526 l3_debug(pc->st, "SUS wrong CALL_ID len %d", l); in l3dss1_suspend_req()
2533 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3dss1_suspend_req()
2534 newl3state(pc, 15); in l3dss1_suspend_req()
2535 L3AddTimer(&pc->timer, T319, CC_T319); in l3dss1_suspend_req()
2539 l3dss1_suspend_ack(struct l3_process *pc, u_char pr, void *arg) in l3dss1_suspend_ack() argument
2544 L3DelTimer(&pc->timer); in l3dss1_suspend_ack()
2545 newl3state(pc, 0); in l3dss1_suspend_ack()
2546 pc->para.cause = NO_CAUSE; in l3dss1_suspend_ack()
2547 pc->st->l3.l3l4(pc->st, CC_SUSPEND | CONFIRM, pc); in l3dss1_suspend_ack()
2549 if ((ret = check_infoelements(pc, skb, ie_SUSPEND_ACKNOWLEDGE))) in l3dss1_suspend_ack()
2550 if (pc->debug & L3_DEB_WARN) in l3dss1_suspend_ack()
2551 l3_debug(pc->st, "SUSPACK check ie(%d)", ret); in l3dss1_suspend_ack()
2552 dss1_release_l3_process(pc); in l3dss1_suspend_ack()
2556 l3dss1_suspend_rej(struct l3_process *pc, u_char pr, void *arg) in l3dss1_suspend_rej() argument
2561 if ((ret = l3dss1_get_cause(pc, skb))) { in l3dss1_suspend_rej()
2562 if (pc->debug & L3_DEB_WARN) in l3dss1_suspend_rej()
2563 l3_debug(pc->st, "SUSP_REJ get_cause ret(%d)", ret); in l3dss1_suspend_rej()
2565 pc->para.cause = 96; in l3dss1_suspend_rej()
2567 pc->para.cause = 100; in l3dss1_suspend_rej()
2568 l3dss1_status_send(pc, pr, NULL); in l3dss1_suspend_rej()
2571 ret = check_infoelements(pc, skb, ie_SUSPEND_REJECT); in l3dss1_suspend_rej()
2573 l3dss1_std_ie_err(pc, ret); in l3dss1_suspend_rej()
2576 L3DelTimer(&pc->timer); in l3dss1_suspend_rej()
2577 pc->st->l3.l3l4(pc->st, CC_SUSPEND_ERR, pc); in l3dss1_suspend_rej()
2578 newl3state(pc, 10); in l3dss1_suspend_rej()
2580 l3dss1_std_ie_err(pc, ret); in l3dss1_suspend_rej()
2584 l3dss1_resume_req(struct l3_process *pc, u_char pr, void *arg) in l3dss1_resume_req() argument
2590 u_char *msg = pc->para.setup.phone; in l3dss1_resume_req()
2592 MsgHead(p, pc->callref, MT_RESUME); in l3dss1_resume_req()
2601 l3_debug(pc->st, "RES wrong CALL_ID len %d", l); in l3dss1_resume_req()
2608 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3dss1_resume_req()
2609 newl3state(pc, 17); in l3dss1_resume_req()
2610 L3AddTimer(&pc->timer, T318, CC_T318); in l3dss1_resume_req()
2614 l3dss1_resume_ack(struct l3_process *pc, u_char pr, void *arg) in l3dss1_resume_ack() argument
2619 if ((id = l3dss1_get_channel_id(pc, skb)) > 0) { in l3dss1_resume_ack()
2620 if ((0 == id) || ((3 == id) && (0x10 == pc->para.moderate))) { in l3dss1_resume_ack()
2621 if (pc->debug & L3_DEB_WARN) in l3dss1_resume_ack()
2622 l3_debug(pc->st, "resume ack with wrong chid %x", id); in l3dss1_resume_ack()
2623 pc->para.cause = 100; in l3dss1_resume_ack()
2624 l3dss1_status_send(pc, pr, NULL); in l3dss1_resume_ack()
2627 pc->para.bchannel = id; in l3dss1_resume_ack()
2628 } else if (1 == pc->state) { in l3dss1_resume_ack()
2629 if (pc->debug & L3_DEB_WARN) in l3dss1_resume_ack()
2630 l3_debug(pc->st, "resume ack without chid (ret %d)", id); in l3dss1_resume_ack()
2631 pc->para.cause = 96; in l3dss1_resume_ack()
2632 l3dss1_status_send(pc, pr, NULL); in l3dss1_resume_ack()
2635 ret = check_infoelements(pc, skb, ie_RESUME_ACKNOWLEDGE); in l3dss1_resume_ack()
2637 l3dss1_std_ie_err(pc, ret); in l3dss1_resume_ack()
2640 L3DelTimer(&pc->timer); in l3dss1_resume_ack()
2641 pc->st->l3.l3l4(pc->st, CC_RESUME | CONFIRM, pc); in l3dss1_resume_ack()
2642 newl3state(pc, 10); in l3dss1_resume_ack()
2644 l3dss1_std_ie_err(pc, ret); in l3dss1_resume_ack()
2648 l3dss1_resume_rej(struct l3_process *pc, u_char pr, void *arg) in l3dss1_resume_rej() argument
2653 if ((ret = l3dss1_get_cause(pc, skb))) { in l3dss1_resume_rej()
2654 if (pc->debug & L3_DEB_WARN) in l3dss1_resume_rej()
2655 l3_debug(pc->st, "RES_REJ get_cause ret(%d)", ret); in l3dss1_resume_rej()
2657 pc->para.cause = 96; in l3dss1_resume_rej()
2659 pc->para.cause = 100; in l3dss1_resume_rej()
2660 l3dss1_status_send(pc, pr, NULL); in l3dss1_resume_rej()
2663 ret = check_infoelements(pc, skb, ie_RESUME_REJECT); in l3dss1_resume_rej()
2665 l3dss1_std_ie_err(pc, ret); in l3dss1_resume_rej()
2668 L3DelTimer(&pc->timer); in l3dss1_resume_rej()
2669 pc->st->l3.l3l4(pc->st, CC_RESUME_ERR, pc); in l3dss1_resume_rej()
2670 newl3state(pc, 0); in l3dss1_resume_rej()
2672 l3dss1_std_ie_err(pc, ret); in l3dss1_resume_rej()
2673 dss1_release_l3_process(pc); in l3dss1_resume_rej()
2677 l3dss1_global_restart(struct l3_process *pc, u_char pr, void *arg) in l3dss1_global_restart() argument
2686 newl3state(pc, 2); in l3dss1_global_restart()
2687 L3DelTimer(&pc->timer); in l3dss1_global_restart()
2691 l3_debug(pc->st, "Restart %x", ri); in l3dss1_global_restart()
2693 l3_debug(pc->st, "Restart without restart IE"); in l3dss1_global_restart()
2700 if (pc->st->l3.debug) in l3dss1_global_restart()
2701 l3_debug(pc->st, "Restart for channel %d", chan); in l3dss1_global_restart()
2703 newl3state(pc, 2); in l3dss1_global_restart()
2704 up = pc->st->l3.proc; in l3dss1_global_restart()
2713 MsgHead(p, pc->callref, MT_RESTART_ACKNOWLEDGE); in l3dss1_global_restart()
2726 newl3state(pc, 0); in l3dss1_global_restart()
2727 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3dss1_global_restart()
2731 l3dss1_dl_reset(struct l3_process *pc, u_char pr, void *arg) in l3dss1_dl_reset() argument
2733 pc->para.cause = 0x29; /* Temporary failure */ in l3dss1_dl_reset()
2734 pc->para.loc = 0; in l3dss1_dl_reset()
2735 l3dss1_disconnect_req(pc, pr, NULL); in l3dss1_dl_reset()
2736 pc->st->l3.l3l4(pc->st, CC_SETUP_ERR, pc); in l3dss1_dl_reset()
2740 l3dss1_dl_release(struct l3_process *pc, u_char pr, void *arg) in l3dss1_dl_release() argument
2742 newl3state(pc, 0); in l3dss1_dl_release()
2743 pc->para.cause = 0x1b; /* Destination out of order */ in l3dss1_dl_release()
2744 pc->para.loc = 0; in l3dss1_dl_release()
2745 pc->st->l3.l3l4(pc->st, CC_RELEASE | INDICATION, pc); in l3dss1_dl_release()
2746 release_l3_process(pc); in l3dss1_dl_release()
2750 l3dss1_dl_reestablish(struct l3_process *pc, u_char pr, void *arg) in l3dss1_dl_reestablish() argument
2752 L3DelTimer(&pc->timer); in l3dss1_dl_reestablish()
2753 L3AddTimer(&pc->timer, T309, CC_T309); in l3dss1_dl_reestablish()
2754 l3_msg(pc->st, DL_ESTABLISH | REQUEST, NULL); in l3dss1_dl_reestablish()
2758 l3dss1_dl_reest_status(struct l3_process *pc, u_char pr, void *arg) in l3dss1_dl_reest_status() argument
2760 L3DelTimer(&pc->timer); in l3dss1_dl_reest_status()
2762 pc->para.cause = 0x1F; /* normal, unspecified */ in l3dss1_dl_reest_status()
2763 l3dss1_status_send(pc, 0, NULL); in l3dss1_dl_reest_status()