[PATCH] sms_queue,smpp: Refactor MO SUBMIT code to make further changes easier.

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.com
Sun Mar 9 11:39:08 UTC 2014


Following 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




More information about the OpenBSC mailing list