FreeCalypso > hg > themwi-system-sw
annotate mncc/mncc_recv.c @ 156:0bacca1f2f7b
sip-out: handle all INVITE responses, except errors
| author | Mychaela Falconia <falcon@freecalypso.org> | 
|---|---|
| date | Wed, 12 Oct 2022 07:13:55 -0800 | 
| parents | 660126bd5f59 | 
| children | 
| rev | line source | 
|---|---|
| 15 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 1 /* | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 2 * In this module we implement initial handling of MNCC messages | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 3 * coming from OsmoMSC, dispatching them further as appropriate. | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 4 */ | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 5 | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 6 #include <sys/types.h> | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 7 #include <sys/socket.h> | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 8 #include <stdio.h> | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 9 #include <stdint.h> | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 10 #include <stdlib.h> | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 11 #include <syslog.h> | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 12 #include "../include/mncc.h" | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 13 #include "struct.h" | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 14 #include "gsm_call.h" | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 15 | 
| 28 
660126bd5f59
themwi-mncc: fix one bug, add debug syslog output
 Mychaela Falconia <falcon@freecalypso.org> parents: 
15diff
changeset | 16 extern char *mncc_msg_name(); | 
| 
660126bd5f59
themwi-mncc: fix one bug, add debug syslog output
 Mychaela Falconia <falcon@freecalypso.org> parents: 
15diff
changeset | 17 | 
| 15 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 18 static void | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 19 report_runt(msg) | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 20 union mncc_msg *msg; | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 21 { | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 22 syslog(LOG_CRIT, "MNCC message type 0x%x from GSM is too short!", | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 23 msg->msg_type); | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 24 } | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 25 | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 26 static void | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 27 handle_setup_ind(msg, msglen) | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 28 struct gsm_mncc *msg; | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 29 unsigned msglen; | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 30 { | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 31 struct gsm_call *call; | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 32 | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 33 if (msglen < sizeof(struct gsm_mncc)) { | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 34 report_runt(msg); | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 35 return; | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 36 } | 
| 28 
660126bd5f59
themwi-mncc: fix one bug, add debug syslog output
 Mychaela Falconia <falcon@freecalypso.org> parents: 
15diff
changeset | 37 syslog(LOG_DEBUG, "Rx MNCC_SETUP_IND from GSM, callref=0x%x", | 
| 
660126bd5f59
themwi-mncc: fix one bug, add debug syslog output
 Mychaela Falconia <falcon@freecalypso.org> parents: 
15diff
changeset | 38 msg->callref); | 
| 15 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 39 call = find_gsm_callref(msg->callref); | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 40 if (call) { | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 41 syslog(LOG_ERR, "duplicate MNCC_SETUP_IND for callref 0x%x", | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 42 msg->callref); | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 43 /* drop it like OsmoMSC's mncc_builtin does */ | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 44 return; | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 45 } | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 46 /* further processing */ | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 47 process_mo_call_setup(msg); | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 48 } | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 49 | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 50 static void | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 51 handle_signaling_msg(msg, msglen) | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 52 struct gsm_mncc *msg; | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 53 unsigned msglen; | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 54 { | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 55 struct gsm_call *call; | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 56 | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 57 if (msglen < sizeof(struct gsm_mncc)) { | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 58 report_runt(msg); | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 59 return; | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 60 } | 
| 28 
660126bd5f59
themwi-mncc: fix one bug, add debug syslog output
 Mychaela Falconia <falcon@freecalypso.org> parents: 
15diff
changeset | 61 syslog(LOG_DEBUG, "Rx %s from GSM, callref=0x%x", | 
| 
660126bd5f59
themwi-mncc: fix one bug, add debug syslog output
 Mychaela Falconia <falcon@freecalypso.org> parents: 
15diff
changeset | 62 mncc_msg_name(msg->msg_type), msg->callref); | 
| 15 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 63 call = find_gsm_callref(msg->callref); | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 64 if (!call) { | 
| 28 
660126bd5f59
themwi-mncc: fix one bug, add debug syslog output
 Mychaela Falconia <falcon@freecalypso.org> parents: 
15diff
changeset | 65 syslog(LOG_ERR, "%s from GSM: callref 0x%x not found", | 
| 
660126bd5f59
themwi-mncc: fix one bug, add debug syslog output
 Mychaela Falconia <falcon@freecalypso.org> parents: 
15diff
changeset | 66 mncc_msg_name(msg->msg_type), msg->callref); | 
| 15 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 67 /* drop it like OsmoMSC's mncc_builtin does */ | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 68 return; | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 69 } | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 70 if (msg->msg_type == MNCC_SETUP_CNF) | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 71 preen_connected_number(msg); | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 72 /* dispatch according to internal switch or socket */ | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 73 if (call->socket) | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 74 mncc_signal_to_socket(call, msg); | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 75 else | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 76 internal_switch_mncc(call, msg); | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 77 } | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 78 | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 79 static void | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 80 handle_release_msg(msg, msglen) | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 81 struct gsm_mncc *msg; | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 82 unsigned msglen; | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 83 { | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 84 struct gsm_call *call; | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 85 | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 86 if (msglen < sizeof(struct gsm_mncc)) { | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 87 report_runt(msg); | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 88 return; | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 89 } | 
| 28 
660126bd5f59
themwi-mncc: fix one bug, add debug syslog output
 Mychaela Falconia <falcon@freecalypso.org> parents: 
15diff
changeset | 90 syslog(LOG_DEBUG, "Rx %s from GSM, callref=0x%x", | 
| 
660126bd5f59
themwi-mncc: fix one bug, add debug syslog output
 Mychaela Falconia <falcon@freecalypso.org> parents: 
15diff
changeset | 91 mncc_msg_name(msg->msg_type), msg->callref); | 
| 15 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 92 call = find_gsm_callref(msg->callref); | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 93 if (!call) { | 
| 28 
660126bd5f59
themwi-mncc: fix one bug, add debug syslog output
 Mychaela Falconia <falcon@freecalypso.org> parents: 
15diff
changeset | 94 syslog(LOG_ERR, "%s from GSM: callref 0x%x not found", | 
| 
660126bd5f59
themwi-mncc: fix one bug, add debug syslog output
 Mychaela Falconia <falcon@freecalypso.org> parents: 
15diff
changeset | 95 mncc_msg_name(msg->msg_type), msg->callref); | 
| 15 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 96 /* drop it like OsmoMSC's mncc_builtin does */ | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 97 return; | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 98 } | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 99 /* dispatch according to internal switch or socket */ | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 100 if (call->socket) { | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 101 mncc_signal_to_socket(call, msg); | 
| 28 
660126bd5f59
themwi-mncc: fix one bug, add debug syslog output
 Mychaela Falconia <falcon@freecalypso.org> parents: 
15diff
changeset | 102 syslog(LOG_DEBUG, | 
| 
660126bd5f59
themwi-mncc: fix one bug, add debug syslog output
 Mychaela Falconia <falcon@freecalypso.org> parents: 
15diff
changeset | 103 "clearing socket call: GSM callref 0x%x, socket ref 0x%x", | 
| 
660126bd5f59
themwi-mncc: fix one bug, add debug syslog output
 Mychaela Falconia <falcon@freecalypso.org> parents: 
15diff
changeset | 104 call->callref, call->socket_ref); | 
| 15 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 105 extsock_dec_refcount(call->socket); | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 106 call->gc_flag = 1; | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 107 } else | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 108 internal_switch_mncc(call, msg); | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 109 } | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 110 | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 111 static void | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 112 handle_rtp_msg(msg, msglen) | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 113 struct gsm_mncc_rtp *msg; | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 114 unsigned msglen; | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 115 { | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 116 struct gsm_call *call; | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 117 | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 118 if (msglen < sizeof(struct gsm_mncc_rtp)) { | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 119 report_runt(msg); | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 120 return; | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 121 } | 
| 28 
660126bd5f59
themwi-mncc: fix one bug, add debug syslog output
 Mychaela Falconia <falcon@freecalypso.org> parents: 
15diff
changeset | 122 syslog(LOG_DEBUG, "Rx %s from GSM, callref=0x%x", | 
| 
660126bd5f59
themwi-mncc: fix one bug, add debug syslog output
 Mychaela Falconia <falcon@freecalypso.org> parents: 
15diff
changeset | 123 mncc_msg_name(msg->msg_type), msg->callref); | 
| 15 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 124 call = find_gsm_callref(msg->callref); | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 125 if (!call) { | 
| 28 
660126bd5f59
themwi-mncc: fix one bug, add debug syslog output
 Mychaela Falconia <falcon@freecalypso.org> parents: 
15diff
changeset | 126 syslog(LOG_ERR, "%s from GSM: callref 0x%x not found", | 
| 
660126bd5f59
themwi-mncc: fix one bug, add debug syslog output
 Mychaela Falconia <falcon@freecalypso.org> parents: 
15diff
changeset | 127 mncc_msg_name(msg->msg_type), msg->callref); | 
| 15 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 128 /* drop it like OsmoMSC's mncc_builtin does */ | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 129 return; | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 130 } | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 131 /* only for socket connections - no RTP handling for internal */ | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 132 if (call->socket) | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 133 mncc_rtp_to_socket(call, msg); | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 134 } | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 135 | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 136 static void | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 137 handle_mncc_hello(msg, msglen) | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 138 struct gsm_mncc_hello *msg; | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 139 unsigned msglen; | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 140 { | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 141 if (msglen < sizeof(struct gsm_mncc_hello)) { | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 142 syslog(LOG_CRIT, "MNCC_SOCKET_HELLO message is too short!"); | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 143 exit(1); | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 144 } | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 145 if (msg->version != MNCC_SOCK_VERSION) { | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 146 syslog(LOG_CRIT, "MNCC hello error: version number mismatch"); | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 147 exit(1); | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 148 } | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 149 if (msg->mncc_size != sizeof(struct gsm_mncc)) { | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 150 syslog(LOG_CRIT, "MNCC hello error: mncc_size mismatch"); | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 151 exit(1); | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 152 } | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 153 } | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 154 | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 155 void | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 156 mncc_msg_from_gsm(msg, msglen) | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 157 union mncc_msg *msg; | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 158 unsigned msglen; | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 159 { | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 160 switch (msg->msg_type) { | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 161 case MNCC_SETUP_IND: | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 162 handle_setup_ind(msg, msglen); | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 163 return; | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 164 case MNCC_SETUP_CNF: | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 165 case MNCC_SETUP_COMPL_IND: | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 166 case MNCC_CALL_CONF_IND: | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 167 case MNCC_ALERT_IND: | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 168 case MNCC_NOTIFY_IND: | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 169 case MNCC_DISC_IND: | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 170 case MNCC_FACILITY_IND: | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 171 case MNCC_START_DTMF_IND: | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 172 case MNCC_STOP_DTMF_IND: | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 173 case MNCC_MODIFY_IND: | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 174 case MNCC_MODIFY_CNF: | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 175 case MNCC_MODIFY_REJ: | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 176 case MNCC_HOLD_IND: | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 177 case MNCC_RETRIEVE_IND: | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 178 case MNCC_USERINFO_IND: | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 179 handle_signaling_msg(msg, msglen); | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 180 return; | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 181 case MNCC_REL_IND: | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 182 case MNCC_REL_CNF: | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 183 case MNCC_REJ_IND: | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 184 handle_release_msg(msg, msglen); | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 185 return; | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 186 case MNCC_RTP_CREATE: | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 187 case MNCC_RTP_CONNECT: | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 188 case MNCC_RTP_FREE: | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 189 handle_rtp_msg(msg, msglen); | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 190 return; | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 191 case MNCC_SOCKET_HELLO: | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 192 handle_mncc_hello(msg, msglen); | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 193 return; | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 194 default: | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 195 syslog(LOG_CRIT, "unknown MNCC message type 0x%x from GSM", | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 196 msg->msg_type); | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 197 } | 
| 
ccc5ab6d8388
first version of themwi-mncc for ThemWi2
 Mychaela Falconia <falcon@freecalypso.org> parents: diff
changeset | 198 } | 
