diff options
Diffstat (limited to 'epan/dissectors/packet-cell_broadcast.c')
-rw-r--r-- | epan/dissectors/packet-cell_broadcast.c | 29 |
1 files changed, 8 insertions, 21 deletions
diff --git a/epan/dissectors/packet-cell_broadcast.c b/epan/dissectors/packet-cell_broadcast.c index f2424b57d1..113fd77745 100644 --- a/epan/dissectors/packet-cell_broadcast.c +++ b/epan/dissectors/packet-cell_broadcast.c @@ -258,9 +258,6 @@ tvbuff_t * dissect_cbs_data(guint8 sms_encoding, tvbuff_t *tvb, proto_tree *tree tvbuff_t * tvb_out = NULL; int length = tvb_length(tvb) - offset; gchar *utf8_text = NULL, *utf8_out; - guint8 * input_string; - GIConv cd; - GError *l_conv_error = NULL; switch(sms_encoding){ case SMS_ENCODING_7BIT: @@ -273,29 +270,19 @@ tvbuff_t * dissect_cbs_data(guint8 sms_encoding, tvbuff_t *tvb, proto_tree *tree break; case SMS_ENCODING_8BIT: + /* + * XXX - encoding is "user-defined". Use ASCII? + */ tvb_out = tvb_new_subset(tvb, offset, length, length); break; case SMS_ENCODING_UCS2: case SMS_ENCODING_UCS2_LANG: - input_string = (guint8 *)tvb_memdup(wmem_packet_scope(), tvb, offset, length); - if ((cd = g_iconv_open("UTF-8","UCS-2BE")) != (GIConv) -1) - { - utf8_text = g_convert_with_iconv(input_string, length, cd, NULL, NULL, &l_conv_error); - if(!l_conv_error) - { - tvb_out = tvb_new_subset(tvb, offset, length, length); - } - else - proto_tree_add_text(tree, tvb, offset, length, "CBS String: g_convert_with_iconv FAILED"); - - g_free(utf8_text); - g_iconv_close(cd); - } - else - { - proto_tree_add_text(tree, tvb, offset, length, "CBS String: g_iconv_open FAILED contact wireshark"); - } + utf8_text = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, length, ENC_UCS_2|ENC_BIG_ENDIAN); + utf8_out = g_strdup(utf8_text); + tvb_out = tvb_new_child_real_data(tvb, utf8_out, (guint)strlen(utf8_out), (guint)strlen(utf8_out)); + tvb_set_free_cb(tvb_out, g_free); + add_new_data_source(pinfo, tvb_out, "unpacked UCS-2 data"); break; default: |