1
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 +-----------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 | Project :
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 | Modul :
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 +-----------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 | Copyright 2002 Texas Instruments Berlin, AG
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 | All rights reserved.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 | This file is confidential and a trade secret of Texas
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 | Instruments Berlin, AG
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 | The receipt of or possession of this file does not convey
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 | any rights to reproduce or disclose its contents or to
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 | manufacture, use, or sell anything it may describe, in
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 | whole, or in part, without the specific written consent of
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 | Texas Instruments Berlin, AG.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 +-----------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 | Purpose : This modul is part of the entity PPP and implements all
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 | functions to handles the incoming process internal signals as
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 | described in the SDL-documentation (CHAP-statemachine)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 +-----------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 #ifndef PPP_CHAPS_C
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 #define PPP_CHAPS_C
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 #endif /* !PPP_CAPS_C */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 #define ENTITY_PPP
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 /*==== INCLUDES =============================================================*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 #include "typedefs.h" /* to get Condat data types */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 #include "vsi.h" /* to get a lot of macros */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 #include "macdef.h" /* to get a lot of macros */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 #include "custom.h" /* to get a lot of macros */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 #include "gsm.h" /* to get a lot of macros */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 #include "cnf_ppp.h" /* to get cnf-definitions */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 #include "mon_ppp.h" /* to get mon-definitions */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 #include "prim.h" /* to get the definitions of used SAP and directions */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 #include "dti.h" /* to get the DTILIB definitions */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 #include "ppp.h" /* to get the global entity definitions */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 #include "ppp_capf.h" /* to get function interface from chap */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 #include "ppp_arbf.h" /* to get function interface from arb */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 #include "ppp_ftxs.h" /* to get signal interface from ftx */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 #include "ppp_arbs.h" /* to get signal interface from arb */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 #include "ppp_rts.h" /* to get the rt signal interface */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 /*==== CONST ================================================================*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 /*==== LOCAL VARS ===========================================================*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 /*==== PRIVATE FUNCTIONS ====================================================*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 /*==== PUBLIC FUNCTIONS =====================================================*/
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 | Function : sig_arb_chap_packet_req
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 | Description : Handles the internal signal SIG_ARB_CHAP_PACKET_REQ
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 | Parameters : packet - pointer to a generic data descriptor
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 GLOBAL void sig_arb_chap_packet_req (T_desc2* packet)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 T_desc2* temp_desc;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 UBYTE forward;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 TRACE_ISIG( "sig_arb_chap_packet_req" );
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 * depend on the code-field call appropriate function
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 switch(packet->buffer[0])
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 case CODE_CHALLENGE:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 chap_rc(&packet, &forward);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 case CODE_RESPONSE:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 chap_rr(&packet, &forward);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 case CODE_SUCCESS:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 chap_rs(packet, &forward);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 case CODE_FAILURE:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 chap_rf(packet, &forward);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 default:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 forward = FORWARD_DISCARD;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 switch(forward)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 case FORWARD_RC: /* Received Challenge */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 * send Response packet and wait for an appropriate answer
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 SET_STATE( PPP_SERVICE_CHAP, CHAP_UP );
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 ppp_data->chap.counter = ppp_data->mc;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 sig_any_ftx_packet_req(DTI_PID_CHAP, packet); /* Response */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 if(ppp_data->chap.counter > 0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 ppp_data->chap.counter--;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 sig_any_rt_rrt_req();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 case FORWARD_RRP: /* Received Response Positive */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 * send Success packets until receive a stop signal from arb
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 * or the counter becomes zero
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 SET_STATE( PPP_SERVICE_CHAP, CHAP_UP );
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 ppp_data->chap.counter = ppp_data->mc;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 sig_any_ftx_packet_req(DTI_PID_CHAP, packet); /* Success */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 if(ppp_data->chap.counter > 0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 ppp_data->chap.counter--;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 sig_any_rt_rrt_req();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 sig_any_arb_tlu_ind();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 case FORWARD_RRN: /* Received Response Negative */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 * send Failure packet
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 sig_any_ftx_packet_req(DTI_PID_CHAP, packet); /* Failure */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 if(ppp_data->chap.fails > 0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 * if failure counter is not zero then create a new Challenge packet
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 ppp_data->chap.fails--;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 ppp_data->chap.counter = ppp_data->mc;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 chap_get_sc(&temp_desc);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 sig_any_ftx_packet_req(DTI_PID_CHAP, temp_desc); /* Challenge */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 if(ppp_data->chap.counter > 0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 ppp_data->chap.counter--;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 sig_any_rt_rrt_req();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 * if failure counter expired then set error code
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 sig_any_rt_srt_req();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 if(ppp_data->ppp_cause EQ 0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 ppp_data->ppp_cause = PPP_TERM_USE_AUTHED_FAILED;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 sig_any_arb_tlf_ind();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 case FORWARD_RS: /* Received Success */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 sig_any_rt_srt_req();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 sig_any_arb_tlu_ind();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 case FORWARD_RF: /* Received Failure */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 * restart timer and wait for new challenge packet
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 SET_STATE( PPP_SERVICE_CHAP, CHAP_DOWN );
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 ppp_data->chap.counter = ppp_data->mc;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 if(ppp_data->chap.counter > 0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 ppp_data->chap.counter--;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 sig_any_rt_rrt_req();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 default:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 arb_discard_packet(packet);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 } /* sig_arb_chap_packet_req() */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 | Function : sig_arb_chap_open_req
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 | Description : Handles the internal signal SIG_ARB_CHAP_OPEN_REQ
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 | Parameters : no parameters
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 GLOBAL void sig_arb_chap_open_req ()
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 T_desc2* packet;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188 TRACE_ISIG( "sig_arb_chap_open_req" );
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
189
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
190 SET_STATE( PPP_SERVICE_CHAP, CHAP_DOWN );
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
191 ppp_data->chap.sc = FALSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
192 ppp_data->chap.counter = ppp_data->mc;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
193 ppp_data->chap.fails = ppp_data->mf;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
194
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
195 if(ppp_data->mode EQ PPP_SERVER)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
196 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
197 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
198 * create and send challenge packet
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
199 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
200 chap_get_sc(&packet);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
201 sig_any_ftx_packet_req(DTI_PID_CHAP, packet); /* Challenge */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
202 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
203
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
204 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
205 * start timer (client and server)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
206 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
207 if(ppp_data->chap.counter > 0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
208 ppp_data->chap.counter--;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
209 sig_any_rt_rrt_req();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
210 } /* sig_arb_chap_open_req() */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
211
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
212
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
213
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
214 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
215 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
216 | Function : sig_arb_chap_down_req
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
217 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
218 | Description : Handles the internal signal SIG_ARB_CHAP_DOWN_REQ
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
219 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
220 | Parameters : no parameters
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
221 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
222 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
223 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
224 GLOBAL void sig_arb_chap_down_req ()
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
225 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
226 TRACE_ISIG( "sig_arb_chap_down_req" );
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
227
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
228 sig_any_rt_srt_req();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
229 arb_discard_packet(ppp_data->chap.c_packet);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
230 ppp_data->chap.c_packet = NULL;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
231 arb_discard_packet(ppp_data->chap.r_packet);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
232 ppp_data->chap.r_packet = NULL;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
233 } /* sig_arb_chap_down_req() */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
234
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
235
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
236
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
237 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
238 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
239 | Function : sig_arb_chap_stop_req
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
240 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
241 | Description : Handles the internal signal SIG_ARB_CHAP_STOP_REQ
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
242 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
243 | Parameters : no parameters
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
244 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
245 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
246 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
247 GLOBAL void sig_arb_chap_stop_req ()
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
248 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
249 TRACE_ISIG( "sig_arb_chap_stop_req" );
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
250
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
251 sig_any_rt_srt_req();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
252 } /* sig_arb_chap_down_req() */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
253
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
254
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
255
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
256 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
257 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
258 | Function : sig_arb_chap_to_req
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
259 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
260 | Description : Handles the internal signal SIG_ARB_CHAP_TO_REQ
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
261 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
262 | Parameters : no parameters
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
263 |
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
264 +------------------------------------------------------------------------------
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
265 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
266 GLOBAL void sig_arb_chap_to_req ()
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
267 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
268 T_desc2* packet = NULL;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
269
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
270 TRACE_ISIG( "sig_arb_chap_to_req" );
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
271
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
272 if (ppp_data->chap.counter EQ 0)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
273 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
274 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
275 * authentication failed (client and server mode)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
276 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
277 if((ppp_data->ppp_cause EQ 0) && (ppp_data->mode EQ PPP_CLIENT))
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
278 ppp_data->ppp_cause = PPP_TERM_NO_RESPONSE;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
279 sig_any_arb_tlf_ind();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
280 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
281 else
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
282 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
283 if(ppp_data->mode EQ PPP_SERVER)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
284 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
285 switch( GET_STATE( PPP_SERVICE_CHAP ) )
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
286 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
287 case CHAP_UP:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
288 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
289 * create Success packet
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
290 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
291 chap_get_ss(&packet);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
292 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
293 case CHAP_DOWN:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
294 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
295 * create Challenge packet
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
296 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
297 chap_get_sc(&packet);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
298 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
299 default:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
300 TRACE_EVENT("WARNING: unexpected chap time out request in server mode");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
301 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
302 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
303 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
304 * send packet
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
305 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
306 sig_any_ftx_packet_req(DTI_PID_CHAP, packet);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
307 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
308 else if(ppp_data->mode EQ PPP_CLIENT)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
309 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
310 switch( GET_STATE( PPP_SERVICE_CHAP ) )
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
311 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
312 case CHAP_UP:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
313 if(ppp_data->chap.sr)
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
314 {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
315 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
316 * Retransmit Response packet.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
317 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
318 packet = ppp_data->chap.c_packet;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
319 chap_get_sr(&packet);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
320 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
321 * Send Response packet.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
322 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
323 sig_any_ftx_packet_req(DTI_PID_CHAP, packet);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
324 } else {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
325 TRACE_EVENT("WARNING: CHAP_UP state, but no Response transmitted");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
326 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
327 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
328 case CHAP_DOWN:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
329 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
330 * Wait for CHAP Challenge,
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
331 * GET_DATA_REQ will be sent after time out by FTX service.
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
332 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
333 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
334 default:
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
335 TRACE_EVENT("WARNING: unexpected chap time out request in client mode");
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
336 break;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
337 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
338 } else {
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
339 TRACE_EVENT_P1("ERROR: undefined PPP mode - chap_caps.c (%d)", __LINE__);
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
340 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
341 /*
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
342 * restart timer
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
343 */
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
344 ppp_data->chap.counter--;
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
345 sig_any_rt_rrt_req();
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
346 }
|
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
347 } /* sig_arb_chap_to_req() */
|