[PATCH] libosmo-abis[master]: src: use osmo_timer_setup()
Review at https://gerrit.osmocom.org/2855 src: use osmo_timer_setup() Use new function available in libosmocore to set up timers. Compile tested only. Change-Id: I4ca4950e49a09c63b608b13ac7561ebbd351889a --- M src/input/dahdi.c M src/input/ipaccess.c M src/input/misdn.c M src/input/unixsocket.c 4 files changed, 4 insertions(+), 8 deletions(-) git pull ssh://gerrit.osmocom.org:29418/libosmo-abis refs/changes/55/2855/1 diff --git a/src/input/dahdi.c b/src/input/dahdi.c index 0945daa..911f862 100644 --- a/src/input/dahdi.c +++ b/src/input/dahdi.c @@ -252,8 +252,7 @@ sign_link->sapi, msg); /* set tx delay timer for next event */ - e1i_ts->sign.tx_timer.cb = timeout_ts1_write; - e1i_ts->sign.tx_timer.data = e1i_ts; + osmo_timer_setup(&e1i_ts->sign.tx_timer, timeout_ts1_write, e1i_ts); osmo_timer_schedule(&e1i_ts->sign.tx_timer, 0, 5); return 0; diff --git a/src/input/ipaccess.c b/src/input/ipaccess.c index ac84ffc..63ee167 100644 --- a/src/input/ipaccess.c +++ b/src/input/ipaccess.c @@ -354,8 +354,7 @@ } /* set tx delay timer for next event */ - e1i_ts->sign.tx_timer.cb = timeout_ts1_write; - e1i_ts->sign.tx_timer.data = e1i_ts; + osmo_timer_setup(&e1i_ts->sign.tx_timer, timeout_ts1_write, e1i_ts); /* Reducing this might break the nanoBTS 900 init. */ osmo_timer_schedule(&e1i_ts->sign.tx_timer, 0, e1i_ts->sign.delay); diff --git a/src/input/misdn.c b/src/input/misdn.c index 98a836f..347b7bf 100644 --- a/src/input/misdn.c +++ b/src/input/misdn.c @@ -283,8 +283,7 @@ /* set tx delay timer for next event */ - e1i_ts->sign.tx_timer.cb = timeout_ts1_write; - e1i_ts->sign.tx_timer.data = e1i_ts; + osmo_timer_setup(&e1i_ts->sign.tx_timer, timeout_ts1_write, e1i_ts); osmo_timer_schedule(&e1i_ts->sign.tx_timer, 0, e1i_ts->sign.delay); return ret; diff --git a/src/input/unixsocket.c b/src/input/unixsocket.c index 4f287ae..63bd796 100644 --- a/src/input/unixsocket.c +++ b/src/input/unixsocket.c @@ -160,8 +160,7 @@ } /* set tx delay timer for next event */ - e1i_ts->sign.tx_timer.cb = timeout_ts1_write; - e1i_ts->sign.tx_timer.data = e1i_ts; + osmo_timer_setup(&e1i_ts->sign.tx_timer, timeout_ts1_write, e1i_ts); osmo_timer_schedule(&e1i_ts->sign.tx_timer, 0, e1i_ts->sign.delay); -- To view, visit https://gerrit.osmocom.org/2855 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I4ca4950e49a09c63b608b13ac7561ebbd351889a Gerrit-PatchSet: 1 Gerrit-Project: libosmo-abis Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso
[PATCH] libosmo-netif[master]: src: use osmo_timer_setup()
Review at https://gerrit.osmocom.org/2856 src: use osmo_timer_setup() Use new function available in libosmocore to set up timers. Compile tested only. Change-Id: Id3dd32102c7362f3b280d2c058c2decebccb357a --- M src/osmux.c M src/rs232.c M src/stream.c 3 files changed, 6 insertions(+), 10 deletions(-) git pull ssh://gerrit.osmocom.org:29418/libosmo-netif refs/changes/56/2856/1 diff --git a/src/osmux.c b/src/osmux.c index 91054f1..23a6440 100644 --- a/src/osmux.c +++ b/src/osmux.c @@ -721,8 +721,7 @@ INIT_LLIST_HEAD(&batch->circuit_list); batch->remaining_bytes = h->batch_size; - batch->timer.cb = osmux_batch_timer_expired; - batch->timer.data = h; + osmo_timer_setup(&batch->timer, osmux_batch_timer_expired, h); h->internal_data = (void *)batch; @@ -803,8 +802,7 @@ h->msg = msg; h->tx_cb = tx_cb; h->data = data; - h->timer.cb = osmux_tx_cb; - h->timer.data = h; + osmo_timer_setup(&h->timer, osmux_tx_cb, h); #ifdef DEBUG_TIMING osmo_gettimeofday(&h->start, NULL); diff --git a/src/rs232.c b/src/rs232.c index c05a693..49520d8 100644 --- a/src/rs232.c +++ b/src/rs232.c @@ -234,10 +234,9 @@ return rc; } - if (r->cfg.delay_us) { - r->tx_timer.cb = rs232_tx_timer_cb; - r->tx_timer.data = r; - } + if (r->cfg.delay_us) + osmo_timer_setup(&r->tx_timer, rs232_tx_timer_cb, r); + return 0; } diff --git a/src/stream.c b/src/stream.c index b96293e..a80d842 100644 --- a/src/stream.c +++ b/src/stream.c @@ -281,8 +281,7 @@ cli->ofd.cb = osmo_stream_cli_fd_cb; cli->ofd.data = cli; cli->state = STREAM_CLI_STATE_CONNECTING; - cli->timer.cb = cli_timer_cb; - cli->timer.data = cli; + osmo_timer_setup(&cli->timer, cli_timer_cb, cli); cli->reconnect_timeout = 5; /* default is 5 seconds. */ INIT_LLIST_HEAD(&cli->tx_queue); -- To view, visit https://gerrit.osmocom.org/2856 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Id3dd32102c7362f3b280d2c058c2decebccb357a Gerrit-PatchSet: 1 Gerrit-Project: libosmo-netif Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso
[PATCH] openbsc[master]: libmsc: do not leak pending SMPP command object on error path
Review at https://gerrit.osmocom.org/3423 libmsc: do not leak pending SMPP command object on error path Make sure the SMPP command object is released on errors. Change-Id: I474584425d23fb379a9d71b33e29ac0e24f01e61 --- M openbsc/src/libmsc/smpp_openbsc.c 1 file changed, 6 insertions(+), 5 deletions(-) git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/23/3423/1 diff --git a/openbsc/src/libmsc/smpp_openbsc.c b/openbsc/src/libmsc/smpp_openbsc.c index f7d1441..36ad0a2 100644 --- a/openbsc/src/libmsc/smpp_openbsc.c +++ b/openbsc/src/libmsc/smpp_openbsc.c @@ -517,7 +517,7 @@ conn = connection_for_subscr(cmd->subscr); if (!conn) { LOGP(DSMPP, LOGL_ERROR, "No connection to subscriber anymore\n"); - return; + goto out; } trans = trans_find_by_id(conn, GSM48_PDISC_SMS, @@ -525,10 +525,11 @@ if (!trans) { LOGP(DSMPP, LOGL_ERROR, "GSM transaction %u is gone\n", cmd->sms->gsm411.transaction_id); - return; + goto out; } gsm411_send_rp_ack(trans, cmd->sms->gsm411.msg_ref); +out: smpp_cmd_free(cmd); } @@ -541,7 +542,7 @@ conn = connection_for_subscr(cmd->subscr); if (!conn) { LOGP(DSMPP, LOGL_ERROR, "No connection to subscriber anymore\n"); - return; + goto out; } trans = trans_find_by_id(conn, GSM48_PDISC_SMS, @@ -549,14 +550,14 @@ if (!trans) { LOGP(DSMPP, LOGL_ERROR, "GSM transaction %u is gone\n", cmd->sms->gsm411.transaction_id); - return; + goto out; } if (smpp_to_gsm411_err(status, &gsm411_cause) < 0) gsm411_cause = GSM411_RP_CAUSE_MO_NET_OUT_OF_ORDER; gsm411_send_rp_error(trans, cmd->sms->gsm411.msg_ref, gsm411_cause); - +out: smpp_cmd_free(cmd); } -- To view, visit https://gerrit.osmocom.org/3423 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I474584425d23fb379a9d71b33e29ac0e24f01e61 Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso
[PATCH] openbsc[master]: libmsc: remove dead code in sms_route_mt_sms()
Review at https://gerrit.osmocom.org/3424 libmsc: remove dead code in sms_route_mt_sms() The following branch: if (!rc && !gsms->receiver) rc = GSM411_RP_CAUSE_MO_NUM_UNASSIGNED; at the end of sms_route_mt_sms() always evaluates false. Just a bit before, in such function, we have this: if (!gsms->receiver) { ... #ifdef BUILD_SMPP ... #else ... #endif return rc; } So, if there is no receiver, we just stop running code and return the RP cause via the rc variable. Same applies to the smpp_first check under the BUILD_SMPP ifdef (that I have removed in this snippet to keep this commit message small). Change-Id: Ic3502b5b169bc7a73a67fd6ff53d8b6c0dc045c8 --- M openbsc/src/libmsc/gsm_04_11.c 1 file changed, 0 insertions(+), 3 deletions(-) git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/24/3424/1 diff --git a/openbsc/src/libmsc/gsm_04_11.c b/openbsc/src/libmsc/gsm_04_11.c index da4460c..7df5e64 100644 --- a/openbsc/src/libmsc/gsm_04_11.c +++ b/openbsc/src/libmsc/gsm_04_11.c @@ -356,9 +356,6 @@ break; } - if (!rc && !gsms->receiver) - rc = GSM411_RP_CAUSE_MO_NUM_UNASSIGNED; - return rc; } -- To view, visit https://gerrit.osmocom.org/3424 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ic3502b5b169bc7a73a67fd6ff53d8b6c0dc045c8 Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso
[PATCH] openbsc[master]: utils: smpp_mirror: set registered_delivery field in SMPP SU...
Review at https://gerrit.osmocom.org/3431 utils: smpp_mirror: set registered_delivery field in SMPP SUBMIT_SM To test delivery reports using this utility. Change-Id: I0e477407531fdd4d906e53c9b5a48a79a239966f --- M openbsc/src/utils/smpp_mirror.c 1 file changed, 1 insertion(+), 0 deletions(-) git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/31/3431/1 diff --git a/openbsc/src/utils/smpp_mirror.c b/openbsc/src/utils/smpp_mirror.c index 95df5f2..ec28f0a 100644 --- a/openbsc/src/utils/smpp_mirror.c +++ b/openbsc/src/utils/smpp_mirror.c @@ -130,6 +130,7 @@ sizeof(deliver.destination_addr))); submit.esm_class = deliver.esm_class; + submit.registered_delivery = deliver.registered_delivery; submit.protocol_id = deliver.protocol_id; submit.priority_flag = deliver.priority_flag; memcpy(submit.schedule_delivery_time, deliver.schedule_delivery_time, -- To view, visit https://gerrit.osmocom.org/3431 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I0e477407531fdd4d906e53c9b5a48a79a239966f Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso
[PATCH] openbsc[master]: libmsc: remove 'deferred' parameter in sms_route_mt_sms()
pp_to_gsm411_err(status, &gsm411_cause) < 0) gsm411_cause = GSM411_RP_CAUSE_MO_NET_OUT_OF_ORDER; - gsm411_send_rp_error(trans, cmd->sms->gsm411.msg_ref, gsm411_cause); + gsm411_send_rp_error(trans, cmd->gsm411_msg_ref, gsm411_cause); out: smpp_cmd_free(cmd); } @@ -568,7 +565,7 @@ static int smpp_cmd_enqueue(struct osmo_esme *esme, struct gsm_subscriber *subscr, struct gsm_sms *sms, - uint32_t sequence_number, bool *deferred) + uint32_t sequence_number) { struct osmo_smpp_cmd *cmd; @@ -577,7 +574,8 @@ return -1; cmd->sequence_nr= sequence_number; - cmd->sms= sms; + cmd->gsm411_msg_ref = sms->gsm411.msg_ref; + cmd->gsm411_trans_id= sms->gsm411.transaction_id; cmd->subscr = subscr_get(subscr); /* FIXME: No predefined value for this response_timer as specified by @@ -588,7 +586,6 @@ osmo_timer_setup(&cmd->response_timer, smpp_deliver_sm_cb, cmd); osmo_timer_schedule(&cmd->response_timer, 5, 0); llist_add_tail(&cmd->list, &esme->smpp_cmd_list); - *deferred = true; return 0; } @@ -606,8 +603,7 @@ } static int deliver_to_esme(struct osmo_esme *esme, struct gsm_sms *sms, - struct gsm_subscriber_connection *conn, - bool *deferred) + struct gsm_subscriber_connection *conn) { struct deliver_sm_t deliver; int mode, ret; @@ -686,7 +682,7 @@ return ret; return smpp_cmd_enqueue(esme, conn->subscr, sms, - deliver.sequence_number, deferred); + deliver.sequence_number); } static struct smsc *g_smsc; @@ -697,7 +693,7 @@ } int smpp_try_deliver(struct gsm_sms *sms, -struct gsm_subscriber_connection *conn, bool *deferred) +struct gsm_subscriber_connection *conn) { struct osmo_esme *esme; struct osmo_smpp_addr dst; @@ -710,7 +706,7 @@ rc = smpp_route(g_smsc, &dst, &esme); if (!rc) - rc = deliver_to_esme(esme, sms, conn, deferred); + rc = deliver_to_esme(esme, sms, conn); return rc; } diff --git a/openbsc/src/libmsc/smpp_smsc.h b/openbsc/src/libmsc/smpp_smsc.h index c9209ef..468d3b4 100644 --- a/openbsc/src/libmsc/smpp_smsc.h +++ b/openbsc/src/libmsc/smpp_smsc.h @@ -89,8 +89,9 @@ struct osmo_smpp_cmd { struct llist_head list; struct gsm_subscriber *subscr; - struct gsm_sms *sms; uint32_tsequence_nr; + uint32_tgsm411_msg_ref; + uint8_t gsm411_trans_id; struct osmo_timer_list response_timer; }; @@ -161,5 +162,5 @@ int smpp_route_smpp_first(struct gsm_sms *sms, struct gsm_subscriber_connection *conn); int smpp_try_deliver(struct gsm_sms *sms, -struct gsm_subscriber_connection *conn, bool *deferred); +struct gsm_subscriber_connection *conn); #endif -- To view, visit https://gerrit.osmocom.org/3426 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iba5f864f9bb963baff95969e306b1b7cff00c1e3 Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso
[PATCH] openbsc[master]: gsm_04_11: get rid of unused parameter in sms_route_mt_sms()
Review at https://gerrit.osmocom.org/3422 gsm_04_11: get rid of unused parameter in sms_route_mt_sms() This parameter is unused, remove it. Change-Id: I797abce3f91447e8f397c7cf726db7425479fe0e --- M openbsc/src/libmsc/gsm_04_11.c 1 file changed, 6 insertions(+), 5 deletions(-) git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/22/3422/1 diff --git a/openbsc/src/libmsc/gsm_04_11.c b/openbsc/src/libmsc/gsm_04_11.c index acf425a..da4460c 100644 --- a/openbsc/src/libmsc/gsm_04_11.c +++ b/openbsc/src/libmsc/gsm_04_11.c @@ -187,7 +187,7 @@ return gsm411_smc_send(&trans->sms.smc_inst, msg_type, msg); } -static int gsm340_rx_sms_submit(struct msgb *msg, struct gsm_sms *gsms) +static int gsm340_rx_sms_submit(struct gsm_sms *gsms) { if (db_sms_store(gsms) != 0) { LOGP(DLSMS, LOGL_ERROR, "Failed to store SMS in Database\n"); @@ -277,8 +277,9 @@ return msg->len - old_msg_len; } -int sms_route_mt_sms(struct gsm_subscriber_connection *conn, struct msgb *msg, -struct gsm_sms *gsms, uint8_t sms_mti, bool *deferred) +static int sms_route_mt_sms(struct gsm_subscriber_connection *conn, + struct gsm_sms *gsms, uint8_t sms_mti, + bool *deferred) { int rc; @@ -342,7 +343,7 @@ switch (sms_mti) { case GSM340_SMS_SUBMIT_MS2SC: /* MS is submitting a SMS */ - rc = gsm340_rx_sms_submit(msg, gsms); + rc = gsm340_rx_sms_submit(gsms); break; case GSM340_SMS_COMMAND_MS2SC: case GSM340_SMS_DELIVER_REP_MS2SC: @@ -487,7 +488,7 @@ /* FIXME: This looks very wrong */ send_signal(0, NULL, gsms, 0); - rc = sms_route_mt_sms(conn, msg, gsms, sms_mti, deferred); + rc = sms_route_mt_sms(conn, gsms, sms_mti, deferred); out: if (!deferred) sms_free(gsms); -- To view, visit https://gerrit.osmocom.org/3422 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I797abce3f91447e8f397c7cf726db7425479fe0e Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso
[PATCH] openbsc[master]: libmsc: report status report request flag from SMPP SUBMIT_SM
Review at https://gerrit.osmocom.org/3429 libmsc: report status report request flag from SMPP SUBMIT_SM Restore the sms status report request flag from SUBMIT_SM. Change-Id: Iac05252253f8933a3875b4904599b7a225191a4b --- M openbsc/src/libmsc/smpp_openbsc.c 1 file changed, 1 insertion(+), 0 deletions(-) git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/29/3429/1 diff --git a/openbsc/src/libmsc/smpp_openbsc.c b/openbsc/src/libmsc/smpp_openbsc.c index cf78676..a803763 100644 --- a/openbsc/src/libmsc/smpp_openbsc.c +++ b/openbsc/src/libmsc/smpp_openbsc.c @@ -129,6 +129,7 @@ sms = sms_alloc(); sms->source = SMS_SOURCE_SMPP; sms->smpp.sequence_nr = submit->sequence_number; + sms->status_rep_req = submit->registered_delivery; /* fill in the destination address */ sms->receiver = dest; -- To view, visit https://gerrit.osmocom.org/3429 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iac05252253f8933a3875b4904599b7a225191a4b Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso
[PATCH] openbsc[master]: libmsc: remove duplicate lines in deliver_to_esme()
Review at https://gerrit.osmocom.org/3425 libmsc: remove duplicate lines in deliver_to_esme() This code is accidentally doing the same thing twice, remove it. Change-Id: I68087a850399e22951d2407e4d8a09c671a775c9 --- M openbsc/src/libmsc/smpp_openbsc.c 1 file changed, 0 insertions(+), 2 deletions(-) git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/25/3425/1 diff --git a/openbsc/src/libmsc/smpp_openbsc.c b/openbsc/src/libmsc/smpp_openbsc.c index 36ad0a2..c9379ec 100644 --- a/openbsc/src/libmsc/smpp_openbsc.c +++ b/openbsc/src/libmsc/smpp_openbsc.c @@ -676,8 +676,6 @@ } else { deliver.sm_length = sms->user_data_len; memcpy(deliver.short_message, sms->user_data, deliver.sm_length); - deliver.sm_length = sms->user_data_len; - memcpy(deliver.short_message, sms->user_data, deliver.sm_length); } if (esme->acl && esme->acl->osmocom_ext && conn->lchan) -- To view, visit https://gerrit.osmocom.org/3425 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I68087a850399e22951d2407e4d8a09c671a775c9 Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso
[PATCH] openbsc[master]: libmsc: move gsm340_rx_sms_submit() to sms_route_mt_sms()
Review at https://gerrit.osmocom.org/3427 libmsc: move gsm340_rx_sms_submit() to sms_route_mt_sms() Move the sms message-type-identifier (mti) handling away from the routing logic. This patch allows us to reuse the sms_route_mt_sms() function in a follow up patch for sms reports send through SMPP DELIVER_SM with esm_class = Delivery Receipt. Change-Id: I3f3d30e0762b91e2099243b0be1a4b67cbb5e9c0 --- M openbsc/src/libmsc/gsm_04_11.c 1 file changed, 22 insertions(+), 19 deletions(-) git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/27/3427/1 diff --git a/openbsc/src/libmsc/gsm_04_11.c b/openbsc/src/libmsc/gsm_04_11.c index d60de08..7294153 100644 --- a/openbsc/src/libmsc/gsm_04_11.c +++ b/openbsc/src/libmsc/gsm_04_11.c @@ -278,7 +278,7 @@ } static int sms_route_mt_sms(struct gsm_subscriber_connection *conn, - struct gsm_sms *gsms, uint8_t sms_mti) + struct gsm_sms *gsms) { int rc; @@ -336,23 +336,6 @@ rc = GSM411_RP_CAUSE_MO_NUM_UNASSIGNED; rate_ctr_inc(&conn->network->msc_ctrs->ctr[MSC_CTR_SMS_NO_RECEIVER]); #endif - return rc; - } - - switch (sms_mti) { - case GSM340_SMS_SUBMIT_MS2SC: - /* MS is submitting a SMS */ - rc = gsm340_rx_sms_submit(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; } return rc; @@ -484,7 +467,27 @@ /* FIXME: This looks very wrong */ send_signal(0, NULL, gsms, 0); - rc = sms_route_mt_sms(conn, gsms, sms_mti); + rc = sms_route_mt_sms(conn, gsms); + + /* This SMS got routed through SMPP or no receiver exists. */ + if (!gsms->receiver) + return rc; + + switch (sms_mti) { + case GSM340_SMS_SUBMIT_MS2SC: + /* MS is submitting a SMS */ + rc = gsm340_rx_sms_submit(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; + } out: sms_free(gsms); -- To view, visit https://gerrit.osmocom.org/3427 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I3f3d30e0762b91e2099243b0be1a4b67cbb5e9c0 Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso
[PATCH] openbsc[master]: libmsc: set registered_delivery field in SMPP 3.4 DELIVER_SM...
Review at https://gerrit.osmocom.org/3428 libmsc: set registered_delivery field in SMPP 3.4 DELIVER_SM messages Propagate the status report request field to the SMPP message through the registered_delivery field, so the ESME knows that the mobile phone is asking for explicit delivery acknowledgment is required. See SMPP 3.4 specs section 5.2.17. Change-Id: I59af60fa89cd10ae973c5e122789e3e03e3728ee --- M openbsc/src/libmsc/smpp_openbsc.c 1 file changed, 8 insertions(+), 1 deletion(-) git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/28/3428/1 diff --git a/openbsc/src/libmsc/smpp_openbsc.c b/openbsc/src/libmsc/smpp_openbsc.c index 6b89df2..cf78676 100644 --- a/openbsc/src/libmsc/smpp_openbsc.c +++ b/openbsc/src/libmsc/smpp_openbsc.c @@ -602,6 +602,10 @@ return NULL; } +/* See SMPP 3.4, Section 5.2.17. registered_delivery (1 byte field). */ +#define SMPP34_NO_DELIVERY_RECEIPT 0x0 +#define SMPP34_DELIVERY_RECEIPT_REQ0x1 + static int deliver_to_esme(struct osmo_esme *esme, struct gsm_sms *sms, struct gsm_subscriber_connection *conn) { @@ -642,7 +646,10 @@ deliver.protocol_id = sms->protocol_id; deliver.priority_flag = 0; - deliver.registered_delivery = 0; + if (sms->status_rep_req) + deliver.registered_delivery = SMPP34_DELIVERY_RECEIPT_REQ; + else + deliver.registered_delivery = SMPP34_NO_DELIVERY_RECEIPT; /* Figure out SMPP DCS from TP-DCS */ dcs = sms->data_coding_scheme; -- To view, visit https://gerrit.osmocom.org/3428 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I59af60fa89cd10ae973c5e122789e3e03e3728ee Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso
[PATCH] openbsc[master]: libmsc: handle delivery ack via SMPP SUBMIT SM / send GSM 03...
Review at https://gerrit.osmocom.org/3437 libmsc: handle delivery ack via SMPP SUBMIT SM / send GSM 03.40 status report This patch adds gsm340_sms_send_status_report_tpdu() to build a status-report. Moreover, set sms->report field if we see a SMPP SUBMIT_SM with Delivery Acknowledgment esm_class, so this identifies that this is a delivery report. MSGSM 03.40 SMSC SMPP 3.4 ESME | || | | SUBMIT-SM| | |esm_class = Delivery Ack| | |<---| | | SUBMIT-SM-RESP | | |--->| | || | SMS-STATUS-REPORT || |<|| | GSM 04.11 RP-ACK|| |>|| | || There is a FIXME message in this patch, that I just copied from gsm340_gen_sms_deliver_tpdu() since TP-MMS is not supported by OpenBSC. Change-Id: Ib70e534840308ed315f7add440351e649de3f907 --- M openbsc/src/libmsc/gsm_04_11.c M openbsc/src/libmsc/smpp_openbsc.c 2 files changed, 54 insertions(+), 2 deletions(-) git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/37/3437/1 diff --git a/openbsc/src/libmsc/gsm_04_11.c b/openbsc/src/libmsc/gsm_04_11.c index ea80860..a2e002e 100644 --- a/openbsc/src/libmsc/gsm_04_11.c +++ b/openbsc/src/libmsc/gsm_04_11.c @@ -277,6 +277,49 @@ return msg->len - old_msg_len; } +/* As defined by GSM 03.40, Section 9.2.2.3. */ +static int gsm340_gen_sms_status_report_tpdu(struct msgb *msg, +struct gsm_sms *sms) +{ + unsigned int old_msg_len = msg->len; + uint8_t oa_len = 0; + uint8_t oa[12]; /* max len per 03.40 */ + uint8_t *smsp; + + /* generate first octet with masked bits */ + smsp = msgb_put(msg, 1); + /* TP-MTI (message type indicator) */ + *smsp = GSM340_SMS_STATUS_REP_SC2MS; + /* TP-MMS (more messages to send) */ + if (0 /* FIXME */) + *smsp |= 0x04; + /* TP-MR (message reference) */ + smsp = msgb_put(msg, 1); + *smsp = sms->msg_ref; + /* generate recipient address */ + oa_len = gsm340_gen_oa_sub(oa, sizeof(oa), &sms->dst); + smsp = msgb_put(msg, oa_len); + memcpy(smsp, oa, oa_len); + + /* generate TP-SCTS (Service centre timestamp) */ + smsp = msgb_put(msg, 7); + gsm340_gen_scts(smsp, time(NULL)); + + /* generate TP-DT (Discharge time, in TP-SCTS format). */ + smsp = msgb_put(msg, 7); + gsm340_gen_scts(smsp, time(NULL)); + + /* TP-ST (status) */ + smsp = msgb_put(msg, 1); + /* From GSM 03.40, Section 9.2.3.15, 0x00 means OK. */ + *smsp = 0x00; + + LOGP(DLSMS, LOGL_INFO, "sending status report for SMS reference %x\n", +sms->msg_ref); + + return msg->len - old_msg_len; +} + static int sms_route_mt_sms(struct gsm_subscriber_connection *conn, struct gsm_sms *gsms) { @@ -992,8 +1035,13 @@ /* obtain a pointer for the rp_ud_len, so we can fill it later */ rp_ud_len = (uint8_t *)msgb_put(msg, 1); - /* generate the 03.40 SMS-DELIVER TPDU */ - rc = gsm340_gen_sms_deliver_tpdu(msg, sms); + if (sms->report) { + /* generate the 03.40 SMS-STATUS-REPORT TPDU */ + rc = gsm340_gen_sms_status_report_tpdu(msg, sms); + } else { + /* generate the 03.40 SMS-DELIVER TPDU */ + rc = gsm340_gen_sms_deliver_tpdu(msg, sms); + } if (rc < 0) { send_signal(S_SMS_UNKNOWN_ERROR, trans, sms, 0); sms_free(sms); diff --git a/openbsc/src/libmsc/smpp_openbsc.c b/openbsc/src/libmsc/smpp_openbsc.c index 42357e2..32ad30e 100644 --- a/openbsc/src/libmsc/smpp_openbsc.c +++ b/openbsc/src/libmsc/smpp_openbsc.c @@ -143,6 +143,10 @@ osmo_strlcpy(sms->src.addr, (char *)submit->source_addr, sizeof(sms->src.addr)); + /* This is a Delivery Acknowledgment. */ + if (submit->esm_class == 0x08) + sms->report = true; + if (submit->esm_class & 0x40) sms->ud_hdr_ind = 1; -- To view, visit https://gerrit.osmocom.org/3437 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ib70e534840308ed315f7add440351e649de3f907 Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso
[PATCH] openbsc[master]: libmsc: add support for SMPP delivery receipts
0 @@ sms->user_data_len = sms_msg_len; } + t = find_tlv(submit->tlv, TLVID_user_message_reference); + if (t) + sms->msg_ref = ntohs(t->value.val16); + *psms = sms; return ESME_ROK; } @@ -514,6 +518,13 @@ struct gsm_subscriber_connection *conn; struct gsm_trans *trans; + /* We got a DELIVER_SM response for this is status report, this was +* initiated by the SMSC, so no need to send any RP-ACK to the mobile +* station. +*/ + if (cmd->report) + goto out; + conn = connection_for_subscr(cmd->subscr); if (!conn) { LOGP(DSMPP, LOGL_ERROR, "No connection to subscriber anymore\n"); @@ -537,6 +548,9 @@ struct gsm_subscriber_connection *conn; struct gsm_trans *trans; int gsm411_cause; + + if (cmd->report) + goto out; conn = connection_for_subscr(cmd->subscr); if (!conn) { @@ -575,6 +589,7 @@ return -1; cmd->sequence_nr= sequence_number; + cmd->report = sms->report; cmd->gsm411_msg_ref = sms->gsm411.msg_ref; cmd->gsm411_trans_id= sms->gsm411.transaction_id; cmd->subscr = subscr_get(subscr); @@ -639,7 +654,12 @@ memcpy(deliver.destination_addr, sms->dst.addr, sizeof(deliver.destination_addr)); - deliver.esm_class = 1;/* datagram mode */ + /* Short message contains a delivery receipt? Sect. 5.2.12. */ + if (sms->report) + deliver.esm_class = 0x04; + else + deliver.esm_class = 1; /* datagram mode */ + if (sms->ud_hdr_ind) deliver.esm_class |= 0x40; if (sms->reply_path_req) @@ -685,6 +705,9 @@ if (esme->acl && esme->acl->osmocom_ext && conn->lchan) append_osmo_tlvs(&deliver.tlv, conn->lchan); + append_tlv_u16(&deliver.tlv, TLVID_user_message_reference, + sms->msg_ref); + ret = smpp_tx_deliver(esme, &deliver); if (ret < 0) return ret; diff --git a/openbsc/src/libmsc/smpp_smsc.h b/openbsc/src/libmsc/smpp_smsc.h index 468d3b4..854d048 100644 --- a/openbsc/src/libmsc/smpp_smsc.h +++ b/openbsc/src/libmsc/smpp_smsc.h @@ -92,6 +92,7 @@ uint32_tsequence_nr; uint32_tgsm411_msg_ref; uint8_t gsm411_trans_id; + boolreport; struct osmo_timer_list response_timer; }; -- To view, visit https://gerrit.osmocom.org/3434 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ic1a9023074bfa938099377980b6aff9b262fab2a Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso
[PATCH] openbsc[master]: libmsc: missing bit shift in status report flag when stored ...
Review at https://gerrit.osmocom.org/3430 libmsc: missing bit shift in status report flag when stored in sms object So we just store 0 or 1 depending on what the mobile phone requests. Change-Id: Idb7d5594219c0e458ccb561383a59604bc1a4201 --- M openbsc/src/libmsc/gsm_04_11.c 1 file changed, 1 insertion(+), 1 deletion(-) git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/30/3430/1 diff --git a/openbsc/src/libmsc/gsm_04_11.c b/openbsc/src/libmsc/gsm_04_11.c index 7294153..1aed60e 100644 --- a/openbsc/src/libmsc/gsm_04_11.c +++ b/openbsc/src/libmsc/gsm_04_11.c @@ -366,7 +366,7 @@ /* invert those fields where 0 means active/present */ sms_mti = *smsp & 0x03; sms_vpf = (*smsp & 0x18) >> 3; - gsms->status_rep_req = (*smsp & 0x20); + gsms->status_rep_req = (*smsp & 0x20) >> 5; gsms->ud_hdr_ind = (*smsp & 0x40); /* * Not evaluating MMS (More Messages to Send) because the -- To view, visit https://gerrit.osmocom.org/3430 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Idb7d5594219c0e458ccb561383a59604bc1a4201 Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso
[PATCH] openbsc[master]: utils: smpp_mirror: bounce Delivery Receipts as Delivery Ack...
Review at https://gerrit.osmocom.org/3436 utils: smpp_mirror: bounce Delivery Receipts as Delivery Acknowledgments Simple patch to test the new status-report support. Change-Id: I877e228d8e174430f700631edbf9955972da7892 --- M openbsc/src/utils/smpp_mirror.c 1 file changed, 8 insertions(+), 9 deletions(-) git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/36/3436/1 diff --git a/openbsc/src/utils/smpp_mirror.c b/openbsc/src/utils/smpp_mirror.c index 88545de..0b04b24 100644 --- a/openbsc/src/utils/smpp_mirror.c +++ b/openbsc/src/utils/smpp_mirror.c @@ -123,14 +123,6 @@ PACK_AND_SEND(esme, &deliver_r); - /* This is a delivery receipt, temporarily munch it until we teach -* openbsc what to do with this. -*/ - if (deliver.esm_class == 0x04) { - LOGP(DSMPP, LOGL_NOTICE, "%s\n", deliver.short_message); - return 0; - } - memset(&submit, 0, sizeof(submit)); submit.command_id = SUBMIT_SM; submit.command_status = ESME_ROK; @@ -148,7 +140,14 @@ OSMO_MIN(sizeof(submit.source_addr), sizeof(deliver.destination_addr))); - submit.esm_class = deliver.esm_class; + /* Mirror delivery receipts as a delivery acknowledgements. */ + if (deliver.esm_class == 0x04) { + LOGP(DSMPP, LOGL_NOTICE, "%s\n", deliver.short_message); + submit.esm_class = 0x08; + } else { + submit.esm_class = deliver.esm_class; + } + submit.registered_delivery = deliver.registered_delivery; submit.protocol_id = deliver.protocol_id; submit.priority_flag = deliver.priority_flag; -- To view, visit https://gerrit.osmocom.org/3436 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I877e228d8e174430f700631edbf9955972da7892 Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso
[PATCH] openbsc[master]: libmsc: support GSM 03.40 status report for nitb
Review at https://gerrit.osmocom.org/3438 libmsc: support GSM 03.40 status report for nitb This patch adds support for GSM 03.40 in nitb mode. MS GSM 03.40 SMSC || | SMS-SUBMIT | |--->| | GSM 04.11 RP-ACK | |<---| | SMS-DELIVER| |<---| | GSM 04.11 RP-ACK | |--->| | SMS-STATUS-REPORT | |<---| | GSM 04.11 RP-ACK | |--->| || Change-Id: I5cc7bb4ebadde0940f44d10c3df34707b0615160 --- M openbsc/src/libmsc/gsm_04_11.c 1 file changed, 4 insertions(+), 0 deletions(-) git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/38/3438/1 diff --git a/openbsc/src/libmsc/gsm_04_11.c b/openbsc/src/libmsc/gsm_04_11.c index a2e002e..13d7d1c 100644 --- a/openbsc/src/libmsc/gsm_04_11.c +++ b/openbsc/src/libmsc/gsm_04_11.c @@ -687,6 +687,10 @@ } LOGP(DLSMS, LOGL_NOTICE, "Status report has been sent\n"); + /* No route via SMPP, send the GSM 03.40 status-report now. */ + if (gsms->receiver) + gsm340_rx_sms_submit(sms_report); + sms_free(sms_report); } -- To view, visit https://gerrit.osmocom.org/3438 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I5cc7bb4ebadde0940f44d10c3df34707b0615160 Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso
[PATCH] openbsc[master]: utils: smpp_mirror: temporarily munch SMPP delivery receipts
Review at https://gerrit.osmocom.org/3432 utils: smpp_mirror: temporarily munch SMPP delivery receipts Just munch and log SMPP delivery receipts by now, don't mirror this, it is going to break things in openbsc. Follow up patch removes this and mirrors this SMPP message as a SUBMIT_SM with esm_class = Delivery Acknowledgement. Change-Id: I78e93bc4034679e238c8642ccf6a0e844b1d6d8b --- M openbsc/src/utils/smpp_mirror.c 1 file changed, 8 insertions(+), 0 deletions(-) git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/32/3432/1 diff --git a/openbsc/src/utils/smpp_mirror.c b/openbsc/src/utils/smpp_mirror.c index ec28f0a..edb40b5 100644 --- a/openbsc/src/utils/smpp_mirror.c +++ b/openbsc/src/utils/smpp_mirror.c @@ -112,6 +112,14 @@ PACK_AND_SEND(esme, &deliver_r); + /* This is a delivery receipt, temporarily munch it until we teach +* openbsc what to do with this. +*/ + if (deliver.esm_class == 0x04) { + LOGP(DSMPP, LOGL_NOTICE, "%s\n", deliver.short_message); + return 0; + } + memset(&submit, 0, sizeof(submit)); submit.command_id = SUBMIT_SM; submit.command_status = ESME_ROK; -- To view, visit https://gerrit.osmocom.org/3432 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I78e93bc4034679e238c8642ccf6a0e844b1d6d8b Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso
[PATCH] openbsc[master]: utils: smpp_mirror: reflect message reference TLV
Review at https://gerrit.osmocom.org/3433 utils: smpp_mirror: reflect message reference TLV Useful to test the delivery receipt support. This TLV contains the GSM03.40 message reference. Change-Id: I1b0abaa7e06ffe1bd2242c70813d8b70e9fa954f --- M openbsc/src/utils/smpp_mirror.c 1 file changed, 23 insertions(+), 1 deletion(-) git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/33/3433/1 diff --git a/openbsc/src/utils/smpp_mirror.c b/openbsc/src/utils/smpp_mirror.c index edb40b5..88545de 100644 --- a/openbsc/src/utils/smpp_mirror.c +++ b/openbsc/src/utils/smpp_mirror.c @@ -95,12 +95,23 @@ } /* FIXME: merge with smpp_smsc.c */ +static struct tlv_t *find_tlv(struct tlv_t *head, uint16_t tag) +{ + struct tlv_t *t; + + for (t = head; t != NULL; t = t->next) { + if (t->tag == tag) + return t; + } + return NULL; +} static int smpp_handle_deliver(struct esme *esme, struct msgb *msg) { struct deliver_sm_t deliver; struct deliver_sm_resp_t deliver_r; struct submit_sm_t submit; + tlv_t *t; int rc; memset(&deliver, 0, sizeof(deliver)); @@ -155,7 +166,18 @@ memcpy(submit.short_message, deliver.short_message, OSMO_MIN(sizeof(submit.short_message), sizeof(deliver.short_message))); - /* FIXME: TLV? */ + + /* FIXME: More TLV? */ + t = find_tlv(deliver.tlv, TLVID_user_message_reference); + if (t) { + tlv_t tlv; + + memset(&tlv, 0, sizeof(tlv)); + tlv.tag = TLVID_user_message_reference; + tlv.length = 2; + tlv.value.val16 = t->value.val16; + build_tlv(&submit.tlv, &tlv); + } return PACK_AND_SEND(esme, &submit); } -- To view, visit https://gerrit.osmocom.org/3433 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I1b0abaa7e06ffe1bd2242c70813d8b70e9fa954f Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso
[PATCH] openbsc[master]: libmsc: update database to accomodate SMS status-report fields
, sms->src.ton, sms->src.npi); @@ -1489,6 +1643,8 @@ /* FIXME: those should all be get_uchar, but sqlite3 is braindead */ sms->reply_path_req = dbi_result_get_ulonglong(result, "reply_path_req"); sms->status_rep_req = dbi_result_get_ulonglong(result, "status_rep_req"); + sms->report = dbi_result_get_ulonglong(result, "report"); + sms->msg_ref = dbi_result_get_ulonglong(result, "msg_ref"); sms->ud_hdr_ind = dbi_result_get_ulonglong(result, "ud_hdr_ind"); sms->protocol_id = dbi_result_get_ulonglong(result, "protocol_id"); sms->data_coding_scheme = dbi_result_get_ulonglong(result, -- To view, visit https://gerrit.osmocom.org/3435 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I7276d356d805a83ebeec72b02c8563b7135ea0b6 Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso
openbsc[master]: libmsc: report status report request flag from SMPP SUBMIT_SM
Patch Set 1: (1 comment) https://gerrit.osmocom.org/#/c/3429/1//COMMIT_MSG Commit Message: Line 9: Restore the sms status report request flag from SUBMIT_SM. > what's the difference in behavior before and after this patch? Without this patch, the status report request flag is not accordingly propagated from the ESME. Given all sms are routed via SMPP/ESME, if we don't set this flag when submitting it back to the SMSC, the SMSC generates not Delivery Receipt. -- To view, visit https://gerrit.osmocom.org/3429 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: Iac05252253f8933a3875b4904599b7a225191a4b Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-HasComments: Yes
openbsc[master]: libmsc: set registered_delivery field in SMPP 3.4 DELIVER_SM...
Patch Set 1: (1 comment) https://gerrit.osmocom.org/#/c/3428/1/openbsc/src/libmsc/smpp_openbsc.c File openbsc/src/libmsc/smpp_openbsc.c: Line 607: #define SMPP34_DELIVERY_RECEIPT_REQ 0x1 > (we tend to use enums instead) OK, I didn't know about this policy. I have a few more cleanup patches here after this, I can include such change in the next batch if this is not a major showstopper? This would block the entire series... Let me know, thanks for reviewing! -- To view, visit https://gerrit.osmocom.org/3428 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I59af60fa89cd10ae973c5e122789e3e03e3728ee Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-HasComments: Yes
[PATCH] openbsc[master]: libmsc: move gsm340_rx_sms_submit() to sms_route_mt_sms()
Hello Jenkins Builder, I'd like you to reexamine a change. Please visit https://gerrit.osmocom.org/3427 to look at the new patch set (#2). libmsc: move gsm340_rx_sms_submit() to sms_route_mt_sms() Move the sms message-type-identifier (mti) handling away from the routing logic. This patch allows us to reuse the sms_route_mt_sms() function in a follow up patch for sms reports send through SMPP DELIVER_SM with esm_class = Delivery Receipt whose Change-Id is Ic1a9023074bfa938099377980b6aff9b262fab2a. Change-Id: I3f3d30e0762b91e2099243b0be1a4b67cbb5e9c0 --- M openbsc/src/libmsc/gsm_04_11.c 1 file changed, 22 insertions(+), 19 deletions(-) git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/27/3427/2 diff --git a/openbsc/src/libmsc/gsm_04_11.c b/openbsc/src/libmsc/gsm_04_11.c index d60de08..7294153 100644 --- a/openbsc/src/libmsc/gsm_04_11.c +++ b/openbsc/src/libmsc/gsm_04_11.c @@ -278,7 +278,7 @@ } static int sms_route_mt_sms(struct gsm_subscriber_connection *conn, - struct gsm_sms *gsms, uint8_t sms_mti) + struct gsm_sms *gsms) { int rc; @@ -336,23 +336,6 @@ rc = GSM411_RP_CAUSE_MO_NUM_UNASSIGNED; rate_ctr_inc(&conn->network->msc_ctrs->ctr[MSC_CTR_SMS_NO_RECEIVER]); #endif - return rc; - } - - switch (sms_mti) { - case GSM340_SMS_SUBMIT_MS2SC: - /* MS is submitting a SMS */ - rc = gsm340_rx_sms_submit(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; } return rc; @@ -484,7 +467,27 @@ /* FIXME: This looks very wrong */ send_signal(0, NULL, gsms, 0); - rc = sms_route_mt_sms(conn, gsms, sms_mti); + rc = sms_route_mt_sms(conn, gsms); + + /* This SMS got routed through SMPP or no receiver exists. */ + if (!gsms->receiver) + return rc; + + switch (sms_mti) { + case GSM340_SMS_SUBMIT_MS2SC: + /* MS is submitting a SMS */ + rc = gsm340_rx_sms_submit(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; + } out: sms_free(gsms); -- To view, visit https://gerrit.osmocom.org/3427 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: I3f3d30e0762b91e2099243b0be1a4b67cbb5e9c0 Gerrit-PatchSet: 2 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr
[PATCH] openbsc[master]: libmsc: report status report request flag from SMPP SUBMIT_SM
Hello Jenkins Builder, I'd like you to reexamine a change. Please visit https://gerrit.osmocom.org/3429 to look at the new patch set (#2). libmsc: report status report request flag from SMPP SUBMIT_SM Restore the sms status report request flag from SUBMIT_SM. Without this patch, the status report request flag is not accordingly propagated from the ESME. Given all sms are routed via SMPP/ESME, if we don't set this flag when submitting it back to the SMSC, the SMSC generates not Delivery Receipt. Change-Id: Iac05252253f8933a3875b4904599b7a225191a4b --- M openbsc/src/libmsc/smpp_openbsc.c 1 file changed, 1 insertion(+), 0 deletions(-) git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/29/3429/2 diff --git a/openbsc/src/libmsc/smpp_openbsc.c b/openbsc/src/libmsc/smpp_openbsc.c index cf78676..a803763 100644 --- a/openbsc/src/libmsc/smpp_openbsc.c +++ b/openbsc/src/libmsc/smpp_openbsc.c @@ -129,6 +129,7 @@ sms = sms_alloc(); sms->source = SMS_SOURCE_SMPP; sms->smpp.sequence_nr = submit->sequence_number; + sms->status_rep_req = submit->registered_delivery; /* fill in the destination address */ sms->receiver = dest; -- To view, visit https://gerrit.osmocom.org/3429 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: Iac05252253f8933a3875b4904599b7a225191a4b Gerrit-PatchSet: 2 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso
openbsc[master]: libmsc: support GSM 03.40 status report for nitb
Patch Set 1: (1 comment) https://gerrit.osmocom.org/#/c/3438/1/openbsc/src/libmsc/gsm_04_11.c File openbsc/src/libmsc/gsm_04_11.c: Line 692: gsm340_rx_sms_submit(sms_report); > code cosmetics: I see from the old sms_route_mt_sms() that it looks correct I'm going to try to address all your concerns in one go. With SMPP support, we're getting this from the SMPP SUBMIT_SM, so there is no mti here. In nitb mode, the sms_report object is created from the original sms that we get from the mobile station. I don't think the old switch(mti) belong sms_route_mt_sms(). I don't see where the name "sms_route_mt_sms()" suggests it has been already sent :-), we can probably rename this to simply sms_route() given that no mti handling happens anymore. I agree the log could be moved after the gsms->receiver branch, it would be more intuitive, yes. Anyway, this code runs inconditionally, so from the logging perspective, this would be printed in the right. Regarding the gsm->receiver indicator, the SMSC handles both SMPP and nitb modes. With SMPP there is no receiver, we really don't know since it's the ESME the one routing all SMS. We can probably wrap this in some simple: static inline bool sms_has_route(struct gsm_sms *sms) { return gsm->receiver; } Thanks for your fast review! -- To view, visit https://gerrit.osmocom.org/3438 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I5cc7bb4ebadde0940f44d10c3df34707b0615160 Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-HasComments: Yes
openbsc[master]: gsm_04_11: get rid of unused parameter in sms_route_mt_sms()
Patch Set 1: This is DEAD code, just consuming more CPU cycles on something we don't need. We can restore this once you need it ;-) Thanks! -- To view, visit https://gerrit.osmocom.org/3422 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I797abce3f91447e8f397c7cf726db7425479fe0e Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-HasComments: No
[PATCH] openbsc[master]: utils: smpp_mirror: bounce Delivery Receipts as Delivery Ack...
utils: smpp_mirror: bounce Delivery Receipts as Delivery Acknowledgments Simple patch to test the new status-report support. Change-Id: I877e228d8e174430f700631edbf9955972da7892 --- M openbsc/src/utils/smpp_mirror.c 1 file changed, 8 insertions(+), 9 deletions(-) git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/36/3436/2 diff --git a/openbsc/src/utils/smpp_mirror.c b/openbsc/src/utils/smpp_mirror.c index 88545de..c570505 100644 --- a/openbsc/src/utils/smpp_mirror.c +++ b/openbsc/src/utils/smpp_mirror.c @@ -123,14 +123,6 @@ PACK_AND_SEND(esme, &deliver_r); - /* This is a delivery receipt, temporarily munch it until we teach -* openbsc what to do with this. -*/ - if (deliver.esm_class == 0x04) { - LOGP(DSMPP, LOGL_NOTICE, "%s\n", deliver.short_message); - return 0; - } - memset(&submit, 0, sizeof(submit)); submit.command_id = SUBMIT_SM; submit.command_status = ESME_ROK; @@ -148,7 +140,14 @@ OSMO_MIN(sizeof(submit.source_addr), sizeof(deliver.destination_addr))); - submit.esm_class = deliver.esm_class; + /* Mirror delivery receipts as a delivery acknowledgements. */ + if (deliver.esm_class == 0x04) { + LOGP(DSMPP, LOGL_DEBUG, "%s\n", deliver.short_message); + submit.esm_class = 0x08; + } else { + submit.esm_class = deliver.esm_class; + } + submit.registered_delivery = deliver.registered_delivery; submit.protocol_id = deliver.protocol_id; submit.priority_flag = deliver.priority_flag; -- To view, visit https://gerrit.osmocom.org/3436 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: I877e228d8e174430f700631edbf9955972da7892 Gerrit-PatchSet: 2 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr
openbsc[master]: libmsc: add support for SMPP delivery receipts
Patch Set 1: (5 comments) https://gerrit.osmocom.org/#/c/3434/1/openbsc/src/libmsc/gsm_04_11.c File openbsc/src/libmsc/gsm_04_11.c: Line 637: if (!sms_report) > log error, or maybe OSMO_ASSERT(sms_report)? Is there anything the user can do after this error? Why bother? I mean, you only hit this is there is not memory left... So likely there is a leak. OSMO_ASSERT() would stop openBSC from running, is that getting this any better? This sounds like calling BUG() in the kernel. So what do we get from spamming the user with an error that *only* happens if we have no memory left? https://gerrit.osmocom.org/#/c/3434/1/openbsc/src/libmsc/smpp_openbsc.c File openbsc/src/libmsc/smpp_openbsc.c: Line 521: /* We got a DELIVER_SM response for this is status report, this was > (hard to understand, fix typo/punctuation?) This is a reply to a DELIVER_SM with esm_class = Delivery Receipt, we're just having a conversation that was initiated by the SMSC. So we don't need to send any RP-ACK to the mobile, as we do with DELIVER_SM for a plan SMS. Line 659: deliver.esm_class = 0x04; > (would be nice to have constants instead of magic numbers ... but not relat I agree, this applies all over the place, but that would require a bit of work. Line 709: sms->msg_ref); > user message reference was always missing? maybe the fact that it is added Yes, message reference was always missing because there was no status-reports ;-). We can just add a branch here to skip this if saving bytes on the network are really a concern at the cost of slowing down the CPU path. https://gerrit.osmocom.org/#/c/3434/1/openbsc/src/libmsc/smpp_smsc.h File openbsc/src/libmsc/smpp_smsc.h: Line 95:boolreport; > (can be understood as "you should report" or "this is a report" ... would b This just annotates that the SMPP command that we send represents a deliver-report. -- To view, visit https://gerrit.osmocom.org/3434 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: Ic1a9023074bfa938099377980b6aff9b262fab2a Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-HasComments: Yes
openbsc[master]: utils: smpp_mirror: reflect message reference TLV
Patch Set 1: (1 comment) https://gerrit.osmocom.org/#/c/3433/1/openbsc/src/utils/smpp_mirror.c File openbsc/src/utils/smpp_mirror.c: Line 98: static struct tlv_t *find_tlv(struct tlv_t *head, uint16_t tag) > this is kind of on its own... could it use libosmocore gsm/tlv.h instead? B I think this belongs to the libsmpp library, since these are SMPP TLVs. There is more code in the openBSC tree that is related to SMPP that could be placed there too. -- To view, visit https://gerrit.osmocom.org/3433 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I1b0abaa7e06ffe1bd2242c70813d8b70e9fa954f Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-HasComments: Yes
[PATCH] openbsc[master]: libmsc: update database to accomodate SMS status-report fields
q_udata, q_text, q_daddr, sms->dst.ton, sms->dst.npi, q_saddr, sms->src.ton, sms->src.npi); @@ -1489,6 +1643,8 @@ /* FIXME: those should all be get_uchar, but sqlite3 is braindead */ sms->reply_path_req = dbi_result_get_ulonglong(result, "reply_path_req"); sms->status_rep_req = dbi_result_get_ulonglong(result, "status_rep_req"); + sms->report = dbi_result_get_ulonglong(result, "report"); + sms->msg_ref = dbi_result_get_ulonglong(result, "msg_ref"); sms->ud_hdr_ind = dbi_result_get_ulonglong(result, "ud_hdr_ind"); sms->protocol_id = dbi_result_get_ulonglong(result, "protocol_id"); sms->data_coding_scheme = dbi_result_get_ulonglong(result, -- To view, visit https://gerrit.osmocom.org/3435 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: I7276d356d805a83ebeec72b02c8563b7135ea0b6 Gerrit-PatchSet: 2 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr
[PATCH] openbsc[master]: libmsc: handle delivery ack via SMPP SUBMIT SM / send GSM 03...
tps://gerrit.osmocom.org/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: Ib70e534840308ed315f7add440351e649de3f907 Gerrit-PatchSet: 2 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr
[PATCH] openbsc[master]: libmsc: support GSM 03.40 status report for nitb
Hello Jenkins Builder, I'd like you to reexamine a change. Please visit https://gerrit.osmocom.org/3438 to look at the new patch set (#2). libmsc: support GSM 03.40 status report for nitb This patch adds support for GSM 03.40 in nitb mode. MS GSM 03.40 SMSC || | SMS-SUBMIT | |--->| | GSM 04.11 RP-ACK | |<---| | SMS-DELIVER| |<---| | GSM 04.11 RP-ACK | |--->| | SMS-STATUS-REPORT | |<---| | GSM 04.11 RP-ACK | |--->| || Change-Id: I5cc7bb4ebadde0940f44d10c3df34707b0615160 --- M openbsc/src/libmsc/gsm_04_11.c 1 file changed, 5 insertions(+), 0 deletions(-) git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/38/3438/2 diff --git a/openbsc/src/libmsc/gsm_04_11.c b/openbsc/src/libmsc/gsm_04_11.c index a2e002e..fa00907 100644 --- a/openbsc/src/libmsc/gsm_04_11.c +++ b/openbsc/src/libmsc/gsm_04_11.c @@ -685,6 +685,11 @@ LOGP(DLSMS, LOGL_ERROR, "Failed to send status report! err=%d\n", rc); } + + /* No route via SMPP, send the GSM 03.40 status-report now. */ + if (gsms->receiver) + gsm340_rx_sms_submit(sms_report); + LOGP(DLSMS, LOGL_NOTICE, "Status report has been sent\n"); sms_free(sms_report); -- To view, visit https://gerrit.osmocom.org/3438 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: I5cc7bb4ebadde0940f44d10c3df34707b0615160 Gerrit-PatchSet: 2 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso
openbsc[master]: gsm_04_11: get rid of unused parameter in sms_route_mt_sms()
Patch Set 1: I need to call gsm340_rx_sms_submit() in the last patch of this series, to add support for status-report in nitb mode. In such scenario, I have no real msgb object, since the struct gsm_sms object is allocated from the SMPP SUBMIT_SM esm_class = Delivery Acknoledgement. If this patch is kept back, I will have to pass a NULL pointer as parameter here when calling gsm340_rx_sms_submit() from the new sms_status_report() path. -- To view, visit https://gerrit.osmocom.org/3422 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I797abce3f91447e8f397c7cf726db7425479fe0e Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-HasComments: No
[MERGED] openbsc[master]: libmsc: do not leak pending SMPP command object on error path
Pablo Neira Ayuso has submitted this change and it was merged. Change subject: libmsc: do not leak pending SMPP command object on error path .. libmsc: do not leak pending SMPP command object on error path Make sure the SMPP command object is released on errors. Change-Id: I474584425d23fb379a9d71b33e29ac0e24f01e61 --- M openbsc/src/libmsc/smpp_openbsc.c 1 file changed, 6 insertions(+), 5 deletions(-) Approvals: Neels Hofmeyr: Looks good to me, approved Harald Welte: Looks good to me, approved Jenkins Builder: Verified diff --git a/openbsc/src/libmsc/smpp_openbsc.c b/openbsc/src/libmsc/smpp_openbsc.c index f7d1441..36ad0a2 100644 --- a/openbsc/src/libmsc/smpp_openbsc.c +++ b/openbsc/src/libmsc/smpp_openbsc.c @@ -517,7 +517,7 @@ conn = connection_for_subscr(cmd->subscr); if (!conn) { LOGP(DSMPP, LOGL_ERROR, "No connection to subscriber anymore\n"); - return; + goto out; } trans = trans_find_by_id(conn, GSM48_PDISC_SMS, @@ -525,10 +525,11 @@ if (!trans) { LOGP(DSMPP, LOGL_ERROR, "GSM transaction %u is gone\n", cmd->sms->gsm411.transaction_id); - return; + goto out; } gsm411_send_rp_ack(trans, cmd->sms->gsm411.msg_ref); +out: smpp_cmd_free(cmd); } @@ -541,7 +542,7 @@ conn = connection_for_subscr(cmd->subscr); if (!conn) { LOGP(DSMPP, LOGL_ERROR, "No connection to subscriber anymore\n"); - return; + goto out; } trans = trans_find_by_id(conn, GSM48_PDISC_SMS, @@ -549,14 +550,14 @@ if (!trans) { LOGP(DSMPP, LOGL_ERROR, "GSM transaction %u is gone\n", cmd->sms->gsm411.transaction_id); - return; + goto out; } if (smpp_to_gsm411_err(status, &gsm411_cause) < 0) gsm411_cause = GSM411_RP_CAUSE_MO_NET_OUT_OF_ORDER; gsm411_send_rp_error(trans, cmd->sms->gsm411.msg_ref, gsm411_cause); - +out: smpp_cmd_free(cmd); } -- To view, visit https://gerrit.osmocom.org/3423 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: merged Gerrit-Change-Id: I474584425d23fb379a9d71b33e29ac0e24f01e61 Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso
[MERGED] openbsc[master]: libmsc: remove dead code in sms_route_mt_sms()
Pablo Neira Ayuso has submitted this change and it was merged. Change subject: libmsc: remove dead code in sms_route_mt_sms() .. libmsc: remove dead code in sms_route_mt_sms() The following branch: if (!rc && !gsms->receiver) rc = GSM411_RP_CAUSE_MO_NUM_UNASSIGNED; at the end of sms_route_mt_sms() always evaluates false. Just a bit before, in such function, we have this: if (!gsms->receiver) { ... #ifdef BUILD_SMPP ... #else ... #endif return rc; } So, if there is no receiver, we just stop running code and return the RP cause via the rc variable. Same applies to the smpp_first check under the BUILD_SMPP ifdef (that I have removed in this snippet to keep this commit message small). Change-Id: Ic3502b5b169bc7a73a67fd6ff53d8b6c0dc045c8 --- M openbsc/src/libmsc/gsm_04_11.c 1 file changed, 0 insertions(+), 3 deletions(-) Approvals: Neels Hofmeyr: Looks good to me, approved Harald Welte: Looks good to me, approved Jenkins Builder: Verified diff --git a/openbsc/src/libmsc/gsm_04_11.c b/openbsc/src/libmsc/gsm_04_11.c index da4460c..7df5e64 100644 --- a/openbsc/src/libmsc/gsm_04_11.c +++ b/openbsc/src/libmsc/gsm_04_11.c @@ -356,9 +356,6 @@ break; } - if (!rc && !gsms->receiver) - rc = GSM411_RP_CAUSE_MO_NUM_UNASSIGNED; - return rc; } -- To view, visit https://gerrit.osmocom.org/3424 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: merged Gerrit-Change-Id: Ic3502b5b169bc7a73a67fd6ff53d8b6c0dc045c8 Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso
[MERGED] openbsc[master]: gsm_04_11: get rid of unused parameter in sms_route_mt_sms()
Pablo Neira Ayuso has submitted this change and it was merged. Change subject: gsm_04_11: get rid of unused parameter in sms_route_mt_sms() .. gsm_04_11: get rid of unused parameter in sms_route_mt_sms() This parameter is unused, remove it. Change-Id: I797abce3f91447e8f397c7cf726db7425479fe0e --- M openbsc/src/libmsc/gsm_04_11.c 1 file changed, 6 insertions(+), 5 deletions(-) Approvals: Neels Hofmeyr: Looks good to me, but someone else must approve Harald Welte: Looks good to me, approved Jenkins Builder: Verified diff --git a/openbsc/src/libmsc/gsm_04_11.c b/openbsc/src/libmsc/gsm_04_11.c index acf425a..da4460c 100644 --- a/openbsc/src/libmsc/gsm_04_11.c +++ b/openbsc/src/libmsc/gsm_04_11.c @@ -187,7 +187,7 @@ return gsm411_smc_send(&trans->sms.smc_inst, msg_type, msg); } -static int gsm340_rx_sms_submit(struct msgb *msg, struct gsm_sms *gsms) +static int gsm340_rx_sms_submit(struct gsm_sms *gsms) { if (db_sms_store(gsms) != 0) { LOGP(DLSMS, LOGL_ERROR, "Failed to store SMS in Database\n"); @@ -277,8 +277,9 @@ return msg->len - old_msg_len; } -int sms_route_mt_sms(struct gsm_subscriber_connection *conn, struct msgb *msg, -struct gsm_sms *gsms, uint8_t sms_mti, bool *deferred) +static int sms_route_mt_sms(struct gsm_subscriber_connection *conn, + struct gsm_sms *gsms, uint8_t sms_mti, + bool *deferred) { int rc; @@ -342,7 +343,7 @@ switch (sms_mti) { case GSM340_SMS_SUBMIT_MS2SC: /* MS is submitting a SMS */ - rc = gsm340_rx_sms_submit(msg, gsms); + rc = gsm340_rx_sms_submit(gsms); break; case GSM340_SMS_COMMAND_MS2SC: case GSM340_SMS_DELIVER_REP_MS2SC: @@ -487,7 +488,7 @@ /* FIXME: This looks very wrong */ send_signal(0, NULL, gsms, 0); - rc = sms_route_mt_sms(conn, msg, gsms, sms_mti, deferred); + rc = sms_route_mt_sms(conn, gsms, sms_mti, deferred); out: if (!deferred) sms_free(gsms); -- To view, visit https://gerrit.osmocom.org/3422 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: merged Gerrit-Change-Id: I797abce3f91447e8f397c7cf726db7425479fe0e Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso
[MERGED] openbsc[master]: libmsc: remove duplicate lines in deliver_to_esme()
Pablo Neira Ayuso has submitted this change and it was merged. Change subject: libmsc: remove duplicate lines in deliver_to_esme() .. libmsc: remove duplicate lines in deliver_to_esme() This code is accidentally doing the same thing twice, remove it. Change-Id: I68087a850399e22951d2407e4d8a09c671a775c9 --- M openbsc/src/libmsc/smpp_openbsc.c 1 file changed, 0 insertions(+), 2 deletions(-) Approvals: Neels Hofmeyr: Looks good to me, approved Harald Welte: Looks good to me, approved Jenkins Builder: Verified diff --git a/openbsc/src/libmsc/smpp_openbsc.c b/openbsc/src/libmsc/smpp_openbsc.c index 36ad0a2..c9379ec 100644 --- a/openbsc/src/libmsc/smpp_openbsc.c +++ b/openbsc/src/libmsc/smpp_openbsc.c @@ -676,8 +676,6 @@ } else { deliver.sm_length = sms->user_data_len; memcpy(deliver.short_message, sms->user_data, deliver.sm_length); - deliver.sm_length = sms->user_data_len; - memcpy(deliver.short_message, sms->user_data, deliver.sm_length); } if (esme->acl && esme->acl->osmocom_ext && conn->lchan) -- To view, visit https://gerrit.osmocom.org/3425 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: merged Gerrit-Change-Id: I68087a850399e22951d2407e4d8a09c671a775c9 Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso
[MERGED] openbsc[master]: libmsc: remove 'deferred' parameter in sms_route_mt_sms()
Pablo Neira Ayuso has submitted this change and it was merged. Change subject: libmsc: remove 'deferred' parameter in sms_route_mt_sms() .. libmsc: remove 'deferred' parameter in sms_route_mt_sms() No need to cache the sms object, just cache what we need into the smpp_cmd structure. This simplifies what that I introduced in 93ffbd0029d1 ("libmsc: send RP-ACK to MS after ESME sends SMPP DELIVER-SM-RESP"). Change-Id: Iba5f864f9bb963baff95969e306b1b7cff00c1e3 --- M openbsc/src/libmsc/gsm_04_11.c M openbsc/src/libmsc/smpp_openbsc.c M openbsc/src/libmsc/smpp_smsc.h 3 files changed, 24 insertions(+), 30 deletions(-) Approvals: Neels Hofmeyr: Looks good to me, but someone else must approve Harald Welte: Looks good to me, approved Jenkins Builder: Verified diff --git a/openbsc/src/libmsc/gsm_04_11.c b/openbsc/src/libmsc/gsm_04_11.c index 7df5e64..d60de08 100644 --- a/openbsc/src/libmsc/gsm_04_11.c +++ b/openbsc/src/libmsc/gsm_04_11.c @@ -278,8 +278,7 @@ } static int sms_route_mt_sms(struct gsm_subscriber_connection *conn, - struct gsm_sms *gsms, uint8_t sms_mti, - bool *deferred) + struct gsm_sms *gsms, uint8_t sms_mti) { int rc; @@ -293,7 +292,7 @@ * delivery of the SMS. */ if (smpp_first) { - rc = smpp_try_deliver(gsms, conn, deferred); + rc = smpp_try_deliver(gsms, conn); if (rc == GSM411_RP_CAUSE_MO_NUM_UNASSIGNED) /* unknown subscriber, try local */ goto try_local; @@ -322,7 +321,7 @@ return GSM411_RP_CAUSE_MO_NUM_UNASSIGNED; } - rc = smpp_try_deliver(gsms, conn, deferred); + rc = smpp_try_deliver(gsms, conn); if (rc == GSM411_RP_CAUSE_MO_NUM_UNASSIGNED) { rate_ctr_inc(&conn->network->msc_ctrs->ctr[MSC_CTR_SMS_NO_RECEIVER]); } else if (rc < 0) { @@ -363,7 +362,7 @@ /* 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_trans *trans, struct msgb *msg, - uint32_t gsm411_msg_ref, bool *deferred) + uint32_t gsm411_msg_ref) { struct gsm_subscriber_connection *conn = trans->conn; uint8_t *smsp = msgb_sms(msg); @@ -485,10 +484,9 @@ /* FIXME: This looks very wrong */ send_signal(0, NULL, gsms, 0); - rc = sms_route_mt_sms(conn, gsms, sms_mti, deferred); + rc = sms_route_mt_sms(conn, gsms, sms_mti); out: - if (!deferred) - sms_free(gsms); + sms_free(gsms); return rc; } @@ -541,7 +539,6 @@ uint8_t dst_len, uint8_t *dst, uint8_t tpdu_len, uint8_t *tpdu) { - bool deferred = false; int rc = 0; if (src_len && src) @@ -558,8 +555,8 @@ DEBUGP(DLSMS, "DST(%u,%s)\n", dst_len, osmo_hexdump(dst, dst_len)); - rc = gsm340_rx_tpdu(trans, msg, rph->msg_ref, &deferred); - if (rc == 0 && !deferred) + rc = gsm340_rx_tpdu(trans, msg, rph->msg_ref); + if (rc == 0) return gsm411_send_rp_ack(trans, rph->msg_ref); else if (rc > 0) return gsm411_send_rp_error(trans, rph->msg_ref, rc); diff --git a/openbsc/src/libmsc/smpp_openbsc.c b/openbsc/src/libmsc/smpp_openbsc.c index c9379ec..6b89df2 100644 --- a/openbsc/src/libmsc/smpp_openbsc.c +++ b/openbsc/src/libmsc/smpp_openbsc.c @@ -497,7 +497,6 @@ osmo_timer_del(&cmd->response_timer); llist_del(&cmd->list); subscr_put(cmd->subscr); - sms_free(cmd->sms); talloc_free(cmd); } @@ -520,15 +519,14 @@ goto out; } - trans = trans_find_by_id(conn, GSM48_PDISC_SMS, -cmd->sms->gsm411.transaction_id); + trans = trans_find_by_id(conn, GSM48_PDISC_SMS, cmd->gsm411_trans_id); if (!trans) { LOGP(DSMPP, LOGL_ERROR, "GSM transaction %u is gone\n", -cmd->sms->gsm411.transaction_id); +cmd->gsm411_trans_id); goto out; } - gsm411_send_rp_ack(trans, cmd->sms->gsm411.msg_ref); + gsm411_send_rp_ack(trans, cmd->gsm411_msg_ref); out: smpp_cmd_free(cmd); } @@ -545,18 +543,17 @@ goto out; } - trans = trans_find_by_id(conn, GSM48_PDISC_SMS, -cmd->sms->gsm411.transaction_id); + trans = trans_find_by_id(conn, GSM48_PDISC_SMS, cmd->gsm411_trans_id); if (!trans) {
[MERGED] openbsc[master]: libmsc: move gsm340_rx_sms_submit() to sms_route_mt_sms()
Pablo Neira Ayuso has submitted this change and it was merged. Change subject: libmsc: move gsm340_rx_sms_submit() to sms_route_mt_sms() .. libmsc: move gsm340_rx_sms_submit() to sms_route_mt_sms() Move the sms message-type-identifier (mti) handling away from the routing logic. This patch allows us to reuse the sms_route_mt_sms() function in a follow up patch for sms reports send through SMPP DELIVER_SM with esm_class = Delivery Receipt whose Change-Id is Ic1a9023074bfa938099377980b6aff9b262fab2a. Change-Id: I3f3d30e0762b91e2099243b0be1a4b67cbb5e9c0 --- M openbsc/src/libmsc/gsm_04_11.c 1 file changed, 22 insertions(+), 19 deletions(-) Approvals: Harald Welte: Looks good to me, approved Jenkins Builder: Verified diff --git a/openbsc/src/libmsc/gsm_04_11.c b/openbsc/src/libmsc/gsm_04_11.c index d60de08..7294153 100644 --- a/openbsc/src/libmsc/gsm_04_11.c +++ b/openbsc/src/libmsc/gsm_04_11.c @@ -278,7 +278,7 @@ } static int sms_route_mt_sms(struct gsm_subscriber_connection *conn, - struct gsm_sms *gsms, uint8_t sms_mti) + struct gsm_sms *gsms) { int rc; @@ -336,23 +336,6 @@ rc = GSM411_RP_CAUSE_MO_NUM_UNASSIGNED; rate_ctr_inc(&conn->network->msc_ctrs->ctr[MSC_CTR_SMS_NO_RECEIVER]); #endif - return rc; - } - - switch (sms_mti) { - case GSM340_SMS_SUBMIT_MS2SC: - /* MS is submitting a SMS */ - rc = gsm340_rx_sms_submit(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; } return rc; @@ -484,7 +467,27 @@ /* FIXME: This looks very wrong */ send_signal(0, NULL, gsms, 0); - rc = sms_route_mt_sms(conn, gsms, sms_mti); + rc = sms_route_mt_sms(conn, gsms); + + /* This SMS got routed through SMPP or no receiver exists. */ + if (!gsms->receiver) + return rc; + + switch (sms_mti) { + case GSM340_SMS_SUBMIT_MS2SC: + /* MS is submitting a SMS */ + rc = gsm340_rx_sms_submit(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; + } out: sms_free(gsms); -- To view, visit https://gerrit.osmocom.org/3427 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: merged Gerrit-Change-Id: I3f3d30e0762b91e2099243b0be1a4b67cbb5e9c0 Gerrit-PatchSet: 2 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso
openbsc[master]: libmsc: set registered_delivery field in SMPP 3.4 DELIVER_SM...
Patch Set 1: If I push the "submit" button here, gerrit (on a black screen) fails with: Code Review - Error Cannot merge 6f615241665a8c47500855e2d608cab4467e6443 Missing dependency -- To view, visit https://gerrit.osmocom.org/3428 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I59af60fa89cd10ae973c5e122789e3e03e3728ee Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-HasComments: No
[PATCH] openbsc[master]: libmsc: add support for SMPP delivery receipts
ms_free(sms); trans->sms.sms = NULL; diff --git a/openbsc/src/libmsc/smpp_openbsc.c b/openbsc/src/libmsc/smpp_openbsc.c index a803763..c0aa89b 100644 --- a/openbsc/src/libmsc/smpp_openbsc.c +++ b/openbsc/src/libmsc/smpp_openbsc.c @@ -200,6 +200,10 @@ sms->user_data_len = sms_msg_len; } + t = find_tlv(submit->tlv, TLVID_user_message_reference); + if (t) + sms->msg_ref = ntohs(t->value.val16); + *psms = sms; return ESME_ROK; } @@ -514,6 +518,9 @@ struct gsm_subscriber_connection *conn; struct gsm_trans *trans; + if (cmd->is_report) + goto out; + conn = connection_for_subscr(cmd->subscr); if (!conn) { LOGP(DSMPP, LOGL_ERROR, "No connection to subscriber anymore\n"); @@ -537,6 +544,9 @@ struct gsm_subscriber_connection *conn; struct gsm_trans *trans; int gsm411_cause; + + if (cmd->is_report) + goto out; conn = connection_for_subscr(cmd->subscr); if (!conn) { @@ -575,6 +585,7 @@ return -1; cmd->sequence_nr= sequence_number; + cmd->is_report = sms->is_report; cmd->gsm411_msg_ref = sms->gsm411.msg_ref; cmd->gsm411_trans_id= sms->gsm411.transaction_id; cmd->subscr = subscr_get(subscr); @@ -639,7 +650,12 @@ memcpy(deliver.destination_addr, sms->dst.addr, sizeof(deliver.destination_addr)); - deliver.esm_class = 1;/* datagram mode */ + /* Short message contains a delivery receipt? Sect. 5.2.12. */ + if (sms->is_report) + deliver.esm_class = 0x04; + else + deliver.esm_class = 1; /* datagram mode */ + if (sms->ud_hdr_ind) deliver.esm_class |= 0x40; if (sms->reply_path_req) @@ -685,6 +701,9 @@ if (esme->acl && esme->acl->osmocom_ext && conn->lchan) append_osmo_tlvs(&deliver.tlv, conn->lchan); + append_tlv_u16(&deliver.tlv, TLVID_user_message_reference, + sms->msg_ref); + ret = smpp_tx_deliver(esme, &deliver); if (ret < 0) return ret; diff --git a/openbsc/src/libmsc/smpp_smsc.h b/openbsc/src/libmsc/smpp_smsc.h index 468d3b4..257383f 100644 --- a/openbsc/src/libmsc/smpp_smsc.h +++ b/openbsc/src/libmsc/smpp_smsc.h @@ -92,6 +92,7 @@ uint32_tsequence_nr; uint32_tgsm411_msg_ref; uint8_t gsm411_trans_id; + boolis_report; struct osmo_timer_list response_timer; }; -- To view, visit https://gerrit.osmocom.org/3434 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: Ic1a9023074bfa938099377980b6aff9b262fab2a Gerrit-PatchSet: 2 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso
[PATCH] openbsc[master]: libmsc: handle delivery ack via SMPP SUBMIT SM / send GSM 03...
tps://gerrit.osmocom.org/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: Ib70e534840308ed315f7add440351e649de3f907 Gerrit-PatchSet: 3 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr
[PATCH] openbsc[master]: libmsc: support GSM 03.40 status report for nitb
Hello Jenkins Builder, I'd like you to reexamine a change. Please visit https://gerrit.osmocom.org/3438 to look at the new patch set (#3). libmsc: support GSM 03.40 status report for nitb This patch adds support for GSM 03.40 in nitb mode. MS GSM 03.40 SMSC || | SMS-SUBMIT | |--->| | GSM 04.11 RP-ACK | |<---| | SMS-DELIVER| |<---| | GSM 04.11 RP-ACK | |--->| | SMS-STATUS-REPORT | |<---| | GSM 04.11 RP-ACK | |--->| || Change-Id: I5cc7bb4ebadde0940f44d10c3df34707b0615160 --- M openbsc/src/libmsc/gsm_04_11.c 1 file changed, 5 insertions(+), 0 deletions(-) git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/38/3438/3 diff --git a/openbsc/src/libmsc/gsm_04_11.c b/openbsc/src/libmsc/gsm_04_11.c index 80c3d77..73e0f55 100644 --- a/openbsc/src/libmsc/gsm_04_11.c +++ b/openbsc/src/libmsc/gsm_04_11.c @@ -682,6 +682,11 @@ LOGP(DLSMS, LOGL_ERROR, "Failed to send status report! err=%d\n", rc); } + + /* No route via SMPP, send the GSM 03.40 status-report now. */ + if (gsms->receiver) + gsm340_rx_sms_submit(sms_report); + LOGP(DLSMS, LOGL_NOTICE, "Status report has been sent\n"); sms_free(sms_report); -- To view, visit https://gerrit.osmocom.org/3438 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: I5cc7bb4ebadde0940f44d10c3df34707b0615160 Gerrit-PatchSet: 3 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso
[PATCH] openbsc[master]: libmsc: report status report request flag from SMPP SUBMIT_SM
Hello Harald Welte, Jenkins Builder, I'd like you to reexamine a change. Please visit https://gerrit.osmocom.org/3429 to look at the new patch set (#3). libmsc: report status report request flag from SMPP SUBMIT_SM Restore the sms status report request flag from SUBMIT_SM. Change-Id: Iac05252253f8933a3875b4904599b7a225191a4b --- M openbsc/src/libmsc/smpp_openbsc.c 1 file changed, 1 insertion(+), 0 deletions(-) git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/29/3429/3 diff --git a/openbsc/src/libmsc/smpp_openbsc.c b/openbsc/src/libmsc/smpp_openbsc.c index cf78676..a803763 100644 --- a/openbsc/src/libmsc/smpp_openbsc.c +++ b/openbsc/src/libmsc/smpp_openbsc.c @@ -129,6 +129,7 @@ sms = sms_alloc(); sms->source = SMS_SOURCE_SMPP; sms->smpp.sequence_nr = submit->sequence_number; + sms->status_rep_req = submit->registered_delivery; /* fill in the destination address */ sms->receiver = dest; -- To view, visit https://gerrit.osmocom.org/3429 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: Iac05252253f8933a3875b4904599b7a225191a4b Gerrit-PatchSet: 3 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso
[PATCH] openbsc[master]: libmsc: update database to accomodate SMS status-report fields
sms->ud_hdr_ind, q_udata, q_text, q_daddr, sms->dst.ton, sms->dst.npi, q_saddr, sms->src.ton, sms->src.npi); @@ -1489,6 +1643,8 @@ /* FIXME: those should all be get_uchar, but sqlite3 is braindead */ sms->reply_path_req = dbi_result_get_ulonglong(result, "reply_path_req"); sms->status_rep_req = dbi_result_get_ulonglong(result, "status_rep_req"); + sms->is_report = dbi_result_get_ulonglong(result, "is_report"); + sms->msg_ref = dbi_result_get_ulonglong(result, "msg_ref"); sms->ud_hdr_ind = dbi_result_get_ulonglong(result, "ud_hdr_ind"); sms->protocol_id = dbi_result_get_ulonglong(result, "protocol_id"); sms->data_coding_scheme = dbi_result_get_ulonglong(result, -- To view, visit https://gerrit.osmocom.org/3435 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: I7276d356d805a83ebeec72b02c8563b7135ea0b6 Gerrit-PatchSet: 3 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr
[PATCH] openbsc[master]: utils: smpp_mirror: bounce Delivery Receipts as Delivery Ack...
Hello Jenkins Builder, I'd like you to reexamine a change. Please visit https://gerrit.osmocom.org/3436 to look at the new patch set (#3). utils: smpp_mirror: bounce Delivery Receipts as Delivery Acknowledgments Simple patch to test the new status-report support code, remove previous code before Delivery Acknowledgement support was in place. Use LOGL_DEBUG for logging messages here as suggested by Neels and Harald. Change-Id: I877e228d8e174430f700631edbf9955972da7892 --- M openbsc/src/utils/smpp_mirror.c 1 file changed, 8 insertions(+), 9 deletions(-) git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/36/3436/3 diff --git a/openbsc/src/utils/smpp_mirror.c b/openbsc/src/utils/smpp_mirror.c index 88545de..c570505 100644 --- a/openbsc/src/utils/smpp_mirror.c +++ b/openbsc/src/utils/smpp_mirror.c @@ -123,14 +123,6 @@ PACK_AND_SEND(esme, &deliver_r); - /* This is a delivery receipt, temporarily munch it until we teach -* openbsc what to do with this. -*/ - if (deliver.esm_class == 0x04) { - LOGP(DSMPP, LOGL_NOTICE, "%s\n", deliver.short_message); - return 0; - } - memset(&submit, 0, sizeof(submit)); submit.command_id = SUBMIT_SM; submit.command_status = ESME_ROK; @@ -148,7 +140,14 @@ OSMO_MIN(sizeof(submit.source_addr), sizeof(deliver.destination_addr))); - submit.esm_class = deliver.esm_class; + /* Mirror delivery receipts as a delivery acknowledgements. */ + if (deliver.esm_class == 0x04) { + LOGP(DSMPP, LOGL_DEBUG, "%s\n", deliver.short_message); + submit.esm_class = 0x08; + } else { + submit.esm_class = deliver.esm_class; + } + submit.registered_delivery = deliver.registered_delivery; submit.protocol_id = deliver.protocol_id; submit.priority_flag = deliver.priority_flag; -- To view, visit https://gerrit.osmocom.org/3436 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: I877e228d8e174430f700631edbf9955972da7892 Gerrit-PatchSet: 3 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr
openbsc[master]: libmsc: report status report request flag from SMPP SUBMIT_SM
Patch Set 3: Verified+1 -- To view, visit https://gerrit.osmocom.org/3429 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: Iac05252253f8933a3875b4904599b7a225191a4b Gerrit-PatchSet: 3 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-HasComments: No
[PATCH] openbsc[master]: libmsc: update database to accomodate SMS status-report fields
protocol_id, sms->data_coding_scheme, + sms->ud_hdr_ind, q_udata, q_text, q_daddr, sms->dst.ton, sms->dst.npi, q_saddr, sms->src.ton, sms->src.npi); @@ -1489,6 +1643,8 @@ /* FIXME: those should all be get_uchar, but sqlite3 is braindead */ sms->reply_path_req = dbi_result_get_ulonglong(result, "reply_path_req"); sms->status_rep_req = dbi_result_get_ulonglong(result, "status_rep_req"); + sms->is_report = dbi_result_get_ulonglong(result, "is_report"); + sms->msg_ref = dbi_result_get_ulonglong(result, "msg_ref"); sms->ud_hdr_ind = dbi_result_get_ulonglong(result, "ud_hdr_ind"); sms->protocol_id = dbi_result_get_ulonglong(result, "protocol_id"); sms->data_coding_scheme = dbi_result_get_ulonglong(result, diff --git a/openbsc/tests/db/db_test.err b/openbsc/tests/db/db_test.err index fa9a54c..27e5703 100644 --- a/openbsc/tests/db/db_test.err +++ b/openbsc/tests/db/db_test.err @@ -1,2 +1,3 @@ Going to migrate from revision 3 +[0;mGoing to migrate from revision 4 [0;m \ No newline at end of file -- To view, visit https://gerrit.osmocom.org/3435 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: I7276d356d805a83ebeec72b02c8563b7135ea0b6 Gerrit-PatchSet: 4 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr
[MERGED] openbsc[master]: libmsc: set registered_delivery field in SMPP 3.4 DELIVER_SM...
Pablo Neira Ayuso has submitted this change and it was merged. Change subject: libmsc: set registered_delivery field in SMPP 3.4 DELIVER_SM messages .. libmsc: set registered_delivery field in SMPP 3.4 DELIVER_SM messages Propagate the status report request field to the SMPP message through the registered_delivery field, so the ESME knows that the mobile phone is asking for explicit delivery acknowledgment is required. See SMPP 3.4 specs section 5.2.17. Change-Id: I59af60fa89cd10ae973c5e122789e3e03e3728ee --- M openbsc/src/libmsc/smpp_openbsc.c 1 file changed, 8 insertions(+), 1 deletion(-) Approvals: Neels Hofmeyr: Looks good to me, but someone else must approve Harald Welte: Looks good to me, approved; Verified diff --git a/openbsc/src/libmsc/smpp_openbsc.c b/openbsc/src/libmsc/smpp_openbsc.c index 6b89df2..cf78676 100644 --- a/openbsc/src/libmsc/smpp_openbsc.c +++ b/openbsc/src/libmsc/smpp_openbsc.c @@ -602,6 +602,10 @@ return NULL; } +/* See SMPP 3.4, Section 5.2.17. registered_delivery (1 byte field). */ +#define SMPP34_NO_DELIVERY_RECEIPT 0x0 +#define SMPP34_DELIVERY_RECEIPT_REQ0x1 + static int deliver_to_esme(struct osmo_esme *esme, struct gsm_sms *sms, struct gsm_subscriber_connection *conn) { @@ -642,7 +646,10 @@ deliver.protocol_id = sms->protocol_id; deliver.priority_flag = 0; - deliver.registered_delivery = 0; + if (sms->status_rep_req) + deliver.registered_delivery = SMPP34_DELIVERY_RECEIPT_REQ; + else + deliver.registered_delivery = SMPP34_NO_DELIVERY_RECEIPT; /* Figure out SMPP DCS from TP-DCS */ dcs = sms->data_coding_scheme; -- To view, visit https://gerrit.osmocom.org/3428 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: merged Gerrit-Change-Id: I59af60fa89cd10ae973c5e122789e3e03e3728ee Gerrit-PatchSet: 2 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-Reviewer: Pau Espin Pedrol
[MERGED] openbsc[master]: libmsc: missing bit shift in status report flag when stored ...
Pablo Neira Ayuso has submitted this change and it was merged. Change subject: libmsc: missing bit shift in status report flag when stored in sms object .. libmsc: missing bit shift in status report flag when stored in sms object So we just store 0 or 1 depending on what the mobile phone requests. Change-Id: Idb7d5594219c0e458ccb561383a59604bc1a4201 --- M openbsc/src/libmsc/gsm_04_11.c 1 file changed, 1 insertion(+), 1 deletion(-) Approvals: Harald Welte: Looks good to me, approved Jenkins Builder: Verified diff --git a/openbsc/src/libmsc/gsm_04_11.c b/openbsc/src/libmsc/gsm_04_11.c index 7294153..1aed60e 100644 --- a/openbsc/src/libmsc/gsm_04_11.c +++ b/openbsc/src/libmsc/gsm_04_11.c @@ -366,7 +366,7 @@ /* invert those fields where 0 means active/present */ sms_mti = *smsp & 0x03; sms_vpf = (*smsp & 0x18) >> 3; - gsms->status_rep_req = (*smsp & 0x20); + gsms->status_rep_req = (*smsp & 0x20) >> 5; gsms->ud_hdr_ind = (*smsp & 0x40); /* * Not evaluating MMS (More Messages to Send) because the -- To view, visit https://gerrit.osmocom.org/3430 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: merged Gerrit-Change-Id: Idb7d5594219c0e458ccb561383a59604bc1a4201 Gerrit-PatchSet: 2 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Pablo Neira Ayuso
[MERGED] openbsc[master]: libmsc: report status report request flag from SMPP SUBMIT_SM
Pablo Neira Ayuso has submitted this change and it was merged. Change subject: libmsc: report status report request flag from SMPP SUBMIT_SM .. libmsc: report status report request flag from SMPP SUBMIT_SM Restore the sms status report request flag from SUBMIT_SM. Change-Id: Iac05252253f8933a3875b4904599b7a225191a4b --- M openbsc/src/libmsc/smpp_openbsc.c 1 file changed, 1 insertion(+), 0 deletions(-) Approvals: Harald Welte: Looks good to me, approved Jenkins Builder: Verified Pablo Neira Ayuso: Verified diff --git a/openbsc/src/libmsc/smpp_openbsc.c b/openbsc/src/libmsc/smpp_openbsc.c index cf78676..a803763 100644 --- a/openbsc/src/libmsc/smpp_openbsc.c +++ b/openbsc/src/libmsc/smpp_openbsc.c @@ -129,6 +129,7 @@ sms = sms_alloc(); sms->source = SMS_SOURCE_SMPP; sms->smpp.sequence_nr = submit->sequence_number; + sms->status_rep_req = submit->registered_delivery; /* fill in the destination address */ sms->receiver = dest; -- To view, visit https://gerrit.osmocom.org/3429 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: merged Gerrit-Change-Id: Iac05252253f8933a3875b4904599b7a225191a4b Gerrit-PatchSet: 3 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso
[MERGED] openbsc[master]: utils: smpp_mirror: temporarily munch SMPP delivery receipts
Pablo Neira Ayuso has submitted this change and it was merged. Change subject: utils: smpp_mirror: temporarily munch SMPP delivery receipts .. utils: smpp_mirror: temporarily munch SMPP delivery receipts Just munch and log SMPP delivery receipts by now, don't mirror this, it is going to break things in openbsc. Follow up patch removes this and mirrors this SMPP message as a SUBMIT_SM with esm_class = Delivery Acknowledgement. Change-Id: I78e93bc4034679e238c8642ccf6a0e844b1d6d8b --- M openbsc/src/utils/smpp_mirror.c 1 file changed, 8 insertions(+), 0 deletions(-) Approvals: Harald Welte: Looks good to me, approved Jenkins Builder: Verified diff --git a/openbsc/src/utils/smpp_mirror.c b/openbsc/src/utils/smpp_mirror.c index ec28f0a..edb40b5 100644 --- a/openbsc/src/utils/smpp_mirror.c +++ b/openbsc/src/utils/smpp_mirror.c @@ -112,6 +112,14 @@ PACK_AND_SEND(esme, &deliver_r); + /* This is a delivery receipt, temporarily munch it until we teach +* openbsc what to do with this. +*/ + if (deliver.esm_class == 0x04) { + LOGP(DSMPP, LOGL_NOTICE, "%s\n", deliver.short_message); + return 0; + } + memset(&submit, 0, sizeof(submit)); submit.command_id = SUBMIT_SM; submit.command_status = ESME_ROK; -- To view, visit https://gerrit.osmocom.org/3432 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: merged Gerrit-Change-Id: I78e93bc4034679e238c8642ccf6a0e844b1d6d8b Gerrit-PatchSet: 2 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Pablo Neira Ayuso
[MERGED] openbsc[master]: utils: smpp_mirror: set registered_delivery field in SMPP SU...
Pablo Neira Ayuso has submitted this change and it was merged. Change subject: utils: smpp_mirror: set registered_delivery field in SMPP SUBMIT_SM .. utils: smpp_mirror: set registered_delivery field in SMPP SUBMIT_SM To test delivery reports using this utility. Change-Id: I0e477407531fdd4d906e53c9b5a48a79a239966f --- M openbsc/src/utils/smpp_mirror.c 1 file changed, 1 insertion(+), 0 deletions(-) Approvals: Harald Welte: Looks good to me, approved Jenkins Builder: Verified diff --git a/openbsc/src/utils/smpp_mirror.c b/openbsc/src/utils/smpp_mirror.c index 95df5f2..ec28f0a 100644 --- a/openbsc/src/utils/smpp_mirror.c +++ b/openbsc/src/utils/smpp_mirror.c @@ -130,6 +130,7 @@ sizeof(deliver.destination_addr))); submit.esm_class = deliver.esm_class; + submit.registered_delivery = deliver.registered_delivery; submit.protocol_id = deliver.protocol_id; submit.priority_flag = deliver.priority_flag; memcpy(submit.schedule_delivery_time, deliver.schedule_delivery_time, -- To view, visit https://gerrit.osmocom.org/3431 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: merged Gerrit-Change-Id: I0e477407531fdd4d906e53c9b5a48a79a239966f Gerrit-PatchSet: 2 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Pablo Neira Ayuso
[MERGED] openbsc[master]: libmsc: add support for SMPP delivery receipts
Pablo Neira Ayuso has submitted this change and it was merged. Change subject: libmsc: add support for SMPP delivery receipts .. libmsc: add support for SMPP delivery receipts If the mobile phone requests a status report via SMS, send a DELIVER_SM with esm_class = Delivery Receipt to ESME to indicate that the SMS has been already delivered to its destination. MSGSM 03.40 SMSC SMPP 3.4 ESME | || | SMS-DELIVER || |<|| | GSM 04.11 RP-ACK|| |>|| | | DELIVER-SM | | | esm_class = Delivery Receipt | | |--->| | | DELIVER-SM-RESP| | |<---| | || This patch implements "Appendix B. Delivery Receipt Format" as specified in the SMPP 3.4 specs. This string is conveyed in the SMS message as data, and it is only meaningful to the ESME, for logging purposes. The "submit date" and "done date" are not yet set, and other fields are just sent with dummy values, so they are left to be finished as future work. The new SMPP TLV tag TLVID_user_message_reference is added to the SMPP messages inconditionally now since this information is required by delivery-reports to associate the status-report with the original SMS. Change-Id: Ic1a9023074bfa938099377980b6aff9b262fab2a --- M openbsc/include/openbsc/gsm_data.h M openbsc/src/libmsc/gsm_04_11.c M openbsc/src/libmsc/smpp_openbsc.c M openbsc/src/libmsc/smpp_smsc.h 4 files changed, 76 insertions(+), 1 deletion(-) Approvals: Harald Welte: Looks good to me, approved Jenkins Builder: Verified diff --git a/openbsc/include/openbsc/gsm_data.h b/openbsc/include/openbsc/gsm_data.h index 37a341c..6829d22 100644 --- a/openbsc/include/openbsc/gsm_data.h +++ b/openbsc/include/openbsc/gsm_data.h @@ -456,6 +456,7 @@ } smpp; unsigned long validity_minutes; + bool is_report; uint8_t reply_path_req; uint8_t status_rep_req; uint8_t ud_hdr_ind; diff --git a/openbsc/src/libmsc/gsm_04_11.c b/openbsc/src/libmsc/gsm_04_11.c index 1aed60e..0edbe0b 100644 --- a/openbsc/src/libmsc/gsm_04_11.c +++ b/openbsc/src/libmsc/gsm_04_11.c @@ -593,6 +593,57 @@ rpud_len, rp_ud); } +static struct gsm_sms *sms_report_alloc(struct gsm_sms *sms) +{ + struct gsm_sms *sms_report; + int len; + + sms_report = sms_alloc(); + OSMO_ASSERT(sms_report); + + sms_report->msg_ref = sms->msg_ref; + sms_report->protocol_id = sms->protocol_id; + sms_report->data_coding_scheme = GSM338_DCS__8BIT_DATA; + + /* Invert address to send status report back to origin. */ + sms_report->src = sms->dst; + sms_report->dst = sms->src; + + /* As specified by Appendix B. Delivery Receipt Format. +* TODO: Many fields in this string are just set with dummy values, +* revisit this. +*/ + len = snprintf((char *)sms_report->user_data, + sizeof(sms_report->user_data), + "id:%.08llu sub:000 dlvrd:000 submit date:YYMMDDhhmm done date:YYMMDDhhmm stat:DELIVRD err:000 text:%.20s", + sms->id, sms->user_data); + sms_report->user_data_len = len; + LOGP(DLSMS, LOGL_NOTICE, "%s\n", sms_report->user_data); + + /* This represents a sms report. */ + sms_report->is_report = true; + + return sms_report; +} + +static void sms_status_report(struct gsm_sms *gsms, + struct gsm_subscriber_connection *conn) +{ + struct gsm_sms *sms_report; + int rc; + + sms_report = sms_report_alloc(gsms); + + rc = sms_route_mt_sms(conn, sms_report); + if (rc < 0) { + LOGP(DLSMS, LOGL_ERROR, +"Failed to send status report! err=%d\n", rc); + } + LOGP(DLSMS, LOGL_NOTICE, "Status report has been sent\n"); + + sms_free(sms_report); +} + /* Receive a 04.11 RP-ACK message (response to RP-DATA from us) */ static int gsm411_rx_rp_ack(struct msgb *msg, struct gsm_trans *trans, struct gsm411_rp_hdr *rph) @@ -614,6 +665,9 @@ send_signal(S_SMS_DELIVERED, trans, sms, 0); + if (sms->status_rep_req) +
[MERGED] openbsc[master]: utils: smpp_mirror: reflect message reference TLV
Pablo Neira Ayuso has submitted this change and it was merged. Change subject: utils: smpp_mirror: reflect message reference TLV .. utils: smpp_mirror: reflect message reference TLV Useful to test the delivery receipt support. This TLV contains the GSM03.40 message reference. Change-Id: I1b0abaa7e06ffe1bd2242c70813d8b70e9fa954f --- M openbsc/src/utils/smpp_mirror.c 1 file changed, 23 insertions(+), 1 deletion(-) Approvals: Neels Hofmeyr: Looks good to me, but someone else must approve Harald Welte: Looks good to me, approved Jenkins Builder: Verified diff --git a/openbsc/src/utils/smpp_mirror.c b/openbsc/src/utils/smpp_mirror.c index edb40b5..88545de 100644 --- a/openbsc/src/utils/smpp_mirror.c +++ b/openbsc/src/utils/smpp_mirror.c @@ -95,12 +95,23 @@ } /* FIXME: merge with smpp_smsc.c */ +static struct tlv_t *find_tlv(struct tlv_t *head, uint16_t tag) +{ + struct tlv_t *t; + + for (t = head; t != NULL; t = t->next) { + if (t->tag == tag) + return t; + } + return NULL; +} static int smpp_handle_deliver(struct esme *esme, struct msgb *msg) { struct deliver_sm_t deliver; struct deliver_sm_resp_t deliver_r; struct submit_sm_t submit; + tlv_t *t; int rc; memset(&deliver, 0, sizeof(deliver)); @@ -155,7 +166,18 @@ memcpy(submit.short_message, deliver.short_message, OSMO_MIN(sizeof(submit.short_message), sizeof(deliver.short_message))); - /* FIXME: TLV? */ + + /* FIXME: More TLV? */ + t = find_tlv(deliver.tlv, TLVID_user_message_reference); + if (t) { + tlv_t tlv; + + memset(&tlv, 0, sizeof(tlv)); + tlv.tag = TLVID_user_message_reference; + tlv.length = 2; + tlv.value.val16 = t->value.val16; + build_tlv(&submit.tlv, &tlv); + } return PACK_AND_SEND(esme, &submit); } -- To view, visit https://gerrit.osmocom.org/3433 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: merged Gerrit-Change-Id: I1b0abaa7e06ffe1bd2242c70813d8b70e9fa954f Gerrit-PatchSet: 2 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso
openbsc[master]: libmsc: update database to accomodate SMS status-report fields
Patch Set 4: Verified+1 (1 comment) https://gerrit.osmocom.org/#/c/3435/1/openbsc/src/libmsc/db.c File openbsc/src/libmsc/db.c: Line 375: /* Just like v3, but there is a new message reference field for status reports, > "just like v5"? Right, just like v3 actually. -- To view, visit https://gerrit.osmocom.org/3435 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I7276d356d805a83ebeec72b02c8563b7135ea0b6 Gerrit-PatchSet: 4 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-HasComments: Yes
[MERGED] openbsc[master]: libmsc: update database to accomodate SMS status-report fields
Pablo Neira Ayuso has submitted this change and it was merged. Change subject: libmsc: update database to accomodate SMS status-report fields .. libmsc: update database to accomodate SMS status-report fields SMPP DELIVER_SM messages with esm_class = Delivery Receipt need to send this message reference (that the mobile phone allocates) to the ESME. Thus, the ESME propagates it via SUBMIT_SM with esm_class = Delivery Acknoledgment so that the SMSC sends the GSM 03.40 status-report to the origin including this. Given this field is useful for status-reports, we need to store it in the HLR database. Moreover, we need a new field that specifies if the entry represents a SMS status-report, to do the right handling from the gsm411_send_sms() - such new handling comes in a follow up patch entitled "libmsc: handle delivery ack via SMPP SUBMIT SM / send GSM 03.40 status report". This patch includes the migration routines to the new database schema revision 5, it's quite a bit of dbi boilerplate code - copied-pasted and adapted. Change-Id: I7276d356d805a83ebeec72b02c8563b7135ea0b6 --- M openbsc/src/libmsc/db.c M openbsc/tests/db/db_test.err 2 files changed, 163 insertions(+), 6 deletions(-) Approvals: Harald Welte: Looks good to me, approved Pablo Neira Ayuso: Verified diff --git a/openbsc/src/libmsc/db.c b/openbsc/src/libmsc/db.c index 5fe2a3c..9945dca 100644 --- a/openbsc/src/libmsc/db.c +++ b/openbsc/src/libmsc/db.c @@ -50,7 +50,7 @@ static char *db_dirname = NULL; static dbi_conn conn; -#define SCHEMA_REVISION "4" +#define SCHEMA_REVISION "5" enum { SCHEMA_META, @@ -124,6 +124,8 @@ "valid_until TIMESTAMP, " "reply_path_req INTEGER NOT NULL, " "status_rep_req INTEGER NOT NULL, " + "is_report INTEGER NOT NULL, " + "msg_ref INTEGER NOT NULL, " "protocol_id INTEGER NOT NULL, " "data_coding_scheme INTEGER NOT NULL, " "ud_hdr_ind INTEGER NOT NULL, " @@ -370,6 +372,152 @@ return -EINVAL; } +/* Just like v3, but there is a new message reference field for status reports, + * that is set to zero for existing entries since there is no way we can infer + * this. + */ +static struct gsm_sms *sms_from_result_v4(dbi_result result) +{ + struct gsm_sms *sms = sms_alloc(); + const unsigned char *user_data; + const char *text, *addr; + + if (!sms) + return NULL; + + sms->id = dbi_result_get_ulonglong(result, "id"); + + sms->reply_path_req = dbi_result_get_ulonglong(result, "reply_path_req"); + sms->status_rep_req = dbi_result_get_ulonglong(result, "status_rep_req"); + sms->ud_hdr_ind = dbi_result_get_ulonglong(result, "ud_hdr_ind"); + sms->protocol_id = dbi_result_get_ulonglong(result, "protocol_id"); + sms->data_coding_scheme = dbi_result_get_ulonglong(result, + "data_coding_scheme"); + + addr = dbi_result_get_string(result, "src_addr"); + osmo_strlcpy(sms->src.addr, addr, sizeof(sms->src.addr)); + sms->src.ton = dbi_result_get_ulonglong(result, "src_ton"); + sms->src.npi = dbi_result_get_ulonglong(result, "src_npi"); + + addr = dbi_result_get_string(result, "dest_addr"); + osmo_strlcpy(sms->dst.addr, addr, sizeof(sms->dst.addr)); + sms->dst.ton = dbi_result_get_ulonglong(result, "dest_ton"); + sms->dst.npi = dbi_result_get_ulonglong(result, "dest_npi"); + + sms->user_data_len = dbi_result_get_field_length(result, "user_data"); + user_data = dbi_result_get_binary(result, "user_data"); + if (sms->user_data_len > sizeof(sms->user_data)) + sms->user_data_len = (uint8_t) sizeof(sms->user_data); + memcpy(sms->user_data, user_data, sms->user_data_len); + + text = dbi_result_get_string(result, "text"); + if (text) + osmo_strlcpy(sms->text, text, sizeof(sms->text)); + return sms; +} + +static int update_db_revision_4(void) +{ + dbi_result result; + struct gsm_sms *sms; + + LOGP(DDB, LOGL_NOTICE, "Going to migrate from revision 4\n"); + + result = dbi_conn_query(conn, "BEGIN EXCLUSIVE TRANSACTION"); + if (!result) { + LOGP(DDB, LOGL_ERROR, + "Failed to begin transaction (upgrade from rev 4)\n"); + return -EINVAL; + } + dbi_result_free(result); + + /* Rename old SMS table to be able create a new one */ + res
openbsc[master]: utils: smpp_mirror: bounce Delivery Receipts as Delivery Ack...
Patch Set 4: Verified+1 -- To view, visit https://gerrit.osmocom.org/3436 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I877e228d8e174430f700631edbf9955972da7892 Gerrit-PatchSet: 4 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-HasComments: No
[MERGED] openbsc[master]: utils: smpp_mirror: bounce Delivery Receipts as Delivery Ack...
Pablo Neira Ayuso has submitted this change and it was merged. Change subject: utils: smpp_mirror: bounce Delivery Receipts as Delivery Acknowledgments .. utils: smpp_mirror: bounce Delivery Receipts as Delivery Acknowledgments Simple patch to test the new status-report support code, remove previous code before Delivery Acknowledgement support was in place. Use LOGL_DEBUG for logging messages here as suggested by Neels and Harald. Change-Id: I877e228d8e174430f700631edbf9955972da7892 --- M openbsc/src/utils/smpp_mirror.c 1 file changed, 8 insertions(+), 9 deletions(-) Approvals: Harald Welte: Looks good to me, approved Pablo Neira Ayuso: Verified diff --git a/openbsc/src/utils/smpp_mirror.c b/openbsc/src/utils/smpp_mirror.c index 88545de..c570505 100644 --- a/openbsc/src/utils/smpp_mirror.c +++ b/openbsc/src/utils/smpp_mirror.c @@ -123,14 +123,6 @@ PACK_AND_SEND(esme, &deliver_r); - /* This is a delivery receipt, temporarily munch it until we teach -* openbsc what to do with this. -*/ - if (deliver.esm_class == 0x04) { - LOGP(DSMPP, LOGL_NOTICE, "%s\n", deliver.short_message); - return 0; - } - memset(&submit, 0, sizeof(submit)); submit.command_id = SUBMIT_SM; submit.command_status = ESME_ROK; @@ -148,7 +140,14 @@ OSMO_MIN(sizeof(submit.source_addr), sizeof(deliver.destination_addr))); - submit.esm_class = deliver.esm_class; + /* Mirror delivery receipts as a delivery acknowledgements. */ + if (deliver.esm_class == 0x04) { + LOGP(DSMPP, LOGL_DEBUG, "%s\n", deliver.short_message); + submit.esm_class = 0x08; + } else { + submit.esm_class = deliver.esm_class; + } + submit.registered_delivery = deliver.registered_delivery; submit.protocol_id = deliver.protocol_id; submit.priority_flag = deliver.priority_flag; -- To view, visit https://gerrit.osmocom.org/3436 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: merged Gerrit-Change-Id: I877e228d8e174430f700631edbf9955972da7892 Gerrit-PatchSet: 4 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso
openbsc[master]: libmsc: handle delivery ack via SMPP SUBMIT SM / send GSM 03...
Patch Set 4: Verified+1 -- To view, visit https://gerrit.osmocom.org/3437 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: Ib70e534840308ed315f7add440351e649de3f907 Gerrit-PatchSet: 4 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-HasComments: No
[MERGED] openbsc[master]: libmsc: handle delivery ack via SMPP SUBMIT SM / send GSM 03...
Pablo Neira Ayuso has submitted this change and it was merged. Change subject: libmsc: handle delivery ack via SMPP SUBMIT SM / send GSM 03.40 status report .. libmsc: handle delivery ack via SMPP SUBMIT SM / send GSM 03.40 status report This patch adds gsm340_sms_send_status_report_tpdu() to build a status-report. Moreover, set sms->report field if we see a SMPP SUBMIT_SM with Delivery Acknowledgment esm_class, so this identifies that this is a delivery report. MSGSM 03.40 SMSC SMPP 3.4 ESME | || | | SUBMIT-SM| | |esm_class = Delivery Ack| | |<---| | | SUBMIT-SM-RESP | | |--->| | || | SMS-STATUS-REPORT || |<|| | GSM 04.11 RP-ACK|| |>|| | || There is a FIXME message in this patch, that I just copied from gsm340_gen_sms_deliver_tpdu() since TP-MMS is not supported by OpenBSC. Change-Id: Ib70e534840308ed315f7add440351e649de3f907 --- M openbsc/src/libmsc/gsm_04_11.c M openbsc/src/libmsc/smpp_openbsc.c 2 files changed, 54 insertions(+), 2 deletions(-) Approvals: Harald Welte: Looks good to me, approved Pablo Neira Ayuso: Verified diff --git a/openbsc/src/libmsc/gsm_04_11.c b/openbsc/src/libmsc/gsm_04_11.c index 0edbe0b..80c3d77 100644 --- a/openbsc/src/libmsc/gsm_04_11.c +++ b/openbsc/src/libmsc/gsm_04_11.c @@ -277,6 +277,49 @@ return msg->len - old_msg_len; } +/* As defined by GSM 03.40, Section 9.2.2.3. */ +static int gsm340_gen_sms_status_report_tpdu(struct msgb *msg, +struct gsm_sms *sms) +{ + unsigned int old_msg_len = msg->len; + uint8_t oa_len = 0; + uint8_t oa[12]; /* max len per 03.40 */ + uint8_t *smsp; + + /* generate first octet with masked bits */ + smsp = msgb_put(msg, 1); + /* TP-MTI (message type indicator) */ + *smsp = GSM340_SMS_STATUS_REP_SC2MS; + /* TP-MMS (more messages to send) */ + if (0 /* FIXME */) + *smsp |= 0x04; + /* TP-MR (message reference) */ + smsp = msgb_put(msg, 1); + *smsp = sms->msg_ref; + /* generate recipient address */ + oa_len = gsm340_gen_oa_sub(oa, sizeof(oa), &sms->dst); + smsp = msgb_put(msg, oa_len); + memcpy(smsp, oa, oa_len); + + /* generate TP-SCTS (Service centre timestamp) */ + smsp = msgb_put(msg, 7); + gsm340_gen_scts(smsp, time(NULL)); + + /* generate TP-DT (Discharge time, in TP-SCTS format). */ + smsp = msgb_put(msg, 7); + gsm340_gen_scts(smsp, time(NULL)); + + /* TP-ST (status) */ + smsp = msgb_put(msg, 1); + /* From GSM 03.40, Section 9.2.3.15, 0x00 means OK. */ + *smsp = 0x00; + + LOGP(DLSMS, LOGL_INFO, "sending status report for SMS reference %x\n", +sms->msg_ref); + + return msg->len - old_msg_len; +} + static int sms_route_mt_sms(struct gsm_subscriber_connection *conn, struct gsm_sms *gsms) { @@ -989,8 +1032,13 @@ /* obtain a pointer for the rp_ud_len, so we can fill it later */ rp_ud_len = (uint8_t *)msgb_put(msg, 1); - /* generate the 03.40 SMS-DELIVER TPDU */ - rc = gsm340_gen_sms_deliver_tpdu(msg, sms); + if (sms->is_report) { + /* generate the 03.40 SMS-STATUS-REPORT TPDU */ + rc = gsm340_gen_sms_status_report_tpdu(msg, sms); + } else { + /* generate the 03.40 SMS-DELIVER TPDU */ + rc = gsm340_gen_sms_deliver_tpdu(msg, sms); + } if (rc < 0) { send_signal(S_SMS_UNKNOWN_ERROR, trans, sms, 0); sms_free(sms); diff --git a/openbsc/src/libmsc/smpp_openbsc.c b/openbsc/src/libmsc/smpp_openbsc.c index c0aa89b..85de040 100644 --- a/openbsc/src/libmsc/smpp_openbsc.c +++ b/openbsc/src/libmsc/smpp_openbsc.c @@ -143,6 +143,10 @@ osmo_strlcpy(sms->src.addr, (char *)submit->source_addr, sizeof(sms->src.addr)); + /* This is a Delivery Acknowledgment. */ + if (submit->esm_class == 0x08) + sms->is_report = true; + if (submit->esm_class & 0x40) sms->ud_hdr_ind = 1;
[MERGED] openbsc[master]: libmsc: support GSM 03.40 status report for nitb
Pablo Neira Ayuso has submitted this change and it was merged. Change subject: libmsc: support GSM 03.40 status report for nitb .. libmsc: support GSM 03.40 status report for nitb This patch adds support for GSM 03.40 in nitb mode. MS GSM 03.40 SMSC || | SMS-SUBMIT | |--->| | GSM 04.11 RP-ACK | |<---| | SMS-DELIVER| |<---| | GSM 04.11 RP-ACK | |--->| | SMS-STATUS-REPORT | |<---| | GSM 04.11 RP-ACK | |--->| || Change-Id: I5cc7bb4ebadde0940f44d10c3df34707b0615160 --- M openbsc/src/libmsc/gsm_04_11.c 1 file changed, 5 insertions(+), 0 deletions(-) Approvals: Keith Whyte: Verified Harald Welte: Looks good to me, approved diff --git a/openbsc/src/libmsc/gsm_04_11.c b/openbsc/src/libmsc/gsm_04_11.c index 80c3d77..73e0f55 100644 --- a/openbsc/src/libmsc/gsm_04_11.c +++ b/openbsc/src/libmsc/gsm_04_11.c @@ -682,6 +682,11 @@ LOGP(DLSMS, LOGL_ERROR, "Failed to send status report! err=%d\n", rc); } + + /* No route via SMPP, send the GSM 03.40 status-report now. */ + if (gsms->receiver) + gsm340_rx_sms_submit(sms_report); + LOGP(DLSMS, LOGL_NOTICE, "Status report has been sent\n"); sms_free(sms_report); -- To view, visit https://gerrit.osmocom.org/3438 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: merged Gerrit-Change-Id: I5cc7bb4ebadde0940f44d10c3df34707b0615160 Gerrit-PatchSet: 4 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso
[PATCH] openbsc[master]: libmsc: gsm340_gen_oa_sub() may return negative value
Review at https://gerrit.osmocom.org/3461 libmsc: gsm340_gen_oa_sub() may return negative value gsm340_gen_oa() returns a negative value if the output buffer that the caller passes is too small, so we have to check the return value of this function. Fixes: CID 174178 Fixes: CID 174179 Change-Id: I47215d7d89771730a7f84efa8aeeb187a0911fdb --- M openbsc/src/libmsc/gsm_04_11.c 1 file changed, 9 insertions(+), 2 deletions(-) git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/61/3461/1 diff --git a/openbsc/src/libmsc/gsm_04_11.c b/openbsc/src/libmsc/gsm_04_11.c index 73e0f55..8b4ffce 100644 --- a/openbsc/src/libmsc/gsm_04_11.c +++ b/openbsc/src/libmsc/gsm_04_11.c @@ -213,9 +213,9 @@ { uint8_t *smsp; uint8_t oa[12]; /* max len per 03.40 */ - uint8_t oa_len = 0; uint8_t octet_len; unsigned int old_msg_len = msg->len; + int oa_len; /* generate first octet with masked bits */ smsp = msgb_put(msg, 1); @@ -233,6 +233,9 @@ /* generate originator address */ oa_len = gsm340_gen_oa_sub(oa, sizeof(oa), &sms->src); + if (oa_len < 0) + return -ENOSPC; + smsp = msgb_put(msg, oa_len); memcpy(smsp, oa, oa_len); @@ -282,9 +285,9 @@ struct gsm_sms *sms) { unsigned int old_msg_len = msg->len; - uint8_t oa_len = 0; uint8_t oa[12]; /* max len per 03.40 */ uint8_t *smsp; + int oa_len; /* generate first octet with masked bits */ smsp = msgb_put(msg, 1); @@ -296,8 +299,12 @@ /* TP-MR (message reference) */ smsp = msgb_put(msg, 1); *smsp = sms->msg_ref; + /* generate recipient address */ oa_len = gsm340_gen_oa_sub(oa, sizeof(oa), &sms->dst); + if (oa_len < 0) + return -ENOSPC; + smsp = msgb_put(msg, oa_len); memcpy(smsp, oa, oa_len); -- To view, visit https://gerrit.osmocom.org/3461 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I47215d7d89771730a7f84efa8aeeb187a0911fdb Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso
[PATCH] libsmpp34[master]: add smpp34_tlv_for_each() helper
Review at https://gerrit.osmocom.org/3469 add smpp34_tlv_for_each() helper So we don't need to remember this is an opencoded list of TLVs. Change-Id: I446929feed049d0411e1629ca263e2bc41f714cc --- M src/smpp34_structs.h 1 file changed, 3 insertions(+), 0 deletions(-) git pull ssh://gerrit.osmocom.org:29418/libsmpp34 refs/changes/69/3469/1 diff --git a/src/smpp34_structs.h b/src/smpp34_structs.h index b9effb2..025109d 100644 --- a/src/smpp34_structs.h +++ b/src/smpp34_structs.h @@ -86,6 +86,9 @@ OCTET16( inst, octet, size); \ } par; +#define smpp34_tlv_for_each(pos, head) \ + for (pos = (head); pos != NULL; pos = pos->next) + #define DAD( inst, par, do_dest_address ) dad_t *par; #define UU2( inst, par, size ) union { \ struct { \ -- To view, visit https://gerrit.osmocom.org/3469 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I446929feed049d0411e1629ca263e2bc41f714cc Gerrit-PatchSet: 1 Gerrit-Project: libsmpp34 Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso
openbsc[master]: libmsc: update database to accomodate SMS status-report fields
Patch Set 4: When would it be good time to remove code for backward compatibility? Holger added v3 by 2014-03-07, it's a bit more than 3 years now. -- To view, visit https://gerrit.osmocom.org/3435 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I7276d356d805a83ebeec72b02c8563b7135ea0b6 Gerrit-PatchSet: 4 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-HasComments: No
[PATCH] openbsc[master]: libmsc: use smpp34_tlv_for_each() to avoid suboptimal TLV ha...
s; return ESME_ROK; -- To view, visit https://gerrit.osmocom.org/3470 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I53a65164a6cc4abc6bf57d9a8dc275cf21c90222 Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso
[PATCH] openbsc[master]: libmsc: use smpp34_tlv_for_each() to avoid suboptimal TLV ha...
org/3470 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: I53a65164a6cc4abc6bf57d9a8dc275cf21c90222 Gerrit-PatchSet: 2 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Jenkins Builder
openbsc[master]: libmsc: update database to accomodate SMS status-report fields
Patch Set 4: Agreed. So let it sink by when the NITB code becomes officially dead. Thanks! -- To view, visit https://gerrit.osmocom.org/3435 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I7276d356d805a83ebeec72b02c8563b7135ea0b6 Gerrit-PatchSet: 4 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-HasComments: No
[PATCH] libsmpp34[master]: add esm_class definitions
Review at https://gerrit.osmocom.org/3473 add esm_class definitions Add special message attributes definitions that are associated with the short message. Thus, we can get rid of magic numbers in our codebase. Change-Id: I91afd8b462b8fd3b2c4c5b54f4eeb7ec5b730b65 --- M src/smpp34.h 1 file changed, 11 insertions(+), 0 deletions(-) git pull ssh://gerrit.osmocom.org:29418/libsmpp34 refs/changes/73/3473/1 diff --git a/src/smpp34.h b/src/smpp34.h index 5fb6395..b114ba7 100644 --- a/src/smpp34.h +++ b/src/smpp34.h @@ -204,4 +204,15 @@ #define TLVID_its_reply_type 0x1380 /* CDMA */ #define TLVID_its_session_info0x1383 /* CDMA */ +/* As defined by SMPP 3.4, Sect. 5.2.12 Parameter Definition esm_class. */ +enum smpp34_esm_class { + SMPP34_DATAGRAM_MODE= 0x01, + SMPP34_DELIVERY_RECEIPT = 0x04, + SMPP34_DELIVERY_ACK = 0x08, + SMPP34_UDHI_IND = 0x40, + SMPP34_REPLY_PATH = 0x80, +}; + +#define SMPP34_MSG_MODE_MASK 0x03 + #endif -- To view, visit https://gerrit.osmocom.org/3473 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I91afd8b462b8fd3b2c4c5b54f4eeb7ec5b730b65 Gerrit-PatchSet: 1 Gerrit-Project: libsmpp34 Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso
openbsc[master]: libmsc: use smpp34_tlv_for_each() to avoid suboptimal TLV ha...
Patch Set 2: Build breaks because this patch depends on a patch in libsmpp34. -- To view, visit https://gerrit.osmocom.org/3470 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I53a65164a6cc4abc6bf57d9a8dc275cf21c90222 Gerrit-PatchSet: 2 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-HasComments: No
[PATCH] openbsc[master]: libmsc: use new smpp34 esm_class definitions
Review at https://gerrit.osmocom.org/3474 libmsc: use new smpp34 esm_class definitions Replace magic numbers by esm_class definitions. Change-Id: I6c458690da60c8f3637680efbd718f6e8c6feb4c --- M openbsc/src/libmsc/smpp_openbsc.c 1 file changed, 8 insertions(+), 10 deletions(-) git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/74/3474/1 diff --git a/openbsc/src/libmsc/smpp_openbsc.c b/openbsc/src/libmsc/smpp_openbsc.c index 7e23abd..ddb24b5 100644 --- a/openbsc/src/libmsc/smpp_openbsc.c +++ b/openbsc/src/libmsc/smpp_openbsc.c @@ -157,14 +157,13 @@ osmo_strlcpy(sms->src.addr, (char *)submit->source_addr, sizeof(sms->src.addr)); - /* This is a Delivery Acknowledgment. */ - if (submit->esm_class == 0x08) + if (submit->esm_class == SMPP34_DELIVERY_ACK) sms->is_report = true; - if (submit->esm_class & 0x40) + if (submit->esm_class & SMPP34_UDHI_IND) sms->ud_hdr_ind = 1; - if (submit->esm_class & 0x80) { + if (submit->esm_class & SMPP34_REPLY_PATH) { sms->reply_path_req = 1; #warning Implement reply path } @@ -240,7 +239,7 @@ sms->smpp.esme = esme; sms->protocol_id = submit->protocol_id; - switch (submit->esm_class & 3) { + switch (submit->esm_class & SMPP34_MSG_MODE_MASK) { case 0: /* default */ case 1: /* datagram */ case 3: /* store-and-forward */ @@ -664,16 +663,15 @@ memcpy(deliver.destination_addr, sms->dst.addr, sizeof(deliver.destination_addr)); - /* Short message contains a delivery receipt? Sect. 5.2.12. */ if (sms->is_report) - deliver.esm_class = 0x04; + deliver.esm_class = SMPP34_DELIVERY_RECEIPT; else - deliver.esm_class = 1; /* datagram mode */ + deliver.esm_class = SMPP34_DATAGRAM_MODE; if (sms->ud_hdr_ind) - deliver.esm_class |= 0x40; + deliver.esm_class |= SMPP34_UDHI_IND; if (sms->reply_path_req) - deliver.esm_class |= 0x80; + deliver.esm_class |= SMPP34_REPLY_PATH; deliver.protocol_id = sms->protocol_id; deliver.priority_flag = 0; -- To view, visit https://gerrit.osmocom.org/3474 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I6c458690da60c8f3637680efbd718f6e8c6feb4c Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso
openbsc[master]: libmsc: use new smpp34 esm_class definitions
Patch Set 1: This jenkins build will fail too, because it depends on a patch in libsmpp34 that I have just submitted. -- To view, visit https://gerrit.osmocom.org/3474 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I6c458690da60c8f3637680efbd718f6e8c6feb4c Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-HasComments: No
openbsc[master]: libmsc: use smpp34_tlv_for_each() to avoid suboptimal TLV ha...
Patch Set 2: OK, will include this info once patches for libsmpp34 get in. So this also helps re-kick Jenkins building. -- To view, visit https://gerrit.osmocom.org/3470 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I53a65164a6cc4abc6bf57d9a8dc275cf21c90222 Gerrit-PatchSet: 2 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-Reviewer: Pau Espin Pedrol Gerrit-HasComments: No
openbsc[master]: libmsc: use smpp34_tlv_for_each() to avoid suboptimal TLV ha...
Patch Set 2: Oh, I forgot. You can probably speed up the process if you give me +X to my libsmpp34 patches (if you're familiar with that code). Thanks! -- To view, visit https://gerrit.osmocom.org/3470 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I53a65164a6cc4abc6bf57d9a8dc275cf21c90222 Gerrit-PatchSet: 2 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-Reviewer: Pau Espin Pedrol Gerrit-HasComments: No
libsmpp34[master]: add esm_class definitions
Patch Set 1: Frankly, I would have used a define in first place. But I kind of understood enum is the policy for osmocom projects, so I followed this path. -- To view, visit https://gerrit.osmocom.org/3473 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I91afd8b462b8fd3b2c4c5b54f4eeb7ec5b730b65 Gerrit-PatchSet: 1 Gerrit-Project: libsmpp34 Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-HasComments: No
[MERGED] libsmpp34[master]: add smpp34_tlv_for_each() helper
Pablo Neira Ayuso has submitted this change and it was merged. Change subject: add smpp34_tlv_for_each() helper .. add smpp34_tlv_for_each() helper So we don't need to remember this is an opencoded list of TLVs. Change-Id: I446929feed049d0411e1629ca263e2bc41f714cc --- M src/smpp34_structs.h 1 file changed, 3 insertions(+), 0 deletions(-) Approvals: Harald Welte: Looks good to me, approved Jenkins Builder: Verified diff --git a/src/smpp34_structs.h b/src/smpp34_structs.h index b9effb2..025109d 100644 --- a/src/smpp34_structs.h +++ b/src/smpp34_structs.h @@ -86,6 +86,9 @@ OCTET16( inst, octet, size); \ } par; +#define smpp34_tlv_for_each(pos, head) \ + for (pos = (head); pos != NULL; pos = pos->next) + #define DAD( inst, par, do_dest_address ) dad_t *par; #define UU2( inst, par, size ) union { \ struct { \ -- To view, visit https://gerrit.osmocom.org/3469 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: merged Gerrit-Change-Id: I446929feed049d0411e1629ca263e2bc41f714cc Gerrit-PatchSet: 1 Gerrit-Project: libsmpp34 Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Pablo Neira Ayuso
[PATCH] libsmpp34[master]: add esm_class definitions
Hello Harald Welte, Jenkins Builder, I'd like you to reexamine a change. Please visit https://gerrit.osmocom.org/3473 to look at the new patch set (#2). add esm_class definitions Add special message attributes definitions that are associated with the short message. Thus, we can get rid of magic numbers in our codebase. Change-Id: I91afd8b462b8fd3b2c4c5b54f4eeb7ec5b730b65 --- M src/smpp34.h 1 file changed, 8 insertions(+), 0 deletions(-) git pull ssh://gerrit.osmocom.org:29418/libsmpp34 refs/changes/73/3473/2 diff --git a/src/smpp34.h b/src/smpp34.h index 5fb6395..9d51a4a 100644 --- a/src/smpp34.h +++ b/src/smpp34.h @@ -204,4 +204,12 @@ #define TLVID_its_reply_type 0x1380 /* CDMA */ #define TLVID_its_session_info0x1383 /* CDMA */ +/* As defined by SMPP 3.4, Sect. 5.2.12 Parameter Definition esm_class. */ +#define SMPP34_DATAGRAM_MODE 0x01 +#define SMPP34_MSG_MODE_MASK 0x03 +#define SMPP34_DELIVERY_RECEIPT0x04 +#define SMPP34_DELIVERY_ACK0x08 +#define SMPP34_UDHI_IND0x40 +#define SMPP34_REPLY_PATH 0x80 + #endif -- To view, visit https://gerrit.osmocom.org/3473 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: I91afd8b462b8fd3b2c4c5b54f4eeb7ec5b730b65 Gerrit-PatchSet: 2 Gerrit-Project: libsmpp34 Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Pablo Neira Ayuso
[PATCH] openbsc[master]: libmsc: use smpp34_tlv_for_each() to avoid suboptimal TLV ha...
(submit->tlv, TLVID_user_message_reference); - if (t) - sms->msg_ref = ntohs(t->value.val16); *psms = sms; return ESME_ROK; -- To view, visit https://gerrit.osmocom.org/3470 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: I53a65164a6cc4abc6bf57d9a8dc275cf21c90222 Gerrit-PatchSet: 3 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-Reviewer: Pau Espin Pedrol
openbsc[master]: mgcp_osmux: Remove unused parameter
Patch Set 1: Code-Review+1 -- To view, visit https://gerrit.osmocom.org/3483 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: Icb1e7cb15fe04642578f5292124ebc1eac9c9aa3 Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pau Espin Pedrol Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-HasComments: No
osmo-gsm-manuals[master]: osmux: Fix description for Dummy frames FT field
Patch Set 1: Code-Review+1 -- To view, visit https://gerrit.osmocom.org/3478 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: Ia421655bd1be45101da3db2a0af44fbb3cc111c1 Gerrit-PatchSet: 1 Gerrit-Project: osmo-gsm-manuals Gerrit-Branch: master Gerrit-Owner: Pau Espin Pedrol Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-HasComments: No
osmo-msc[master]: 04.08: log protocol discriminators and message types by name
Patch Set 6: Code-Review+1 -- To view, visit https://gerrit.osmocom.org/3350 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: Ida205d217e304337d816b14fd15e2ee435e7397d Gerrit-PatchSet: 6 Gerrit-Project: osmo-msc Gerrit-Branch: master Gerrit-Owner: Neels Hofmeyr Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-HasComments: No
[PATCH] libsmpp34[master]: add delivery receipt definitions
Review at https://gerrit.osmocom.org/3513 add delivery receipt definitions The registered_delivery field in SMPP message is a toggle on/off, this patch adds two new definition so we don't have to use magic numbers from the code. Change-Id: I5b3afff1b3b77cccd949e0606914c7ac3ba6114c --- M src/smpp34.h 1 file changed, 4 insertions(+), 0 deletions(-) git pull ssh://gerrit.osmocom.org:29418/libsmpp34 refs/changes/13/3513/1 diff --git a/src/smpp34.h b/src/smpp34.h index 9d51a4a..b66d47f 100644 --- a/src/smpp34.h +++ b/src/smpp34.h @@ -212,4 +212,8 @@ #define SMPP34_UDHI_IND0x40 #define SMPP34_REPLY_PATH 0x80 +/* Sect. 5.2.17 registered_delivery. */ +#define SMPP34_DELIVERY_RECEIPT_OFF0x00 +#define SMPP34_DELIVERY_RECEIPT_ON 0x01 + #endif -- To view, visit https://gerrit.osmocom.org/3513 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I5b3afff1b3b77cccd949e0606914c7ac3ba6114c Gerrit-PatchSet: 1 Gerrit-Project: libsmpp34 Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso
[PATCH] openbsc[master]: libmsc: use SMPP34_DELIVERY_RECEIPT_* in libsmpp34
Review at https://gerrit.osmocom.org/3515 libmsc: use SMPP34_DELIVERY_RECEIPT_* in libsmpp34 Use new definitions for the registered_delivery field in libsmpp34 with I5b3afff1b3b77cccd949e0606914c7ac3ba6114c. Moreover, do not set this header field to zero if status reports are off, the deliver_t structure has been already zeroed so this not required. Change-Id: Ie78e17323796120f576b9c0e1bc5ccc32da8ee12 --- M openbsc/src/libmsc/smpp_openbsc.c 1 file changed, 1 insertion(+), 7 deletions(-) git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/15/3515/1 diff --git a/openbsc/src/libmsc/smpp_openbsc.c b/openbsc/src/libmsc/smpp_openbsc.c index ddb24b5..f2a036d 100644 --- a/openbsc/src/libmsc/smpp_openbsc.c +++ b/openbsc/src/libmsc/smpp_openbsc.c @@ -627,10 +627,6 @@ return NULL; } -/* See SMPP 3.4, Section 5.2.17. registered_delivery (1 byte field). */ -#define SMPP34_NO_DELIVERY_RECEIPT 0x0 -#define SMPP34_DELIVERY_RECEIPT_REQ0x1 - static int deliver_to_esme(struct osmo_esme *esme, struct gsm_sms *sms, struct gsm_subscriber_connection *conn) { @@ -676,9 +672,7 @@ deliver.protocol_id = sms->protocol_id; deliver.priority_flag = 0; if (sms->status_rep_req) - deliver.registered_delivery = SMPP34_DELIVERY_RECEIPT_REQ; - else - deliver.registered_delivery = SMPP34_NO_DELIVERY_RECEIPT; + deliver.registered_delivery = SMPP34_DELIVERY_RECEIPT_ON; /* Figure out SMPP DCS from TP-DCS */ dcs = sms->data_coding_scheme; -- To view, visit https://gerrit.osmocom.org/3515 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ie78e17323796120f576b9c0e1bc5ccc32da8ee12 Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso
openbsc[master]: libmsc: use SMPP34_DELIVERY_RECEIPT_* in libsmpp34
Patch Set 1: Just for the record, this patch depends on: https://gerrit.osmocom.org/#/c/3513/ that's why Jenkins fails to build this. -- To view, visit https://gerrit.osmocom.org/3515 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: Ie78e17323796120f576b9c0e1bc5ccc32da8ee12 Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-HasComments: No
libsmpp34[master]: add delivery receipt definitions
Patch Set 1: My queue is now empty :-), unless someone needs any more cleanups ;-) -- To view, visit https://gerrit.osmocom.org/3513 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I5b3afff1b3b77cccd949e0606914c7ac3ba6114c Gerrit-PatchSet: 1 Gerrit-Project: libsmpp34 Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-HasComments: No
[MERGED] libsmpp34[master]: add delivery receipt definitions
Pablo Neira Ayuso has submitted this change and it was merged. Change subject: add delivery receipt definitions .. add delivery receipt definitions The registered_delivery field in SMPP message is a toggle on/off, this patch adds two new definition so we don't have to use magic numbers from the code. Change-Id: I5b3afff1b3b77cccd949e0606914c7ac3ba6114c --- M src/smpp34.h 1 file changed, 4 insertions(+), 0 deletions(-) Approvals: Harald Welte: Looks good to me, approved Jenkins Builder: Verified diff --git a/src/smpp34.h b/src/smpp34.h index 9d51a4a..b66d47f 100644 --- a/src/smpp34.h +++ b/src/smpp34.h @@ -212,4 +212,8 @@ #define SMPP34_UDHI_IND0x40 #define SMPP34_REPLY_PATH 0x80 +/* Sect. 5.2.17 registered_delivery. */ +#define SMPP34_DELIVERY_RECEIPT_OFF0x00 +#define SMPP34_DELIVERY_RECEIPT_ON 0x01 + #endif -- To view, visit https://gerrit.osmocom.org/3513 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: merged Gerrit-Change-Id: I5b3afff1b3b77cccd949e0606914c7ac3ba6114c Gerrit-PatchSet: 1 Gerrit-Project: libsmpp34 Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Pablo Neira Ayuso
openbsc[master]: LIBMSC: Place correct dst address in status report
Patch Set 2: Code-Review+1 Thanks for fixing up this! -- To view, visit https://gerrit.osmocom.org/3516 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I2d4f87ac777465de9bfb5a775a789a2691755ee9 Gerrit-PatchSet: 2 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Keith Whyte Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-HasComments: No
openbsc[master]: LIBMSC: Use sms->text, not sms->user_data to construct repor...
Patch Set 3: Code-Review+1 LGTM. Thanks for fixing up this issue too. -- To view, visit https://gerrit.osmocom.org/3517 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: Id51bc9483ad6f52d6da74135605cfd12434c7c96 Gerrit-PatchSet: 3 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Keith Whyte Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-HasComments: No
[MERGED] openbsc[master]: libmsc: use GSM411_RP_CAUSE_MO_NUM_UNASSIGNED as return value
Pablo Neira Ayuso has submitted this change and it was merged. Change subject: libmsc: use GSM411_RP_CAUSE_MO_NUM_UNASSIGNED as return value .. libmsc: use GSM411_RP_CAUSE_MO_NUM_UNASSIGNED as return value Instead of hardcoded value of 1 plus comment of the right hand side of the statement. Change-Id: I865bdbd6da17a0389044a8e749dbcb9cae06 --- M openbsc/src/libmsc/gsm_04_11.c M openbsc/src/libmsc/smpp_openbsc.c 2 files changed, 5 insertions(+), 6 deletions(-) Approvals: Harald Welte: Looks good to me, approved Jenkins Builder: Verified diff --git a/openbsc/src/libmsc/gsm_04_11.c b/openbsc/src/libmsc/gsm_04_11.c index 6164a08..a94b971 100644 --- a/openbsc/src/libmsc/gsm_04_11.c +++ b/openbsc/src/libmsc/gsm_04_11.c @@ -293,7 +293,7 @@ */ if (smpp_first) { rc = smpp_try_deliver(gsms, conn); - if (rc == 1) + if (rc == GSM411_RP_CAUSE_MO_NUM_UNASSIGNED) goto try_local; if (rc < 0) { LOGP(DLSMS, LOGL_ERROR, "%s: SMS delivery error: %d.", @@ -317,12 +317,11 @@ /* Avoid a second look-up */ if (smpp_first) { rate_ctr_inc(&conn->network->msc_ctrs->ctr[MSC_CTR_SMS_NO_RECEIVER]); - return 1; /* cause 1: unknown subscriber */ + return GSM411_RP_CAUSE_MO_NUM_UNASSIGNED; } rc = smpp_try_deliver(gsms, conn); - if (rc == 1) { - rc = 1; /* cause 1: unknown subscriber */ + if (rc == GSM411_RP_CAUSE_MO_NUM_UNASSIGNED) { rate_ctr_inc(&conn->network->msc_ctrs->ctr[MSC_CTR_SMS_NO_RECEIVER]); } else if (rc < 0) { LOGP(DLSMS, LOGL_ERROR, "%s: SMS delivery error: %d.", @@ -333,7 +332,7 @@ MSC_CTR_SMS_DELIVER_UNKNOWN_ERROR]); } #else - rc = 1; /* cause 1: unknown subscriber */ + rc = GSM411_RP_CAUSE_MO_NUM_UNASSIGNED; rate_ctr_inc(&conn->network->msc_ctrs->ctr[MSC_CTR_SMS_NO_RECEIVER]); #endif return rc; diff --git a/openbsc/src/libmsc/smpp_openbsc.c b/openbsc/src/libmsc/smpp_openbsc.c index 1671a62..ec9dda3 100644 --- a/openbsc/src/libmsc/smpp_openbsc.c +++ b/openbsc/src/libmsc/smpp_openbsc.c @@ -559,7 +559,7 @@ esme = smpp_route(g_smsc, &dst); if (!esme) - return 1; /* unknown subscriber */ + return GSM411_RP_CAUSE_MO_NUM_UNASSIGNED; return deliver_to_esme(esme, sms, conn); } -- To view, visit https://gerrit.osmocom.org/2487 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: merged Gerrit-Change-Id: I865bdbd6da17a0389044a8e749dbcb9cae06 Gerrit-PatchSet: 2 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte Gerrit-Reviewer: Pablo Neira Ayuso
[PATCH] openbsc[master]: libmsc: send RP-ACK to MS after ESME sends SMPP DELIVER-SM-RESP
bmsc/smpp_smsc.h +++ b/openbsc/src/libmsc/smpp_smsc.h @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -36,6 +37,8 @@ struct smsc *smsc; struct osmo_smpp_acl *acl; int use; + + struct llist_head smpp_cmd_list; uint32_t own_seq_nr; @@ -83,6 +86,19 @@ } u; }; +struct osmo_smpp_cmd { + struct llist_head list; + struct gsm_subscriber *subscr; + struct gsm_sms *sms; + uint32_tsequence_nr; + struct osmo_timer_list response_timer; +}; + +struct osmo_smpp_cmd *smpp_cmd_find_by_seqnum(struct osmo_esme *esme, + uint32_t sequence_number); +void smpp_cmd_ack(struct osmo_smpp_cmd *cmd); +void smpp_cmd_err(struct osmo_smpp_cmd *cmd); +void smpp_cmd_flush_pending(struct osmo_esme *esme); struct smsc { struct osmo_fd listen_ofd; @@ -146,5 +162,5 @@ int smpp_route_smpp_first(struct gsm_sms *sms, struct gsm_subscriber_connection *conn); int smpp_try_deliver(struct gsm_sms *sms, - struct gsm_subscriber_connection *conn); +struct gsm_subscriber_connection *conn, bool *deferred); #endif -- To view, visit https://gerrit.osmocom.org/2488 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: I0d5bd5693fed6d4f4bd2951711c7888712507bfd Gerrit-PatchSet: 3 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Keith Whyte
[PATCH] libosmocore[master]: timer: add osmo_timer_setup()
f..3ccd065 100644 --- a/src/rate_ctr.c +++ b/src/rate_ctr.c @@ -147,7 +147,7 @@ int rate_ctr_init(void *tall_ctx) { tall_rate_ctr_ctx = tall_ctx; - rate_ctr_timer.cb = rate_ctr_timer_cb; + osmo_timer_setup(&rate_ctr_timer, rate_ctr_timer_cb, NULL); osmo_timer_schedule(&rate_ctr_timer, 1, 0); return 0; diff --git a/src/stats.c b/src/stats.c index 1efc8cd..dee5d81 100644 --- a/src/stats.c +++ b/src/stats.c @@ -107,7 +107,7 @@ if (!is_initialised) return -ESRCH; - osmo_stats_timer.cb = osmo_stats_timer_cb; + osmo_timer_setup(&osmo_stats_timer, osmo_stats_timer_cb, NULL); osmo_timer_schedule(&osmo_stats_timer, 0, 1); return 0; diff --git a/src/timer.c b/src/timer.c index cc6d5cc..47d1786 100644 --- a/src/timer.c +++ b/src/timer.c @@ -65,6 +65,18 @@ rb_insert_color(&timer->node, &timer_root); } +/*! \brief set up timer callback and data + * \param[in] timer the timer that should be added + * \param[in] callback function to be called when timer expires + * \param[in] pointer to data that passed to the callback function + */ +void osmo_timer_setup(struct osmo_timer_list *timer, void (*cb)(void *data), + void *data) +{ + timer->cb = cb; + timer->data = data; +} + /*! \brief add a new timer to the timer management * \param[in] timer the timer that should be added */ diff --git a/tests/timer/timer_test.c b/tests/timer/timer_test.c index 066dc72..d2b0204 100644 --- a/tests/timer/timer_test.c +++ b/tests/timer/timer_test.c @@ -39,10 +39,7 @@ static void secondary_timer_fired(void *data); static unsigned int main_timer_step = 0; -static struct osmo_timer_list main_timer = { - .cb = main_timer_fired, - .data = &main_timer_step, -}; +static struct osmo_timer_list main_timer; static LLIST_HEAD(timer_test_list); @@ -92,8 +89,7 @@ return; } osmo_gettimeofday(&v->start, NULL); - v->timer.cb = secondary_timer_fired; - v->timer.data = v; + osmo_timer_setup(&v->timer, secondary_timer_fired, v); unsigned int seconds = (i & 0x7) + 1; v->stop.tv_sec = v->start.tv_sec + seconds; v->stop.tv_usec = v->start.tv_usec; @@ -195,6 +191,7 @@ " %d steps of %d msecs each\n", timer_nsteps, steps, TIME_BETWEEN_TIMER_CHECKS / 1000); + osmo_timer_setup(&main_timer, main_timer_fired, &main_timer_step); osmo_timer_schedule(&main_timer, 1, 0); #ifdef HAVE_SYS_SELECT_H -- To view, visit https://gerrit.osmocom.org/2542 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I2fa49972ecaab3748b25168b26d92034e9145666 Gerrit-PatchSet: 1 Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso
[PATCH] libosmocore[master]: timer: add osmo_timer_setup()
,7 +147,7 @@ int rate_ctr_init(void *tall_ctx) { tall_rate_ctr_ctx = tall_ctx; - rate_ctr_timer.cb = rate_ctr_timer_cb; + osmo_timer_setup(&rate_ctr_timer, rate_ctr_timer_cb, NULL); osmo_timer_schedule(&rate_ctr_timer, 1, 0); return 0; diff --git a/src/stats.c b/src/stats.c index 1efc8cd..dee5d81 100644 --- a/src/stats.c +++ b/src/stats.c @@ -107,7 +107,7 @@ if (!is_initialised) return -ESRCH; - osmo_stats_timer.cb = osmo_stats_timer_cb; + osmo_timer_setup(&osmo_stats_timer, osmo_stats_timer_cb, NULL); osmo_timer_schedule(&osmo_stats_timer, 0, 1); return 0; diff --git a/src/timer.c b/src/timer.c index cc6d5cc..47d1786 100644 --- a/src/timer.c +++ b/src/timer.c @@ -65,6 +65,18 @@ rb_insert_color(&timer->node, &timer_root); } +/*! \brief set up timer callback and data + * \param[in] timer the timer that should be added + * \param[in] callback function to be called when timer expires + * \param[in] pointer to data that passed to the callback function + */ +void osmo_timer_setup(struct osmo_timer_list *timer, void (*cb)(void *data), + void *data) +{ + timer->cb = cb; + timer->data = data; +} + /*! \brief add a new timer to the timer management * \param[in] timer the timer that should be added */ diff --git a/tests/timer/timer_test.c b/tests/timer/timer_test.c index 066dc72..d2b0204 100644 --- a/tests/timer/timer_test.c +++ b/tests/timer/timer_test.c @@ -39,10 +39,7 @@ static void secondary_timer_fired(void *data); static unsigned int main_timer_step = 0; -static struct osmo_timer_list main_timer = { - .cb = main_timer_fired, - .data = &main_timer_step, -}; +static struct osmo_timer_list main_timer; static LLIST_HEAD(timer_test_list); @@ -92,8 +89,7 @@ return; } osmo_gettimeofday(&v->start, NULL); - v->timer.cb = secondary_timer_fired; - v->timer.data = v; + osmo_timer_setup(&v->timer, secondary_timer_fired, v); unsigned int seconds = (i & 0x7) + 1; v->stop.tv_sec = v->start.tv_sec + seconds; v->stop.tv_usec = v->start.tv_usec; @@ -195,6 +191,7 @@ " %d steps of %d msecs each\n", timer_nsteps, steps, TIME_BETWEEN_TIMER_CHECKS / 1000); + osmo_timer_setup(&main_timer, main_timer_fired, &main_timer_step); osmo_timer_schedule(&main_timer, 1, 0); #ifdef HAVE_SYS_SELECT_H -- To view, visit https://gerrit.osmocom.org/2542 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: I2fa49972ecaab3748b25168b26d92034e9145666 Gerrit-PatchSet: 2 Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Jenkins Builder
[MERGED] openbsc[master]: libmsc: send RP-ACK to MS after ESME sends SMPP DELIVER-SM-RESP
Pablo Neira Ayuso has submitted this change and it was merged. Change subject: libmsc: send RP-ACK to MS after ESME sends SMPP DELIVER-SM-RESP .. libmsc: send RP-ACK to MS after ESME sends SMPP DELIVER-SM-RESP Hold on with the GSM 04.11 RP-ACK/RP-ERROR that we send to the MS until we get a confirmation from the ESME, via SMPP DELIVER-SM-RESP, that we can route this sms somewhere we can reach indeed. After this change, the conversation looks like this: MSGSM 03.40 SMSC SMPP 3.4 ESME || | | SMS-SUBMIT | | |--->| | ||DELIVER-SM | ||>| || | || DELIVER-SM-RESP | ||<| | GSM 04.11 RP-ACK | | |<---| | || | Before this patch, the RP-ACK was sent back straight forward to the MS, no matter if the sms can be route by the ESME or not. Thus, the user ends up getting a misleading "message delivered" in their phone screen, when the message may just be unroutable by the ESME hence silently dropped. If we get no reply from the ESME, there is a hardcoded timer that will expire to send back an RP-ERROR to the MS indicating that network is out-of-order. Currently this timer is arbitrarily set to 5 seconds. I found no specific good default value on the SMPP 3.4 specs, section 7.2, where the response_timer is described. There must be a place that describes a better default value for this. We could also expose this timer through VTY for configurability reasons, to be done later. Given all this needs to happen asyncronously, ie. block the SMSC, this patch extends the gsm_sms structure with two new fields to annotate useful information to send the RP-ACK/RP-ERROR back to the MS of origin. These new fields are: * the GSM 04.07 transaction id, to look up for the gsm_trans object. * the GSM 04.11 message reference so the MS of origin can correlate this response to its original request. Tested here using python-libsmpp script that replies with DELIVER_SM_RESP and status code 0x0b (Invalid Destination). I can see here on my motorola C155 that message cannot be delivered. I have tested with the success status code in the SMPP DELIVER_SM_RESP too. Change-Id: I0d5bd5693fed6d4f4bd2951711c7888712507bfd --- M openbsc/include/openbsc/gsm_04_11.h M openbsc/include/openbsc/gsm_data.h M openbsc/src/libmsc/gsm_04_11.c M openbsc/src/libmsc/smpp_openbsc.c M openbsc/src/libmsc/smpp_smsc.c M openbsc/src/libmsc/smpp_smsc.h 6 files changed, 184 insertions(+), 17 deletions(-) Approvals: Harald Welte: Looks good to me, approved Jenkins Builder: Verified diff --git a/openbsc/include/openbsc/gsm_04_11.h b/openbsc/include/openbsc/gsm_04_11.h index 149de90..017c887 100644 --- a/openbsc/include/openbsc/gsm_04_11.h +++ b/openbsc/include/openbsc/gsm_04_11.h @@ -39,4 +39,9 @@ void gsm411_sapi_n_reject(struct gsm_subscriber_connection *conn); uint8_t sms_next_rp_msg_ref(uint8_t *next_rp_ref); + +int gsm411_send_rp_ack(struct gsm_trans *trans, uint8_t msg_ref); +int gsm411_send_rp_error(struct gsm_trans *trans, uint8_t msg_ref, +uint8_t cause); + #endif diff --git a/openbsc/include/openbsc/gsm_data.h b/openbsc/include/openbsc/gsm_data.h index 1d90eee..6d814c8 100644 --- a/openbsc/include/openbsc/gsm_data.h +++ b/openbsc/include/openbsc/gsm_data.h @@ -429,6 +429,11 @@ enum gsm_sms_source_id source; struct { + uint8_t transaction_id; + uint32_t msg_ref; + } gsm411; + + struct { struct osmo_esme *esme; uint32_t sequence_nr; int transaction_mode; diff --git a/openbsc/src/libmsc/gsm_04_11.c b/openbsc/src/libmsc/gsm_04_11.c index a94b971..aa2030f 100644 --- a/openbsc/src/libmsc/gsm_04_11.c +++ b/openbsc/src/libmsc/gsm_04_11.c @@ -278,7 +278,7 @@ } int sms_route_mt_sms(struct gsm_subscriber_connection *conn, struct msgb *msg, - struct gsm_sms *gsms, uint8_t sms_mti) +struct gsm_sms *gsms, uint8_t sms_mti, bool *deferred) { int rc; @@ -292,7 +292,7 @@ * delivery of the SMS. */ if (smpp_first) { - rc = smpp_try_deliver(gsms, conn); + rc = smpp_try_deliver(gsms, conn, deferred); if (rc == GSM411_RP_CAUSE_MO_NUM_UNASSIGNED) goto try_local; if (rc < 0) { @@ -320,7 +320,7 @@ return GSM411_RP_CAUSE_MO_NUM_UNASSIGNED; } - rc = smpp_try_deliver(gsms, conn); + rc = smpp_try_deliver(gsms, conn, deferred
[PATCH] libosmocore[master]: timer: add osmo_timer_setup()
dl->t200.cb = &lapd_t200_cb; + osmo_timer_setup(&dl->t200, lapd_t200_cb, dl); dl->t203_sec = 10; dl->t203_usec = 0; - dl->t203.data = dl; - dl->t203.cb = &lapd_t203_cb; + osmo_timer_setup(&dl->t203, lapd_t203_cb, dl); dl->maxf = maxf; if (k > v_range - 1) k = v_range - 1; diff --git a/src/rate_ctr.c b/src/rate_ctr.c index f995f3f..3ccd065 100644 --- a/src/rate_ctr.c +++ b/src/rate_ctr.c @@ -147,7 +147,7 @@ int rate_ctr_init(void *tall_ctx) { tall_rate_ctr_ctx = tall_ctx; - rate_ctr_timer.cb = rate_ctr_timer_cb; + osmo_timer_setup(&rate_ctr_timer, rate_ctr_timer_cb, NULL); osmo_timer_schedule(&rate_ctr_timer, 1, 0); return 0; diff --git a/src/stats.c b/src/stats.c index 1efc8cd..dee5d81 100644 --- a/src/stats.c +++ b/src/stats.c @@ -107,7 +107,7 @@ if (!is_initialised) return -ESRCH; - osmo_stats_timer.cb = osmo_stats_timer_cb; + osmo_timer_setup(&osmo_stats_timer, osmo_stats_timer_cb, NULL); osmo_timer_schedule(&osmo_stats_timer, 0, 1); return 0; diff --git a/tests/timer/timer_test.c b/tests/timer/timer_test.c index 066dc72..d2b0204 100644 --- a/tests/timer/timer_test.c +++ b/tests/timer/timer_test.c @@ -39,10 +39,7 @@ static void secondary_timer_fired(void *data); static unsigned int main_timer_step = 0; -static struct osmo_timer_list main_timer = { - .cb = main_timer_fired, - .data = &main_timer_step, -}; +static struct osmo_timer_list main_timer; static LLIST_HEAD(timer_test_list); @@ -92,8 +89,7 @@ return; } osmo_gettimeofday(&v->start, NULL); - v->timer.cb = secondary_timer_fired; - v->timer.data = v; + osmo_timer_setup(&v->timer, secondary_timer_fired, v); unsigned int seconds = (i & 0x7) + 1; v->stop.tv_sec = v->start.tv_sec + seconds; v->stop.tv_usec = v->start.tv_usec; @@ -195,6 +191,7 @@ " %d steps of %d msecs each\n", timer_nsteps, steps, TIME_BETWEEN_TIMER_CHECKS / 1000); + osmo_timer_setup(&main_timer, main_timer_fired, &main_timer_step); osmo_timer_schedule(&main_timer, 1, 0); #ifdef HAVE_SYS_SELECT_H -- To view, visit https://gerrit.osmocom.org/2542 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: I2fa49972ecaab3748b25168b26d92034e9145666 Gerrit-PatchSet: 3 Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder
libosmocore[master]: timer: add osmo_timer_setup()
Patch Set 3: (1 comment) Sorry. I misunderstood. I'm recovering the previous version, I missed that you added Code Review+2 there. So you seem to be fine with the previous version. Thanks! https://gerrit.osmocom.org/#/c/2542/2/src/timer.c File src/timer.c: Line 73:osmo_timer_del(timer); > one could argue that could be an inline (it's basically just two unconditio Yes, that would be definitely faster. I'm going to follow that path, this timer interface has proven to be quite stable, so placing this in the library header file shouldn't be much of a problem. -- To view, visit https://gerrit.osmocom.org/2542 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I2fa49972ecaab3748b25168b26d92034e9145666 Gerrit-PatchSet: 3 Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-HasComments: Yes
[PATCH] libosmocore[master]: timer: add osmo_timer_setup()
v_range - 1) k = v_range - 1; diff --git a/src/rate_ctr.c b/src/rate_ctr.c index f995f3f..3ccd065 100644 --- a/src/rate_ctr.c +++ b/src/rate_ctr.c @@ -147,7 +147,7 @@ int rate_ctr_init(void *tall_ctx) { tall_rate_ctr_ctx = tall_ctx; - rate_ctr_timer.cb = rate_ctr_timer_cb; + osmo_timer_setup(&rate_ctr_timer, rate_ctr_timer_cb, NULL); osmo_timer_schedule(&rate_ctr_timer, 1, 0); return 0; diff --git a/src/stats.c b/src/stats.c index 1efc8cd..dee5d81 100644 --- a/src/stats.c +++ b/src/stats.c @@ -107,7 +107,7 @@ if (!is_initialised) return -ESRCH; - osmo_stats_timer.cb = osmo_stats_timer_cb; + osmo_timer_setup(&osmo_stats_timer, osmo_stats_timer_cb, NULL); osmo_timer_schedule(&osmo_stats_timer, 0, 1); return 0; diff --git a/src/timer.c b/src/timer.c index cc6d5cc..47d1786 100644 --- a/src/timer.c +++ b/src/timer.c @@ -65,6 +65,18 @@ rb_insert_color(&timer->node, &timer_root); } +/*! \brief set up timer callback and data + * \param[in] timer the timer that should be added + * \param[in] callback function to be called when timer expires + * \param[in] pointer to data that passed to the callback function + */ +void osmo_timer_setup(struct osmo_timer_list *timer, void (*cb)(void *data), + void *data) +{ + timer->cb = cb; + timer->data = data; +} + /*! \brief add a new timer to the timer management * \param[in] timer the timer that should be added */ diff --git a/tests/timer/timer_test.c b/tests/timer/timer_test.c index 066dc72..d2b0204 100644 --- a/tests/timer/timer_test.c +++ b/tests/timer/timer_test.c @@ -39,10 +39,7 @@ static void secondary_timer_fired(void *data); static unsigned int main_timer_step = 0; -static struct osmo_timer_list main_timer = { - .cb = main_timer_fired, - .data = &main_timer_step, -}; +static struct osmo_timer_list main_timer; static LLIST_HEAD(timer_test_list); @@ -92,8 +89,7 @@ return; } osmo_gettimeofday(&v->start, NULL); - v->timer.cb = secondary_timer_fired; - v->timer.data = v; + osmo_timer_setup(&v->timer, secondary_timer_fired, v); unsigned int seconds = (i & 0x7) + 1; v->stop.tv_sec = v->start.tv_sec + seconds; v->stop.tv_usec = v->start.tv_usec; @@ -195,6 +191,7 @@ " %d steps of %d msecs each\n", timer_nsteps, steps, TIME_BETWEEN_TIMER_CHECKS / 1000); + osmo_timer_setup(&main_timer, main_timer_fired, &main_timer_step); osmo_timer_schedule(&main_timer, 1, 0); #ifdef HAVE_SYS_SELECT_H -- To view, visit https://gerrit.osmocom.org/2542 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newpatchset Gerrit-Change-Id: I2fa49972ecaab3748b25168b26d92034e9145666 Gerrit-PatchSet: 5 Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Pablo Neira Ayuso
libosmocore[master]: timer: add osmo_timer_setup()
Patch Set 5: I seem to be puzzling a bit with Gerrit, still getting used to it :) -- To view, visit https://gerrit.osmocom.org/2542 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I2fa49972ecaab3748b25168b26d92034e9145666 Gerrit-PatchSet: 5 Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-HasComments: No
libosmocore[master]: timer: add osmo_timer_setup()
Patch Set 6: Reason for upstreaming this non-inlined version is the following: This new osmo_timer_setup() should be called from the configuration path once and never ever again to set up the callback and data. So this is not fast path at all. Using a function instead for slow path code is good so we reduce pressure on the i-cache. -- To view, visit https://gerrit.osmocom.org/2542 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I2fa49972ecaab3748b25168b26d92034e9145666 Gerrit-PatchSet: 6 Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso Gerrit-Reviewer: Harald Welte Gerrit-Reviewer: Holger Freyther Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-HasComments: No
[MERGED] libosmocore[master]: timer: add osmo_timer_setup()
Pablo Neira Ayuso has submitted this change and it was merged. Change subject: timer: add osmo_timer_setup() .. timer: add osmo_timer_setup() Add a new function timer function to set up the timer, similar to what we have in the Linux kernel. This patch also converts existing opencoded timer setup in the libosmocore tree as initial client of this new function. This patch implicitly removes function callback passed by reference that defeat compile time type validation. Compile-tested only, but I ran make check that reports success when testing timer infrastructure. Change-Id: I2fa49972ecaab3748b25168b26d92034e9145666 --- M include/osmocom/core/timer.h M src/fsm.c M src/gb/gprs_bssgp.c M src/gb/gprs_ns.c M src/gsm/gsm0411_smc.c M src/gsm/gsm0411_smr.c M src/gsm/lapd_core.c M src/rate_ctr.c M src/stats.c M src/timer.c M tests/timer/timer_test.c 11 files changed, 26 insertions(+), 22 deletions(-) Approvals: Harald Welte: Looks good to me, approved Jenkins Builder: Verified diff --git a/include/osmocom/core/timer.h b/include/osmocom/core/timer.h index dbda13f..48e7d8d 100644 --- a/include/osmocom/core/timer.h +++ b/include/osmocom/core/timer.h @@ -65,6 +65,8 @@ * timer management */ +void osmo_timer_setup(struct osmo_timer_list *timer, void (*cb)(void *data), void *data); + void osmo_timer_add(struct osmo_timer_list *timer); void osmo_timer_schedule(struct osmo_timer_list *timer, int seconds, int microseconds); diff --git a/src/fsm.c b/src/fsm.c index 9e6ef15..5e74482 100644 --- a/src/fsm.c +++ b/src/fsm.c @@ -206,8 +206,7 @@ fi->fsm = fsm; fi->priv = priv; fi->log_level = log_level; - fi->timer.data = fi; - fi->timer.cb = fsm_tmr_cb; + osmo_timer_setup(&fi->timer, fsm_tmr_cb, fi); if (id) fi->id = talloc_strdup(fi, id); diff --git a/src/gb/gprs_bssgp.c b/src/gb/gprs_bssgp.c index dba4d5c..fdbf788 100644 --- a/src/gb/gprs_bssgp.c +++ b/src/gb/gprs_bssgp.c @@ -640,8 +640,7 @@ msecs = (fcqe->llc_pdu_len * 1000) / fc->bucket_leak_rate; /* FIXME: add that time to fc->time_last_pdu and subtract it from * current time */ - fc->timer.data = fc; - fc->timer.cb = &fc_timer_cb; + osmo_timer_setup(&fc->timer, fc_timer_cb, fc); osmo_timer_schedule(&fc->timer, msecs / 1000, (msecs % 1000) * 1000); } else { /* If the PCU is telling us to not send any more data at all, diff --git a/src/gb/gprs_ns.c b/src/gb/gprs_ns.c index 7b497c2..9a2a114 100644 --- a/src/gb/gprs_ns.c +++ b/src/gb/gprs_ns.c @@ -238,8 +238,7 @@ /* before RESET procedure: BLOCKED and DEAD */ nsvc->state = NSE_S_BLOCKED; nsvc->nsi = nsi; - nsvc->timer.cb = gprs_ns_timer_cb; - nsvc->timer.data = nsvc; + osmo_timer_setup(&nsvc->timer, gprs_ns_timer_cb, nsvc); nsvc->ctrg = rate_ctr_group_alloc(nsvc, &nsvc_ctrg_desc, nsvci); nsvc->statg = osmo_stat_item_group_alloc(nsvc, &nsvc_statg_desc, nsvci); diff --git a/src/gsm/gsm0411_smc.c b/src/gsm/gsm0411_smc.c index c44423d..4c08365 100644 --- a/src/gsm/gsm0411_smc.c +++ b/src/gsm/gsm0411_smc.c @@ -184,8 +184,7 @@ /* 5.2.3.1.2: enter MO-wait for CP-ACK */ /* 5.2.3.2.3: enter MT-wait for CP-ACK */ new_cp_state(inst, GSM411_CPS_WAIT_CP_ACK); - inst->cp_timer.data = inst; - inst->cp_timer.cb = cp_timer_expired; + osmo_timer_setup(&inst->cp_timer, cp_timer_expired, inst); /* 5.3.2.1: Set Timer TC1A */ osmo_timer_schedule(&inst->cp_timer, inst->cp_tc1, 0); /* clone cp_msg */ diff --git a/src/gsm/gsm0411_smr.c b/src/gsm/gsm0411_smr.c index a1ee980..6d7fb8b 100644 --- a/src/gsm/gsm0411_smr.c +++ b/src/gsm/gsm0411_smr.c @@ -77,8 +77,7 @@ inst->rp_state = GSM411_RPS_IDLE; inst->rl_recv = rl_recv; inst->mn_send = mn_send; - inst->rp_timer.data = inst; - inst->rp_timer.cb = rp_timer_expired; + osmo_timer_setup(&inst->rp_timer, rp_timer_expired, inst); LOGP(DLSMS, LOGL_INFO, SMR_LOG_STR "instance created for %s.\n", diff --git a/src/gsm/lapd_core.c b/src/gsm/lapd_core.c index e0bbcab..c81b2a0 100644 --- a/src/gsm/lapd_core.c +++ b/src/gsm/lapd_core.c @@ -267,12 +267,10 @@ dl->n200 = 3; dl->t200_sec = 1; dl->t200_usec = 0; - dl->t200.data = dl; - dl->t200.cb = &lapd_t200_cb; + osmo_timer_setup(&dl->t200, lapd_t200_cb, dl); dl->t203_sec = 10; dl->t203_usec = 0; - dl->t203.data = dl; - dl->t203.cb = &lapd_t203_cb; + osmo_timer_setup(&dl->t203, lapd_t203_cb, dl); dl->maxf = max
[PATCH] openbsc[master]: src: use osmo_timer_setup()
/* Setup the timeout */ - pending->timeout.data = pending; - pending->timeout.cb = pending_timeout_cb; + osmo_timer_setup(&pending->timeout, pending_timeout_cb, +pending); /* TODO: Make timeout configurable */ osmo_timer_schedule(&pending->timeout, 10, 0); llist_add_tail(&pending->list_entry, &bsc->cmd_pending); diff --git a/openbsc/src/osmo-bsc_nat/bsc_ussd.c b/openbsc/src/osmo-bsc_nat/bsc_ussd.c index 2f68381..0ba6327 100644 --- a/openbsc/src/osmo-bsc_nat/bsc_ussd.c +++ b/openbsc/src/osmo-bsc_nat/bsc_ussd.c @@ -216,8 +216,7 @@ { struct msgb *msg; - conn->auth_timeout.data = conn; - conn->auth_timeout.cb = ussd_auth_cb; + osmo_timer_setup(&conn->auth_timeout, ussd_auth_cb, conn); osmo_timer_schedule(&conn->auth_timeout, conn->nat->auth_timeout, 0); msg = msgb_alloc_headroom(4096, 128, "auth message"); diff --git a/openbsc/src/osmo-nitb/bsc_hack.c b/openbsc/src/osmo-nitb/bsc_hack.c index d8029cd..17b23b2 100644 --- a/openbsc/src/osmo-nitb/bsc_hack.c +++ b/openbsc/src/osmo-nitb/bsc_hack.c @@ -369,13 +369,12 @@ printf("DB: Database prepared.\n"); /* setup the timer */ - db_sync_timer.cb = db_sync_timer_cb; - db_sync_timer.data = NULL; + osmo_timer_setup(&db_sync_timer, db_sync_timer_cb, NULL); if (use_db_counter) osmo_timer_schedule(&db_sync_timer, DB_SYNC_INTERVAL); - bsc_gsmnet->subscr_expire_timer.cb = subscr_expire_cb; - bsc_gsmnet->subscr_expire_timer.data = NULL; + osmo_timer_setup(&bsc_gsmnet->subscr_expire_timer, subscr_expire_cb, +NULL); osmo_timer_schedule(&bsc_gsmnet->subscr_expire_timer, EXPIRE_INTERVAL); signal(SIGINT, &signal_handler); diff --git a/openbsc/src/utils/bs11_config.c b/openbsc/src/utils/bs11_config.c index 8b05637..a0f3cb7 100644 --- a/openbsc/src/utils/bs11_config.c +++ b/openbsc/src/utils/bs11_config.c @@ -940,7 +940,7 @@ abis_nm_bs11_factory_logon(g_bts, 1); //abis_nm_bs11_get_serno(g_bts); - status_timer.cb = status_timer_cb; + osmo_timer_setup(&status_timer, status_timer_cb, NULL); while (1) { if (osmo_select_main(0) < 0) -- To view, visit https://gerrit.osmocom.org/2549 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ibcfd915688e97d370a88a83a7c95cbe16819 Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Pablo Neira Ayuso
openbsc[master]: libmsc: Map SMPP command status to GSM 04.11 cause
Patch Set 1: Code-Review-1 (6 comments) https://gerrit.osmocom.org/#/c/2589/1/openbsc/src/libmsc/smpp_openbsc.c File openbsc/src/libmsc/smpp_openbsc.c: Line 464: #define SMPP_TO_GSM411_MAX 4 > You're defining this value but not using it the array definition... (s.b.) Right. Keith, if you use ARRAY_SIZE() then we can skip this macro definition. Line 466: struct x { > (no x here please) Keith, just remove this x. Keep it: struct { ... Line 477: .smpp_status_code = ESME_RSYSERR, > could omit the explicit names, just { ESME_X, GSM411_X }, ... This is C99 structure initialization... which is actually a good idea since it makes code more readable and maintainable. Please keep it there. PS1, Line 481: . Add indent here, and everywhere inside the curly braces. Line 502: } > (wrong indent) That's equivalent... Fair enough. Line 574:gsm411_cause); This fits into the line, so no need to break it. -- To view, visit https://gerrit.osmocom.org/2589 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I61fb2d9ef4f2d2eabdc49b53d9966ad328d15e51 Gerrit-PatchSet: 1 Gerrit-Project: openbsc Gerrit-Branch: master Gerrit-Owner: Keith Whyte Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Neels Hofmeyr Gerrit-Reviewer: Pablo Neira Ayuso Gerrit-HasComments: Yes