aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-gsm_sms.c
diff options
context:
space:
mode:
authorPascal Quantin <pascal.quantin@gmail.com>2016-04-22 15:50:55 +0200
committerMichael Mann <mmann78@netscape.net>2016-04-23 15:57:33 +0000
commitf7691b13c71ed22373424de482af2d44311ae55b (patch)
tree08205cc8cffda75a5982cb5e08e42a95185edead /epan/dissectors/packet-gsm_sms.c
parent6f5991750be4c5e211105aa88714834f724cc973 (diff)
ETSI CAT: add dissection of Information Elements coded as EFadn
While we are at it, fix decoding of STK packed SMS Change-Id: I2de757f1720381c75f23f3ee6043ac56813db658 Reviewed-on: https://code.wireshark.org/review/15054 Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'epan/dissectors/packet-gsm_sms.c')
-rw-r--r--epan/dissectors/packet-gsm_sms.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/epan/dissectors/packet-gsm_sms.c b/epan/dissectors/packet-gsm_sms.c
index cfccec95b7..09ff280ce5 100644
--- a/epan/dissectors/packet-gsm_sms.c
+++ b/epan/dissectors/packet-gsm_sms.c
@@ -40,6 +40,7 @@
#include <epan/expert.h>
#include <epan/prefs.h>
#include <epan/reassemble.h>
+#include <epan/charsets.h>
#include "packet-gsm_sms.h"
void proto_register_gsm_sms(void);
@@ -1929,7 +1930,23 @@ dis_field_ud(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 offset
/* as defined in TS 23.038 with bit 8 set to 0 */
if(!(reassembled && pinfo->num == reassembled_in))
{
- proto_tree_add_item(subtree, hf_gsm_sms_text, tvb, offset, length, ENC_ASCII|ENC_NA);
+ wmem_strbuf_t *strbuf = wmem_strbuf_sized_new(wmem_packet_scope(), length+1, 0);
+ for (i = 0; i < length; i++) {
+ guint8 gsm_chars[2];
+ gsm_chars[0] = tvb_get_guint8(tvb, offset+i);
+ if (gsm_chars[0] == 0x1b) {
+ /* Escape character */
+ guint8 second_byte;
+ i++;
+ second_byte = tvb_get_guint8(tvb, offset+i);
+ gsm_chars[0] |= second_byte << 7;
+ gsm_chars[1] = second_byte >> 1;
+ wmem_strbuf_append(strbuf, get_ts_23_038_7bits_string(wmem_packet_scope(), gsm_chars, 0, 2));
+ } else {
+ wmem_strbuf_append(strbuf, get_ts_23_038_7bits_string(wmem_packet_scope(), gsm_chars, 0, 1));
+ }
+ }
+ proto_tree_add_string(subtree, hf_gsm_sms_text, tvb, offset, length, wmem_strbuf_finalize(strbuf));
}
else
{