From 56d96da8efb2bb3b5451d54d42c3221e35a68bef Mon Sep 17 00:00:00 2001 From: Pau Espin Pedrol Date: Fri, 18 Aug 2017 12:26:23 +0200 Subject: libmsc: Fix wrong handling of user_message_reference parameter libsmpp34 already converts received TLV integer values to native endianess in libsmpp34_(un)pack. Converting them again at receive time swaps the 2 bytes of user_message_reference, then using a wrong value. As GSM03.40 spec uses only 1 byte for the id, then only the high byte of the initial value is used and eventually sent back to the ESME. Again, at that time, htons() is not needed because libsmpp34 already handles that part. See OS-#2429 for more details. Change-Id: If748548a4a223e529a1110c89e483b599b406e8b --- src/libmsc/smpp_openbsc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libmsc/smpp_openbsc.c b/src/libmsc/smpp_openbsc.c index ec1489820..431cb4dfd 100644 --- a/src/libmsc/smpp_openbsc.c +++ b/src/libmsc/smpp_openbsc.c @@ -121,7 +121,7 @@ static int submit_to_sms(struct gsm_sms **psms, struct gsm_network *net, } break; case TLVID_user_message_reference: - msg_ref = ntohs(t->value.val16); + msg_ref = t->value.val16; break; default: break; @@ -437,7 +437,7 @@ void append_tlv_u16(tlv_t **req_tlv, uint16_t tag, uint16_t val) memset(&tlv, 0, sizeof(tlv)); tlv.tag = tag; tlv.length = 2; - tlv.value.val16 = htons(val); + tlv.value.val16 = val; build_tlv(req_tlv, &tlv); } -- cgit v1.2.3