dotsimon has uploaded this change for review.

View Change

include SM-RP-UI in outgoing GSUP message when presesnt

Change-Id: I90a607900ac7c86b200c79b7e8c460d4cbb3c3ce
---
M include/osmocom/msc/gsm_04_11_gsup.h
M src/libmsc/gsm_04_11.c
M src/libmsc/gsm_04_11_gsup.c
3 files changed, 26 insertions(+), 7 deletions(-)

git pull ssh://gerrit.osmocom.org:29418/osmo-msc refs/changes/28/39428/1
diff --git a/include/osmocom/msc/gsm_04_11_gsup.h b/include/osmocom/msc/gsm_04_11_gsup.h
index 4034f5e..e9f1a34 100644
--- a/include/osmocom/msc/gsm_04_11_gsup.h
+++ b/include/osmocom/msc/gsm_04_11_gsup.h
@@ -12,8 +12,8 @@
int gsm411_gsup_mo_fwd_sm_req(struct gsm_trans *trans, struct msgb *msg,
uint8_t sm_rp_mr, uint8_t *sm_rp_da, uint8_t sm_rp_da_len);

-int gsm411_gsup_mt_fwd_sm_res(struct gsm_trans *trans, uint8_t sm_rp_mr);
+int gsm411_gsup_mt_fwd_sm_res(struct gsm_trans *trans, uint8_t sm_rp_mr, uint8_t *ui);
int gsm411_gsup_mt_fwd_sm_err(struct gsm_trans *trans,
- uint8_t sm_rp_mr, uint8_t cause);
+ uint8_t sm_rp_mr, uint8_t cause, uint8_t *ui);

int gsm411_gsup_rx(struct gsup_client_mux *gcm, void *data, const struct osmo_gsup_message *gsup_msg);
diff --git a/src/libmsc/gsm_04_11.c b/src/libmsc/gsm_04_11.c
index 6536d0b..cc91988 100644
--- a/src/libmsc/gsm_04_11.c
+++ b/src/libmsc/gsm_04_11.c
@@ -852,7 +852,10 @@

if (trans->net->sms_over_gsup) {
/* Forward towards SMSC via GSUP */
- return gsm411_gsup_mt_fwd_sm_res(trans, rph->msg_ref);
+ uint8_t *ui = NULL;
+ if (rph->len > 2 && rph->data[0] == GSM411_IE_RP_USER_DATA)
+ ui = &(rph->data[1]);
+ return gsm411_gsup_mt_fwd_sm_res(trans, rph->msg_ref, ui);
}

if (!sms) {
@@ -893,7 +896,12 @@

if (trans->net->sms_over_gsup) {
/* Forward towards SMSC via GSUP */
- return gsm411_gsup_mt_fwd_sm_err(trans, rph->msg_ref, cause);
+ uint8_t *ui = NULL;
+ uint8_t ui_iei_pos = cause_len + 1;
+
+ if (rph->len > (ui_iei_pos + 2) && rph->data[ui_iei_pos] == GSM411_IE_RP_USER_DATA)
+ ui = &(rph->data[ui_iei_pos + 1]);
+ return gsm411_gsup_mt_fwd_sm_err(trans, rph->msg_ref, cause, ui);
}

if (!sms) {
diff --git a/src/libmsc/gsm_04_11_gsup.c b/src/libmsc/gsm_04_11_gsup.c
index 96fdbc6..877172c 100644
--- a/src/libmsc/gsm_04_11_gsup.c
+++ b/src/libmsc/gsm_04_11_gsup.c
@@ -184,7 +184,7 @@
return -EINVAL;
}

-int gsm411_gsup_mt_fwd_sm_res(struct gsm_trans *trans, uint8_t sm_rp_mr)
+int gsm411_gsup_mt_fwd_sm_res(struct gsm_trans *trans, uint8_t sm_rp_mr, uint8_t *ui)
{
struct osmo_gsup_message gsup_msg;

@@ -202,11 +202,17 @@
gsup_msg.destination_name_len = trans->sms.gsup_source_name_len;
gsup_client_mux_tx_set_source(trans->net->gcm, &gsup_msg);

+ /* include optional SM-RP-UI field if present */
+ if (ui) {
+ gsup_msg.sm_rp_ui_len = ui[0];
+ gsup_msg.sm_rp_ui = &(ui[1]);
+ }
+
return gsup_client_mux_tx(trans->net->gcm, &gsup_msg);
}

int gsm411_gsup_mt_fwd_sm_err(struct gsm_trans *trans,
- uint8_t sm_rp_mr, uint8_t cause)
+ uint8_t sm_rp_mr, uint8_t cause, uint8_t *ui)
{
struct osmo_gsup_message gsup_msg;

@@ -227,7 +233,12 @@
/* SM-RP-Cause value */
gsup_msg.sm_rp_cause = &cause;

- /* TODO: include optional SM-RP-UI field if present */
+ /* include optional SM-RP-UI field if present */
+ if (ui) {
+ gsup_msg.sm_rp_ui_len = ui[0];
+ gsup_msg.sm_rp_ui = &(ui[1]);
+ }
+
return gsup_client_mux_tx(trans->net->gcm, &gsup_msg);
}


To view, visit change 39428. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-MessageType: newchange
Gerrit-Project: osmo-msc
Gerrit-Branch: master
Gerrit-Change-Id: I90a607900ac7c86b200c79b7e8c460d4cbb3c3ce
Gerrit-Change-Number: 39428
Gerrit-PatchSet: 1
Gerrit-Owner: dotsimon <implorable-herd@yahoo.com>