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 |
