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