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