FreeCalypso > hg > themwi-system-sw
annotate sip-in/shutdown.c @ 124:7e04d28fae8b
sip-in: default use-100rel to no
BulkVS servers act badly when we send a reliable 180 Ringing response
to an incoming call, even though they advertise 100rel support in
the Supported header in the INVITE packet, and we probably won't be
implementing 100rel for outbound because doing per-the-spec PRACK
as a UAC is just too burdensome. Therefore, we need to consider
100rel extension as not-really-supported in themwi-system-sw.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 01 Oct 2022 15:54:50 -0800 |
parents | c1c94b7fc2e2 |
children |
rev | line source |
---|---|
105
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 /* |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 * In this module we handle the scenarios of themwi-mncc and/or themwi-mgw |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 * shutting down while we are connected to them. In both scenarios we |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 * terminate all active calls (graceful disconnect signaling toward SIP |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 * callers and toward whichever ThemWi daemon is still running, if either), |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 * but our themwi-sip-in process itself stays running. This way once |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 * the other required processes restart, inbound calls will start working |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 * once again, without needing to restart themwi-sip-in. |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 */ |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 #include <sys/types.h> |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 #include <sys/socket.h> |
109
9b87894704eb
sip-in: first step toward final call clearing
Mychaela Falconia <falcon@freecalypso.org>
parents:
105
diff
changeset
|
13 #include <sys/time.h> |
105
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 #include <netinet/in.h> |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 #include <stdio.h> |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 #include <stdint.h> |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 #include <stdlib.h> |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 #include <string.h> |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 #include <strings.h> |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 #include <syslog.h> |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 #include "../include/mncc.h" |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 #include "../include/gsm48_const.h" |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 #include "call.h" |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 extern struct call *call_list; |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 static struct gsm_mncc_cause shutdown_cause = { |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 .coding = GSM48_CAUSE_CODING_GSM, |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 .location = GSM48_CAUSE_LOC_PRN_S_LU, |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 .value = GSM48_CC_CAUSE_NETWORK_OOO, |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 }; |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 void |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 shutdown_gsm_conn() |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 { |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 struct call *call; |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 for (call = call_list; call; call = call->next) { |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 call->mncc_state = MNCC_STATE_NO_EXIST; |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 if (call->overall_state != OVERALL_STATE_DEAD_SIP) { |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 call->overall_state = OVERALL_STATE_TEARDOWN; |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 disconnect_tmgw(call); |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 disconnect_sip(call, &shutdown_cause); |
110
c1c94b7fc2e2
sip-in call clearing: DEAD_SIP transition implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
109
diff
changeset
|
44 transition_dead_sip(call); |
105
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 } |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 } |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 } |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 void |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 shutdown_mgw_conn() |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 { |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 struct call *call; |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 for (call = call_list; call; call = call->next) { |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 call->mgw_state = MGW_STATE_NO_EXIST; |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 call->mgw_xact = 0; |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 if (call->overall_state != OVERALL_STATE_DEAD_SIP) { |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 call->overall_state = OVERALL_STATE_TEARDOWN; |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 disconnect_mncc(call, GSM48_CAUSE_LOC_PRN_S_LU, |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 GSM48_CC_CAUSE_NETWORK_OOO); |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 disconnect_sip(call, &shutdown_cause); |
110
c1c94b7fc2e2
sip-in call clearing: DEAD_SIP transition implemented
Mychaela Falconia <falcon@freecalypso.org>
parents:
109
diff
changeset
|
62 transition_dead_sip(call); |
105
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 } |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 } |
9213ec8b434b
sip-in: handle themwi-mncc shutdown without terminating
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 } |