This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/OpenBSC@lists.osmocom.org/.
Alexander Chemeris alexander.chemeris at gmail.comFollowing up with yesterday's discussion about SMS routing, I would
like to re-submit this patch.
On Sat, Oct 5, 2013 at 1:00 PM, Alexander Chemeris
<alexander.chemeris at gmail.com> wrote:
> This is required to implement normal prefix/regexp routing in addition to
> the current "if unroutable" model.
> ---
> openbsc/src/libmsc/gsm_04_11.c | 63 +++++++++++++++++++++++-----------------
> 1 file changed, 37 insertions(+), 26 deletions(-)
>
> diff --git a/openbsc/src/libmsc/gsm_04_11.c b/openbsc/src/libmsc/gsm_04_11.c
> index e554b74..7e8ede8 100644
> --- a/openbsc/src/libmsc/gsm_04_11.c
> +++ b/openbsc/src/libmsc/gsm_04_11.c
> @@ -279,6 +279,39 @@ static int gsm340_gen_tpdu(struct msgb *msg, struct gsm_sms *sms)
> return msg->len - old_msg_len;
> }
>
> +static int sms_queue_try_deliver(struct gsm_subscriber_connection *conn,
> + struct msgb *msg, struct gsm_sms *gsms)
> +{
> + /* determine gsms->receiver based on dialled number */
> + gsms->receiver = subscr_get_by_extension(conn->bts->network, gsms->dst.addr);
> + if (!gsms->receiver) {
> + rc = GSM411_RP_CAUSE_MO_NUM_UNASSIGNED;
> + goto out;
> + }
> +
> + switch (sms_mti) {
> + case GSM340_SMS_SUBMIT_MS2SC:
> + /* MS is submitting a SMS */
> + rc = gsm340_rx_sms_submit(msg, gsms);
> + break;
> + case GSM340_SMS_COMMAND_MS2SC:
> + case GSM340_SMS_DELIVER_REP_MS2SC:
> + LOGP(DLSMS, LOGL_NOTICE, "Unimplemented MTI 0x%02x\n", sms_mti);
> + rc = GSM411_RP_CAUSE_IE_NOTEXIST;
> + break;
> + default:
> + LOGP(DLSMS, LOGL_NOTICE, "Undefined MTI 0x%02x\n", sms_mti);
> + rc = GSM411_RP_CAUSE_IE_NOTEXIST;
> + break;
> + }
> +
> + if (!rc && !gsms->receiver)
> + rc = GSM411_RP_CAUSE_MO_NUM_UNASSIGNED;
> +
> +out:
> + return rc;
> +}
> +
> /* process an incoming TPDU (called from RP-DATA)
> * return value > 0: RP CAUSE for ERROR; < 0: silent error; 0 = success */
> static int gsm340_rx_tpdu(struct gsm_subscriber_connection *conn, struct msgb *msg)
> @@ -393,44 +426,22 @@ static int gsm340_rx_tpdu(struct gsm_subscriber_connection *conn, struct msgb *m
> /* FIXME: This looks very wrong */
> send_signal(0, NULL, gsms, 0);
>
> - /* determine gsms->receiver based on dialled number */
> - gsms->receiver = subscr_get_by_extension(conn->bts->network, gsms->dst.addr);
> - if (!gsms->receiver) {
> + rc = sms_queue_try_deliver(conn, msg, gsms);
> + if (rc == GSM411_RP_CAUSE_MO_NUM_UNASSIGNED) {
> #ifdef BUILD_SMPP
> rc = smpp_try_deliver(gsms, conn);
> - if (rc == 1) {
> - rc = 1; /* cause 1: unknown subscriber */
> + if (rc == GSM411_RP_CAUSE_MO_NUM_UNASSIGNED) {
> osmo_counter_inc(conn->bts->network->stats.sms.no_receiver);
> } else if (rc < 0) {
> - rc = 21; /* cause 21: short message transfer rejected */
> + rc = GSM411_RP_CAUSE_MO_NUM_UNASSIGNED;
> /* FIXME: handle the error somehow? */
> }
> #else
> - rc = 1; /* cause 1: unknown subscriber */
> osmo_counter_inc(conn->bts->network->stats.sms.no_receiver);
> #endif
> goto out;
> }
>
> - switch (sms_mti) {
> - case GSM340_SMS_SUBMIT_MS2SC:
> - /* MS is submitting a SMS */
> - rc = gsm340_rx_sms_submit(msg, gsms);
> - break;
> - case GSM340_SMS_COMMAND_MS2SC:
> - case GSM340_SMS_DELIVER_REP_MS2SC:
> - LOGP(DLSMS, LOGL_NOTICE, "Unimplemented MTI 0x%02x\n", sms_mti);
> - rc = GSM411_RP_CAUSE_IE_NOTEXIST;
> - break;
> - default:
> - LOGP(DLSMS, LOGL_NOTICE, "Undefined MTI 0x%02x\n", sms_mti);
> - rc = GSM411_RP_CAUSE_IE_NOTEXIST;
> - break;
> - }
> -
> - if (!rc && !gsms->receiver)
> - rc = GSM411_RP_CAUSE_MO_NUM_UNASSIGNED;
> -
> out:
> sms_free(gsms);
>
> --
> 1.7.9.5
>
--
Regards,
Alexander Chemeris.
CEO, Fairwaves, Inc. / ООО УмРадио
https://fairwaves.co