FreeCalypso > hg > themwi-system-sw
comparison mncc/call_setup.c @ 28:660126bd5f59
themwi-mncc: fix one bug, add debug syslog output
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Tue, 28 Jun 2022 21:47:04 -0800 |
parents | c6572f4c31d2 |
children | 2ebad02adbe5 |
comparison
equal
deleted
inserted
replaced
27:c6572f4c31d2 | 28:660126bd5f59 |
---|---|
64 if (preen_msc_provided_number(&msg->calling)) | 64 if (preen_msc_provided_number(&msg->calling)) |
65 msg->fields |= MNCC_F_CALLING; | 65 msg->fields |= MNCC_F_CALLING; |
66 else | 66 else |
67 msg->fields &= ~MNCC_F_CALLING; | 67 msg->fields &= ~MNCC_F_CALLING; |
68 if (!(msg->fields & MNCC_F_CALLED)) { | 68 if (!(msg->fields & MNCC_F_CALLED)) { |
69 syslog(LOG_ERR, "rejecting MO call 0x%x: no called number", | |
70 msg->callref); | |
69 reject_mo_call(msg->callref, GSM48_CAUSE_LOC_PRN_S_LU, | 71 reject_mo_call(msg->callref, GSM48_CAUSE_LOC_PRN_S_LU, |
70 GSM48_CC_CAUSE_INVAL_MAND_INF); | 72 GSM48_CC_CAUSE_INVAL_MAND_INF); |
71 return; | 73 return; |
72 } | 74 } |
73 call = create_gsm_call(msg->callref); | 75 call = create_gsm_call(msg->callref); |
74 if (!call) { | 76 if (!call) { |
77 syslog(LOG_ERR, "rejecting MO call 0x%x: no memory for call", | |
78 msg->callref); | |
75 reject_mo_call(msg->callref, GSM48_CAUSE_LOC_PRN_S_LU, | 79 reject_mo_call(msg->callref, GSM48_CAUSE_LOC_PRN_S_LU, |
76 GSM48_CC_CAUSE_RESOURCE_UNAVAIL); | 80 GSM48_CC_CAUSE_RESOURCE_UNAVAIL); |
77 return; | 81 return; |
78 } | 82 } |
79 /* route based on destination address */ | 83 /* route based on destination address */ |
89 msg->called.plan != GSM48_NPI_ISDN_E164 && | 93 msg->called.plan != GSM48_NPI_ISDN_E164 && |
90 msg->called.plan != GSM48_NPI_PRIVATE) | 94 msg->called.plan != GSM48_NPI_PRIVATE) |
91 break; | 95 break; |
92 res = lookup_short_dial_number(msg->called.number, nanp); | 96 res = lookup_short_dial_number(msg->called.number, nanp); |
93 if (!res) { | 97 if (!res) { |
98 syslog(LOG_ERR, | |
99 "rejecting MO call 0x%x: invalid short number", | |
100 msg->callref); | |
94 reject_mo_call(msg->callref, GSM48_CAUSE_LOC_PRN_S_LU, | 101 reject_mo_call(msg->callref, GSM48_CAUSE_LOC_PRN_S_LU, |
95 GSM48_CC_CAUSE_UNASSIGNED_NR); | 102 GSM48_CC_CAUSE_UNASSIGNED_NR); |
96 call->gc_flag = 1; | 103 call->gc_flag = 1; |
97 return; | 104 return; |
98 } | 105 } |
115 if (msg->called.plan != GSM48_NPI_UNKNOWN && | 122 if (msg->called.plan != GSM48_NPI_UNKNOWN && |
116 msg->called.plan != GSM48_NPI_ISDN_E164 && | 123 msg->called.plan != GSM48_NPI_ISDN_E164 && |
117 msg->called.plan != GSM48_NPI_NATIONAL) | 124 msg->called.plan != GSM48_NPI_NATIONAL) |
118 break; | 125 break; |
119 if (!is_nanp_valid_prefix(msg->called.number)) { | 126 if (!is_nanp_valid_prefix(msg->called.number)) { |
127 syslog(LOG_ERR, | |
128 "rejecting MO call 0x%x: invalid NANP number", | |
129 msg->callref); | |
120 reject_mo_call(msg->callref, GSM48_CAUSE_LOC_PRN_S_LU, | 130 reject_mo_call(msg->callref, GSM48_CAUSE_LOC_PRN_S_LU, |
121 GSM48_CC_CAUSE_INV_NR_FORMAT); | 131 GSM48_CC_CAUSE_INV_NR_FORMAT); |
122 call->gc_flag = 1; | 132 call->gc_flag = 1; |
123 return; | 133 return; |
124 } | 134 } |
137 msg->called.plan != GSM48_NPI_ISDN_E164) | 147 msg->called.plan != GSM48_NPI_ISDN_E164) |
138 break; | 148 break; |
139 if (msg->called.number[0] != '1') | 149 if (msg->called.number[0] != '1') |
140 break; | 150 break; |
141 if (!is_nanp_valid_prefix(msg->called.number+1)) { | 151 if (!is_nanp_valid_prefix(msg->called.number+1)) { |
152 syslog(LOG_ERR, | |
153 "rejecting MO call 0x%x: invalid NANP number", | |
154 msg->callref); | |
142 reject_mo_call(msg->callref, GSM48_CAUSE_LOC_PRN_S_LU, | 155 reject_mo_call(msg->callref, GSM48_CAUSE_LOC_PRN_S_LU, |
143 GSM48_CC_CAUSE_INV_NR_FORMAT); | 156 GSM48_CC_CAUSE_INV_NR_FORMAT); |
144 call->gc_flag = 1; | 157 call->gc_flag = 1; |
145 return; | 158 return; |
146 } | 159 } |
153 is_local = is_itn; | 166 is_local = is_itn; |
154 if (is_nanp && is_nanp_locally_owned(msg->called.number+1)) | 167 if (is_nanp && is_nanp_locally_owned(msg->called.number+1)) |
155 is_local = 1; | 168 is_local = 1; |
156 /* weed out attempts to call yourself */ | 169 /* weed out attempts to call yourself */ |
157 if (is_local && !strcmp(msg->calling.number, msg->called.number)) { | 170 if (is_local && !strcmp(msg->calling.number, msg->called.number)) { |
171 syslog(LOG_ERR, "rejecting MO call 0x%x: call to self", | |
172 msg->callref); | |
158 reject_mo_call(msg->callref, GSM48_CAUSE_LOC_PRN_S_LU, | 173 reject_mo_call(msg->callref, GSM48_CAUSE_LOC_PRN_S_LU, |
159 GSM48_CC_CAUSE_INCOMPAT_DEST); | 174 GSM48_CC_CAUSE_INCOMPAT_DEST); |
160 call->gc_flag = 1; | 175 call->gc_flag = 1; |
161 return; | 176 return; |
162 } | 177 } |
164 if (is_local) { | 179 if (is_local) { |
165 internal_switch_mo_setup(call, msg); | 180 internal_switch_mo_setup(call, msg); |
166 return; | 181 return; |
167 } | 182 } |
168 /* outbound calls remain to be implemented */ | 183 /* outbound calls remain to be implemented */ |
184 syslog(LOG_ERR, "rejecting MO call 0x%x: outbound not implemented", | |
185 msg->callref); | |
169 reject_mo_call(msg->callref, GSM48_CAUSE_LOC_PRN_S_LU, | 186 reject_mo_call(msg->callref, GSM48_CAUSE_LOC_PRN_S_LU, |
170 GSM48_CC_CAUSE_NO_ROUTE); | 187 GSM48_CC_CAUSE_NO_ROUTE); |
171 call->gc_flag = 1; | 188 call->gc_flag = 1; |
172 } | 189 } |
173 | 190 |
191 struct gsm_mncc *msg; | 208 struct gsm_mncc *msg; |
192 { | 209 { |
193 struct gsm_call *call; | 210 struct gsm_call *call; |
194 | 211 |
195 if (!(msg->fields & MNCC_F_CALLED) && !msg->imsi[0]) { | 212 if (!(msg->fields & MNCC_F_CALLED) && !msg->imsi[0]) { |
213 syslog(LOG_ERR, "rejecting ext MT: no called number"); | |
196 reject_mt_call(conn, msg->callref, GSM48_CAUSE_LOC_PRN_S_LU, | 214 reject_mt_call(conn, msg->callref, GSM48_CAUSE_LOC_PRN_S_LU, |
197 GSM48_CC_CAUSE_INVAL_MAND_INF); | 215 GSM48_CC_CAUSE_INVAL_MAND_INF); |
198 return; | 216 return; |
199 } | 217 } |
200 call = create_new_mt_call(); | 218 call = create_new_mt_call(); |
201 if (!call) { | 219 if (!call) { |
220 syslog(LOG_ERR, "rejecting ext MT: no memory for call"); | |
202 reject_mt_call(conn, msg->callref, GSM48_CAUSE_LOC_PRN_S_LU, | 221 reject_mt_call(conn, msg->callref, GSM48_CAUSE_LOC_PRN_S_LU, |
203 GSM48_CC_CAUSE_RESOURCE_UNAVAIL); | 222 GSM48_CC_CAUSE_RESOURCE_UNAVAIL); |
204 return; | 223 return; |
205 } | 224 } |
206 call->socket = conn; | 225 call->socket = conn; |
207 call->socket_ref = msg->callref; | 226 call->socket_ref = msg->callref; |
227 conn->ncalls++; | |
228 syslog(LOG_DEBUG, "mapped socket callref 0x%x to GSM callref 0x%x", | |
229 msg->callref, call->callref); | |
208 /* forward to GSM MNCC interface */ | 230 /* forward to GSM MNCC interface */ |
209 msg->callref = call->callref; | 231 msg->callref = call->callref; |
210 send_mncc_to_gsm(msg, sizeof(struct gsm_mncc)); | 232 send_mncc_to_gsm(msg, sizeof(struct gsm_mncc)); |
211 } | 233 } |
212 | 234 |