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
This commit is contained in:
Pau Espin 2017-08-18 12:26:23 +02:00 committed by Neels Hofmeyr
parent 7e16e7299a
commit d5c4339a58
1 changed files with 2 additions and 2 deletions

View File

@ -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);
}