Lines Matching full:pc
31 l3_1TR6_message(struct l3_process *pc, u_char mt, u_char pd) in l3_1TR6_message() argument
39 MsgHead(p, pc->callref, mt, pd); in l3_1TR6_message()
40 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3_1TR6_message()
44 l3_1tr6_release_req(struct l3_process *pc, u_char pr, void *arg) in l3_1tr6_release_req() argument
46 StopAllL3Timer(pc); in l3_1tr6_release_req()
47 newl3state(pc, 19); in l3_1tr6_release_req()
48 l3_1TR6_message(pc, MT_N1_REL, PROTO_DIS_N1); in l3_1tr6_release_req()
49 L3AddTimer(&pc->timer, T308, CC_T308_1); in l3_1tr6_release_req()
53 l3_1tr6_invalid(struct l3_process *pc, u_char pr, void *arg) in l3_1tr6_invalid() argument
58 l3_1tr6_release_req(pc, 0, NULL); in l3_1tr6_invalid()
62 l3_1tr6_error(struct l3_process *pc, u_char *msg, struct sk_buff *skb) in l3_1tr6_error() argument
65 if (pc->st->l3.debug & L3_DEB_WARN) in l3_1tr6_error()
66 l3_debug(pc->st, "%s", msg); in l3_1tr6_error()
67 l3_1tr6_release_req(pc, 0, NULL); in l3_1tr6_error()
71 l3_1tr6_setup_req(struct l3_process *pc, u_char pr, void *arg) in l3_1tr6_setup_req() argument
81 MsgHead(p, pc->callref, MT_N1_SETUP, PROTO_DIS_N1); in l3_1tr6_setup_req()
82 teln = pc->para.setup.phone; in l3_1tr6_setup_req()
83 pc->para.spv = 0; in l3_1tr6_setup_req()
87 pc->para.spv = 1; in l3_1tr6_setup_req()
101 if (pc->st->l3.debug & L3_DEB_WARN) in l3_1tr6_setup_req()
102 l3_debug(pc->st, "Wrong MSN Code"); in l3_1tr6_setup_req()
112 if (pc->para.spv) { /* SPV ? */ in l3_1tr6_setup_req()
118 *p++ = pc->para.setup.si1; /* 0 for all Services */ in l3_1tr6_setup_req()
119 *p++ = pc->para.setup.si2; /* 0 for all Services */ in l3_1tr6_setup_req()
124 *p++ = pc->para.setup.si1; /* 0 for all Services */ in l3_1tr6_setup_req()
125 *p++ = pc->para.setup.si2; /* 0 for all Services */ in l3_1tr6_setup_req()
127 eaz = pc->para.setup.eazmsn; in l3_1tr6_setup_req()
147 *p++ = pc->para.setup.si1; in l3_1tr6_setup_req()
148 *p++ = pc->para.setup.si2; in l3_1tr6_setup_req()
154 L3DelTimer(&pc->timer); in l3_1tr6_setup_req()
155 L3AddTimer(&pc->timer, T303, CC_T303); in l3_1tr6_setup_req()
156 newl3state(pc, 1); in l3_1tr6_setup_req()
157 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3_1tr6_setup_req()
161 l3_1tr6_setup(struct l3_process *pc, u_char pr, void *arg) in l3_1tr6_setup() argument
171 l3_1tr6_error(pc, "setup wrong chanID len", skb); in l3_1tr6_setup()
175 l3_1tr6_error(pc, "setup wrong WE0_chanID", skb); in l3_1tr6_setup()
178 if ((pc->para.bchannel = p[2] & 0x3)) in l3_1tr6_setup()
181 l3_1tr6_error(pc, "missing setup chanID", skb); in l3_1tr6_setup()
187 pc->para.setup.si1 = p[2]; in l3_1tr6_setup()
188 pc->para.setup.si2 = p[3]; in l3_1tr6_setup()
190 l3_1tr6_error(pc, "missing setup SI", skb); in l3_1tr6_setup()
196 iecpy(pc->para.setup.eazmsn, p, 1); in l3_1tr6_setup()
198 pc->para.setup.eazmsn[0] = 0; in l3_1tr6_setup()
202 iecpy(pc->para.setup.phone, p, 1); in l3_1tr6_setup()
204 pc->para.setup.phone[0] = 0; in l3_1tr6_setup()
207 pc->para.spv = 0; in l3_1tr6_setup()
210 pc->para.spv = 1; in l3_1tr6_setup()
216 if ((pc->para.setup.si1 != 7) && (pc->st->l3.debug & L3_DEB_WARN)) { in l3_1tr6_setup()
217 l3_debug(pc->st, "non-digital call: %s -> %s", in l3_1tr6_setup()
218 pc->para.setup.phone, in l3_1tr6_setup()
219 pc->para.setup.eazmsn); in l3_1tr6_setup()
221 newl3state(pc, 6); in l3_1tr6_setup()
222 pc->st->l3.l3l4(pc->st, CC_SETUP | INDICATION, pc); in l3_1tr6_setup()
224 release_l3_process(pc); in l3_1tr6_setup()
228 l3_1tr6_setup_ack(struct l3_process *pc, u_char pr, void *arg) in l3_1tr6_setup_ack() argument
233 L3DelTimer(&pc->timer); in l3_1tr6_setup_ack()
235 newl3state(pc, 2); in l3_1tr6_setup_ack()
238 l3_1tr6_error(pc, "setup_ack wrong chanID len", skb); in l3_1tr6_setup_ack()
242 l3_1tr6_error(pc, "setup_ack wrong WE0_chanID", skb); in l3_1tr6_setup_ack()
245 pc->para.bchannel = p[2] & 0x3; in l3_1tr6_setup_ack()
247 l3_1tr6_error(pc, "missing setup_ack WE0_chanID", skb); in l3_1tr6_setup_ack()
251 L3AddTimer(&pc->timer, T304, CC_T304); in l3_1tr6_setup_ack()
252 pc->st->l3.l3l4(pc->st, CC_MORE_INFO | INDICATION, pc); in l3_1tr6_setup_ack()
256 l3_1tr6_call_sent(struct l3_process *pc, u_char pr, void *arg) in l3_1tr6_call_sent() argument
261 L3DelTimer(&pc->timer); in l3_1tr6_call_sent()
265 l3_1tr6_error(pc, "call sent wrong chanID len", skb); in l3_1tr6_call_sent()
269 l3_1tr6_error(pc, "call sent wrong WE0_chanID", skb); in l3_1tr6_call_sent()
272 if ((pc->state == 2) && (pc->para.bchannel != (p[2] & 0x3))) { in l3_1tr6_call_sent()
273 l3_1tr6_error(pc, "call sent wrong chanID value", skb); in l3_1tr6_call_sent()
276 pc->para.bchannel = p[2] & 0x3; in l3_1tr6_call_sent()
278 l3_1tr6_error(pc, "missing call sent WE0_chanID", skb); in l3_1tr6_call_sent()
282 L3AddTimer(&pc->timer, T310, CC_T310); in l3_1tr6_call_sent()
283 newl3state(pc, 3); in l3_1tr6_call_sent()
284 pc->st->l3.l3l4(pc->st, CC_PROCEEDING | INDICATION, pc); in l3_1tr6_call_sent()
288 l3_1tr6_alert(struct l3_process *pc, u_char pr, void *arg) in l3_1tr6_alert() argument
293 L3DelTimer(&pc->timer); /* T304 */ in l3_1tr6_alert()
294 newl3state(pc, 4); in l3_1tr6_alert()
295 pc->st->l3.l3l4(pc->st, CC_ALERTING | INDICATION, pc); in l3_1tr6_alert()
299 l3_1tr6_info(struct l3_process *pc, u_char pr, void *arg) in l3_1tr6_info() argument
313 if (tmpcharge > pc->para.chargeinfo) { in l3_1tr6_info()
314 pc->para.chargeinfo = tmpcharge; in l3_1tr6_info()
315 pc->st->l3.l3l4(pc->st, CC_CHARGE | INDICATION, pc); in l3_1tr6_info()
317 if (pc->st->l3.debug & L3_DEB_CHARGE) { in l3_1tr6_info()
318 l3_debug(pc->st, "charging info %d", in l3_1tr6_info()
319 pc->para.chargeinfo); in l3_1tr6_info()
321 } else if (pc->st->l3.debug & L3_DEB_CHARGE) in l3_1tr6_info()
322 l3_debug(pc->st, "charging info not found"); in l3_1tr6_info()
328 l3_1tr6_info_s2(struct l3_process *pc, u_char pr, void *arg) in l3_1tr6_info_s2() argument
336 l3_1tr6_connect(struct l3_process *pc, u_char pr, void *arg) in l3_1tr6_connect() argument
340 L3DelTimer(&pc->timer); /* T310 */ in l3_1tr6_connect()
342 l3_1tr6_error(pc, "missing connect date", skb); in l3_1tr6_connect()
345 newl3state(pc, 10); in l3_1tr6_connect()
347 pc->para.chargeinfo = 0; in l3_1tr6_connect()
348 pc->st->l3.l3l4(pc->st, CC_SETUP | CONFIRM, pc); in l3_1tr6_connect()
352 l3_1tr6_rel(struct l3_process *pc, u_char pr, void *arg) in l3_1tr6_rel() argument
360 pc->para.cause = p[2]; in l3_1tr6_rel()
362 pc->para.loc = p[3]; in l3_1tr6_rel()
364 pc->para.loc = 0; in l3_1tr6_rel()
366 pc->para.cause = 0; in l3_1tr6_rel()
367 pc->para.loc = 0; in l3_1tr6_rel()
370 pc->para.cause = NO_CAUSE; in l3_1tr6_rel()
371 l3_1tr6_error(pc, "missing REL cause", skb); in l3_1tr6_rel()
375 StopAllL3Timer(pc); in l3_1tr6_rel()
376 newl3state(pc, 0); in l3_1tr6_rel()
377 l3_1TR6_message(pc, MT_N1_REL_ACK, PROTO_DIS_N1); in l3_1tr6_rel()
378 pc->st->l3.l3l4(pc->st, CC_RELEASE | INDICATION, pc); in l3_1tr6_rel()
379 release_l3_process(pc); in l3_1tr6_rel()
383 l3_1tr6_rel_ack(struct l3_process *pc, u_char pr, void *arg) in l3_1tr6_rel_ack() argument
388 StopAllL3Timer(pc); in l3_1tr6_rel_ack()
389 newl3state(pc, 0); in l3_1tr6_rel_ack()
390 pc->para.cause = NO_CAUSE; in l3_1tr6_rel_ack()
391 pc->st->l3.l3l4(pc->st, CC_RELEASE | CONFIRM, pc); in l3_1tr6_rel_ack()
392 release_l3_process(pc); in l3_1tr6_rel_ack()
396 l3_1tr6_disc(struct l3_process *pc, u_char pr, void *arg) in l3_1tr6_disc() argument
403 StopAllL3Timer(pc); in l3_1tr6_disc()
411 if (tmpcharge > pc->para.chargeinfo) { in l3_1tr6_disc()
412 pc->para.chargeinfo = tmpcharge; in l3_1tr6_disc()
413 pc->st->l3.l3l4(pc->st, CC_CHARGE | INDICATION, pc); in l3_1tr6_disc()
415 if (pc->st->l3.debug & L3_DEB_CHARGE) { in l3_1tr6_disc()
416 l3_debug(pc->st, "charging info %d", in l3_1tr6_disc()
417 pc->para.chargeinfo); in l3_1tr6_disc()
419 } else if (pc->st->l3.debug & L3_DEB_CHARGE) in l3_1tr6_disc()
420 l3_debug(pc->st, "charging info not found"); in l3_1tr6_disc()
426 pc->para.cause = p[2]; in l3_1tr6_disc()
428 pc->para.loc = p[3]; in l3_1tr6_disc()
430 pc->para.loc = 0; in l3_1tr6_disc()
432 pc->para.cause = 0; in l3_1tr6_disc()
433 pc->para.loc = 0; in l3_1tr6_disc()
436 if (pc->st->l3.debug & L3_DEB_WARN) in l3_1tr6_disc()
437 l3_debug(pc->st, "cause not found"); in l3_1tr6_disc()
438 pc->para.cause = NO_CAUSE; in l3_1tr6_disc()
441 l3_1tr6_error(pc, "missing connack date", skb); in l3_1tr6_disc()
445 newl3state(pc, 12); in l3_1tr6_disc()
446 pc->st->l3.l3l4(pc->st, CC_DISCONNECT | INDICATION, pc); in l3_1tr6_disc()
451 l3_1tr6_connect_ack(struct l3_process *pc, u_char pr, void *arg) in l3_1tr6_connect_ack() argument
456 l3_1tr6_error(pc, "missing connack date", skb); in l3_1tr6_connect_ack()
460 newl3state(pc, 10); in l3_1tr6_connect_ack()
461 pc->para.chargeinfo = 0; in l3_1tr6_connect_ack()
462 L3DelTimer(&pc->timer); in l3_1tr6_connect_ack()
463 pc->st->l3.l3l4(pc->st, CC_SETUP_COMPL | INDICATION, pc); in l3_1tr6_connect_ack()
467 l3_1tr6_alert_req(struct l3_process *pc, u_char pr, void *arg) in l3_1tr6_alert_req() argument
469 newl3state(pc, 7); in l3_1tr6_alert_req()
470 l3_1TR6_message(pc, MT_N1_ALERT, PROTO_DIS_N1); in l3_1tr6_alert_req()
474 l3_1tr6_setup_rsp(struct l3_process *pc, u_char pr, void *arg) in l3_1tr6_setup_rsp() argument
481 MsgHead(p, pc->callref, MT_N1_CONN, PROTO_DIS_N1); in l3_1tr6_setup_rsp()
482 if (pc->para.spv) { /* SPV ? */ in l3_1tr6_setup_rsp()
488 *p++ = pc->para.setup.si1; in l3_1tr6_setup_rsp()
489 *p++ = pc->para.setup.si2; in l3_1tr6_setup_rsp()
494 *p++ = pc->para.setup.si1; in l3_1tr6_setup_rsp()
495 *p++ = pc->para.setup.si2; in l3_1tr6_setup_rsp()
497 newl3state(pc, 8); in l3_1tr6_setup_rsp()
502 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3_1tr6_setup_rsp()
503 L3DelTimer(&pc->timer); in l3_1tr6_setup_rsp()
504 L3AddTimer(&pc->timer, T313, CC_T313); in l3_1tr6_setup_rsp()
508 l3_1tr6_reset(struct l3_process *pc, u_char pr, void *arg) in l3_1tr6_reset() argument
510 release_l3_process(pc); in l3_1tr6_reset()
514 l3_1tr6_disconnect_req(struct l3_process *pc, u_char pr, void *arg) in l3_1tr6_disconnect_req() argument
523 if (pc->para.cause > 0) in l3_1tr6_disconnect_req()
524 cause = pc->para.cause; in l3_1tr6_disconnect_req()
537 StopAllL3Timer(pc); in l3_1tr6_disconnect_req()
538 MsgHead(p, pc->callref, MT_N1_DISC, PROTO_DIS_N1); in l3_1tr6_disconnect_req()
543 newl3state(pc, 11); in l3_1tr6_disconnect_req()
548 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3_1tr6_disconnect_req()
549 L3AddTimer(&pc->timer, T305, CC_T305); in l3_1tr6_disconnect_req()
553 l3_1tr6_t303(struct l3_process *pc, u_char pr, void *arg) in l3_1tr6_t303() argument
555 if (pc->N303 > 0) { in l3_1tr6_t303()
556 pc->N303--; in l3_1tr6_t303()
557 L3DelTimer(&pc->timer); in l3_1tr6_t303()
558 l3_1tr6_setup_req(pc, pr, arg); in l3_1tr6_t303()
560 L3DelTimer(&pc->timer); in l3_1tr6_t303()
561 pc->para.cause = 0; in l3_1tr6_t303()
562 l3_1tr6_disconnect_req(pc, 0, NULL); in l3_1tr6_t303()
567 l3_1tr6_t304(struct l3_process *pc, u_char pr, void *arg) in l3_1tr6_t304() argument
569 L3DelTimer(&pc->timer); in l3_1tr6_t304()
570 pc->para.cause = 0xE6; in l3_1tr6_t304()
571 l3_1tr6_disconnect_req(pc, pr, NULL); in l3_1tr6_t304()
572 pc->st->l3.l3l4(pc->st, CC_SETUP_ERR, pc); in l3_1tr6_t304()
576 l3_1tr6_t305(struct l3_process *pc, u_char pr, void *arg) in l3_1tr6_t305() argument
585 L3DelTimer(&pc->timer); in l3_1tr6_t305()
586 if (pc->para.cause != NO_CAUSE) in l3_1tr6_t305()
587 cause = pc->para.cause; in l3_1tr6_t305()
597 MsgHead(p, pc->callref, MT_N1_REL, PROTO_DIS_N1); in l3_1tr6_t305()
602 newl3state(pc, 19); in l3_1tr6_t305()
607 l3_msg(pc->st, DL_DATA | REQUEST, skb); in l3_1tr6_t305()
608 L3AddTimer(&pc->timer, T308, CC_T308_1); in l3_1tr6_t305()
612 l3_1tr6_t310(struct l3_process *pc, u_char pr, void *arg) in l3_1tr6_t310() argument
614 L3DelTimer(&pc->timer); in l3_1tr6_t310()
615 pc->para.cause = 0xE6; in l3_1tr6_t310()
616 l3_1tr6_disconnect_req(pc, pr, NULL); in l3_1tr6_t310()
617 pc->st->l3.l3l4(pc->st, CC_SETUP_ERR, pc); in l3_1tr6_t310()
621 l3_1tr6_t313(struct l3_process *pc, u_char pr, void *arg) in l3_1tr6_t313() argument
623 L3DelTimer(&pc->timer); in l3_1tr6_t313()
624 pc->para.cause = 0xE6; in l3_1tr6_t313()
625 l3_1tr6_disconnect_req(pc, pr, NULL); in l3_1tr6_t313()
626 pc->st->l3.l3l4(pc->st, CC_CONNECT_ERR, pc); in l3_1tr6_t313()
630 l3_1tr6_t308_1(struct l3_process *pc, u_char pr, void *arg) in l3_1tr6_t308_1() argument
632 L3DelTimer(&pc->timer); in l3_1tr6_t308_1()
633 l3_1TR6_message(pc, MT_N1_REL, PROTO_DIS_N1); in l3_1tr6_t308_1()
634 L3AddTimer(&pc->timer, T308, CC_T308_2); in l3_1tr6_t308_1()
635 newl3state(pc, 19); in l3_1tr6_t308_1()
639 l3_1tr6_t308_2(struct l3_process *pc, u_char pr, void *arg) in l3_1tr6_t308_2() argument
641 L3DelTimer(&pc->timer); in l3_1tr6_t308_2()
642 pc->st->l3.l3l4(pc->st, CC_RELEASE_ERR, pc); in l3_1tr6_t308_2()
643 release_l3_process(pc); in l3_1tr6_t308_2()
647 l3_1tr6_dl_reset(struct l3_process *pc, u_char pr, void *arg) in l3_1tr6_dl_reset() argument
649 pc->para.cause = CAUSE_LocalProcErr; in l3_1tr6_dl_reset()
650 l3_1tr6_disconnect_req(pc, pr, NULL); in l3_1tr6_dl_reset()
651 pc->st->l3.l3l4(pc->st, CC_SETUP_ERR, pc); in l3_1tr6_dl_reset()
655 l3_1tr6_dl_release(struct l3_process *pc, u_char pr, void *arg) in l3_1tr6_dl_release() argument
657 newl3state(pc, 0); in l3_1tr6_dl_release()
658 pc->para.cause = 0x1b; /* Destination out of order */ in l3_1tr6_dl_release()
659 pc->para.loc = 0; in l3_1tr6_dl_release()
660 pc->st->l3.l3l4(pc->st, CC_RELEASE | INDICATION, pc); in l3_1tr6_dl_release()
661 release_l3_process(pc); in l3_1tr6_dl_release()