FreeCalypso > hg > themwi-system-sw
comparison mtctest/sig_handler.c @ 139:c731ec342ba0
mtctest: rework MNCC_RTP_CONNECT sending for hold/retrieve and CW
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 07 Oct 2022 23:25:38 -0800 |
parents | 0967f67c6ac3 |
children | c8e9b295e88f |
comparison
equal
deleted
inserted
replaced
138:0967f67c6ac3 | 139:c731ec342ba0 |
---|---|
165 ack.callref = 1; | 165 ack.callref = 1; |
166 send_mncc_to_gsm(&ack, sizeof(struct gsm_mncc)); | 166 send_mncc_to_gsm(&ack, sizeof(struct gsm_mncc)); |
167 } | 167 } |
168 | 168 |
169 static void | 169 static void |
170 send_rtp_connect() | |
171 { | |
172 struct gsm_mncc_rtp rtp; | |
173 | |
174 printf("Sending MNCC_RTP_CONNECT\n"); | |
175 bzero(&rtp, sizeof(struct gsm_mncc_rtp)); | |
176 rtp.msg_type = MNCC_RTP_CONNECT; | |
177 rtp.callref = 1; | |
178 bcopy(&dummy_rtp_endp, &rtp.addr, sizeof(struct sockaddr_storage)); | |
179 send_mncc_to_gsm(&rtp, sizeof(struct gsm_mncc_rtp)); | |
180 } | |
181 | |
182 static void | |
170 handle_signaling_msg(msg, msglen) | 183 handle_signaling_msg(msg, msglen) |
171 struct gsm_mncc *msg; | 184 struct gsm_mncc *msg; |
172 unsigned msglen; | 185 unsigned msglen; |
173 { | 186 { |
174 if (msglen != sizeof(struct gsm_mncc)) { | 187 if (msglen != sizeof(struct gsm_mncc)) { |
185 } | 198 } |
186 switch (msg->msg_type) { | 199 switch (msg->msg_type) { |
187 case MNCC_SETUP_CNF: | 200 case MNCC_SETUP_CNF: |
188 printf("MNCC_SETUP_CNF: call is answered\n"); | 201 printf("MNCC_SETUP_CNF: call is answered\n"); |
189 print_fields(msg); | 202 print_fields(msg); |
203 send_rtp_connect(); | |
190 send_connect_ack(); | 204 send_connect_ack(); |
191 return; | 205 return; |
192 case MNCC_CALL_CONF_IND: | 206 case MNCC_CALL_CONF_IND: |
193 printf("MNCC_CALL_CONF_IND: call is confirmed\n"); | 207 printf("MNCC_CALL_CONF_IND: call is confirmed\n"); |
194 print_fields(msg); | 208 print_fields(msg); |
246 msg->msg_type = MNCC_HOLD_CNF; | 260 msg->msg_type = MNCC_HOLD_CNF; |
247 send_mncc_to_gsm(msg, sizeof(struct gsm_mncc)); | 261 send_mncc_to_gsm(msg, sizeof(struct gsm_mncc)); |
248 return; | 262 return; |
249 case MNCC_RETRIEVE_IND: | 263 case MNCC_RETRIEVE_IND: |
250 printf("MNCC_RETRIEVE_IND: MS requests call retrieve\n"); | 264 printf("MNCC_RETRIEVE_IND: MS requests call retrieve\n"); |
265 send_rtp_connect(); | |
251 msg->msg_type = MNCC_RETRIEVE_CNF; | 266 msg->msg_type = MNCC_RETRIEVE_CNF; |
252 send_mncc_to_gsm(msg, sizeof(struct gsm_mncc)); | 267 send_mncc_to_gsm(msg, sizeof(struct gsm_mncc)); |
253 return; | 268 return; |
254 case MNCC_USERINFO_IND: | 269 case MNCC_USERINFO_IND: |
255 printf("MNCC_USERINFO_IND: user-user info\n"); | 270 printf("MNCC_USERINFO_IND: user-user info\n"); |
269 exit(0); | 284 exit(0); |
270 } | 285 } |
271 } | 286 } |
272 | 287 |
273 static void | 288 static void |
274 handle_rtp_create(msg, msglen) | 289 handle_rtp_msg(msg, msglen) |
275 struct gsm_mncc_rtp *msg; | 290 struct gsm_mncc_rtp *msg; |
276 unsigned msglen; | 291 unsigned msglen; |
277 { | 292 { |
278 if (msglen != sizeof(struct gsm_mncc_rtp)) { | 293 if (msglen != sizeof(struct gsm_mncc_rtp)) { |
279 fprintf(stderr, | 294 fprintf(stderr, |
285 fprintf(stderr, | 300 fprintf(stderr, |
286 "error: Rx MNCC message type 0x%x has unexpected callref 0x%x\n", | 301 "error: Rx MNCC message type 0x%x has unexpected callref 0x%x\n", |
287 msg->msg_type, msg->callref); | 302 msg->msg_type, msg->callref); |
288 exit(1); | 303 exit(1); |
289 } | 304 } |
290 printf("MNCC_RTP_CREATE: RTP info from MSC\n"); | 305 switch (msg->msg_type) { |
291 printf("payload_type=0x%x payload_msg_type=0x%x\n", msg->payload_type, | 306 case MNCC_RTP_CREATE: |
292 msg->payload_msg_type); | 307 printf("MNCC_RTP_CREATE: RTP info from MSC\n"); |
293 printf("Responding with MNCC_RTP_CONNECT (dummy RTP endpoint)\n"); | 308 printf("payload_type=0x%x payload_msg_type=0x%x\n", |
294 msg->msg_type = MNCC_RTP_CONNECT; | 309 msg->payload_type, msg->payload_msg_type); |
295 bcopy(&dummy_rtp_endp, &msg->addr, sizeof(struct sockaddr_storage)); | 310 return; |
296 send_mncc_to_gsm(msg, sizeof(struct gsm_mncc_rtp)); | 311 case MNCC_RTP_CONNECT: |
312 printf("MNCC_RTP_CONNECT: error response\n"); | |
313 return; | |
314 case MNCC_RTP_FREE: | |
315 printf("MNCC_RTP_FREE: bogon\n"); | |
316 return; | |
317 } | |
297 } | 318 } |
298 | 319 |
299 void | 320 void |
300 msg_from_mncc(msg, msglen) | 321 msg_from_mncc(msg, msglen) |
301 union mncc_msg *msg; | 322 union mncc_msg *msg; |
318 case MNCC_REL_CNF: | 339 case MNCC_REL_CNF: |
319 case MNCC_REJ_IND: | 340 case MNCC_REJ_IND: |
320 handle_signaling_msg(msg, msglen); | 341 handle_signaling_msg(msg, msglen); |
321 return; | 342 return; |
322 case MNCC_RTP_CREATE: | 343 case MNCC_RTP_CREATE: |
323 handle_rtp_create(msg, msglen); | 344 case MNCC_RTP_CONNECT: |
345 case MNCC_RTP_FREE: | |
346 handle_rtp_msg(msg, msglen); | |
324 return; | 347 return; |
325 default: | 348 default: |
326 fprintf(stderr, | 349 fprintf(stderr, |
327 "error: received unexpected MNCC message type 0x%x\n", | 350 "error: received unexpected MNCC message type 0x%x\n", |
328 msg->msg_type); | 351 msg->msg_type); |