diff options
author | Pablo Neira Ayuso <pablo@gnumonks.org> | 2017-08-07 14:01:28 +0100 |
---|---|---|
committer | Neels Hofmeyr <neels@hofmeyr.de> | 2017-08-27 02:33:49 +0200 |
commit | 59622b6220950415cac3048a4ee8a54bace67742 (patch) | |
tree | 7ac80daafb016eeb7a28c3f8bfa6c3570e61cf3c /src | |
parent | 4f6a90f425dbffe1be6b86b9f436ae609a3b84b0 (diff) |
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
Diffstat (limited to 'src')
-rw-r--r-- | src/utils/smpp_mirror.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/src/utils/smpp_mirror.c b/src/utils/smpp_mirror.c index edb40b574..88545de61 100644 --- a/src/utils/smpp_mirror.c +++ b/src/utils/smpp_mirror.c @@ -95,12 +95,23 @@ static int pack_and_send(struct esme *esme, uint32_t type, void *ptr) } /* 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 @@ static int smpp_handle_deliver(struct esme *esme, struct msgb *msg) 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); } |