LTE RRC: fix defragmentation of ETWS / CMAS messages

Change-Id: I59d7e3dc3398973290746fc15a2dc9f24cfc03e3
Reviewed-on: https://code.wireshark.org/review/13884
Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
This commit is contained in:
Pascal Quantin 2016-02-10 14:14:30 +01:00
parent fe2656b407
commit dae11790e7
2 changed files with 16 additions and 16 deletions

View File

@ -706,14 +706,13 @@ SystemInformationBlockType11/messageIdentifier TYPE=FT_UINT16 DISPLAY=BASE_DEC|B
#.FN_BODY SystemInformationBlockType11/warningMessageSegment VAL_PTR=&warning_msg_seg_tvb
tvbuff_t *warning_msg_seg_tvb = NULL;
gpointer p_dcs;
%(DEFAULT_BODY)s
#.FN_FTR SystemInformationBlockType11/warningMessageSegment
p_dcs = g_hash_table_lookup(lte_rrc_etws_cmas_dcs_hash, GUINT_TO_POINTER((guint)private_data_get_message_identifier(actx)));
if (warning_msg_seg_tvb && p_dcs) {
if (warning_msg_seg_tvb) {
proto_tree *subtree;
tvbuff_t *frag_tvb;
gpointer p_dcs;
fragment_head *frag_data = fragment_add_seq_check(&lte_rrc_sib11_reassembly_table, warning_msg_seg_tvb, 0, actx->pinfo,
private_data_get_message_identifier(actx), NULL,
private_data_get_warning_message_segment_number(actx),
@ -722,7 +721,8 @@ SystemInformationBlockType11/messageIdentifier TYPE=FT_UINT16 DISPLAY=BASE_DEC|B
subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_warningMessageSegment);
frag_tvb = process_reassembled_data(warning_msg_seg_tvb, 0, actx->pinfo, "Reassembled SIB11 warning message",
frag_data, &lte_rrc_sib11_frag_items, NULL, subtree);
if (frag_tvb) {
p_dcs = g_hash_table_lookup(lte_rrc_etws_cmas_dcs_hash, GUINT_TO_POINTER((guint)private_data_get_message_identifier(actx)));
if (frag_tvb && p_dcs) {
dissect_lte_rrc_warningMessageSegment(frag_tvb, subtree, actx->pinfo, GPOINTER_TO_UINT(p_dcs));
}
}
@ -781,14 +781,13 @@ SystemInformationBlockType12-r9/messageIdentifier-r9 TYPE=FT_UINT16 DISPLAY=BASE
#.FN_BODY SystemInformationBlockType12-r9/warningMessageSegment-r9 VAL_PTR=&warning_msg_seg_tvb
tvbuff_t *warning_msg_seg_tvb = NULL;
gpointer p_dcs;
%(DEFAULT_BODY)s
#.FN_FTR SystemInformationBlockType12-r9/warningMessageSegment-r9
p_dcs = g_hash_table_lookup(lte_rrc_etws_cmas_dcs_hash, GUINT_TO_POINTER((guint)private_data_get_message_identifier(actx)));
if (warning_msg_seg_tvb && p_dcs) {
if (warning_msg_seg_tvb) {
proto_tree *subtree;
tvbuff_t *frag_tvb;
gpointer p_dcs;
fragment_head *frag_data = fragment_add_seq_check(&lte_rrc_sib12_reassembly_table, warning_msg_seg_tvb, 0, actx->pinfo,
private_data_get_message_identifier(actx), NULL,
private_data_get_warning_message_segment_number(actx),
@ -797,7 +796,8 @@ SystemInformationBlockType12-r9/messageIdentifier-r9 TYPE=FT_UINT16 DISPLAY=BASE
subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_warningMessageSegment);
frag_tvb = process_reassembled_data(warning_msg_seg_tvb, 0, actx->pinfo, "Reassembled SIB12 warning message",
frag_data, &lte_rrc_sib12_frag_items, NULL, subtree);
if (frag_tvb) {
p_dcs = g_hash_table_lookup(lte_rrc_etws_cmas_dcs_hash, GUINT_TO_POINTER((guint)private_data_get_message_identifier(actx)));
if (frag_tvb && p_dcs) {
dissect_lte_rrc_warningMessageSegment(frag_tvb, subtree, actx->pinfo, GPOINTER_TO_UINT(p_dcs));
}
}

View File

@ -32113,16 +32113,15 @@ dissect_lte_rrc_T_warningMessageSegmentNumber(tvbuff_t *tvb _U_, int offset _U_,
static int
dissect_lte_rrc_T_warningMessageSegment(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
tvbuff_t *warning_msg_seg_tvb = NULL;
gpointer p_dcs;
offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
NO_BOUND, NO_BOUND, FALSE, &warning_msg_seg_tvb);
p_dcs = g_hash_table_lookup(lte_rrc_etws_cmas_dcs_hash, GUINT_TO_POINTER((guint)private_data_get_message_identifier(actx)));
if (warning_msg_seg_tvb && p_dcs) {
if (warning_msg_seg_tvb) {
proto_tree *subtree;
tvbuff_t *frag_tvb;
gpointer p_dcs;
fragment_head *frag_data = fragment_add_seq_check(&lte_rrc_sib11_reassembly_table, warning_msg_seg_tvb, 0, actx->pinfo,
private_data_get_message_identifier(actx), NULL,
private_data_get_warning_message_segment_number(actx),
@ -32131,7 +32130,8 @@ dissect_lte_rrc_T_warningMessageSegment(tvbuff_t *tvb _U_, int offset _U_, asn1_
subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_warningMessageSegment);
frag_tvb = process_reassembled_data(warning_msg_seg_tvb, 0, actx->pinfo, "Reassembled SIB11 warning message",
frag_data, &lte_rrc_sib11_frag_items, NULL, subtree);
if (frag_tvb) {
p_dcs = g_hash_table_lookup(lte_rrc_etws_cmas_dcs_hash, GUINT_TO_POINTER((guint)private_data_get_message_identifier(actx)));
if (frag_tvb && p_dcs) {
dissect_lte_rrc_warningMessageSegment(frag_tvb, subtree, actx->pinfo, GPOINTER_TO_UINT(p_dcs));
}
}
@ -32264,16 +32264,15 @@ dissect_lte_rrc_T_warningMessageSegmentNumber_r9(tvbuff_t *tvb _U_, int offset _
static int
dissect_lte_rrc_T_warningMessageSegment_r9(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
tvbuff_t *warning_msg_seg_tvb = NULL;
gpointer p_dcs;
offset = dissect_per_octet_string(tvb, offset, actx, tree, hf_index,
NO_BOUND, NO_BOUND, FALSE, &warning_msg_seg_tvb);
p_dcs = g_hash_table_lookup(lte_rrc_etws_cmas_dcs_hash, GUINT_TO_POINTER((guint)private_data_get_message_identifier(actx)));
if (warning_msg_seg_tvb && p_dcs) {
if (warning_msg_seg_tvb) {
proto_tree *subtree;
tvbuff_t *frag_tvb;
gpointer p_dcs;
fragment_head *frag_data = fragment_add_seq_check(&lte_rrc_sib12_reassembly_table, warning_msg_seg_tvb, 0, actx->pinfo,
private_data_get_message_identifier(actx), NULL,
private_data_get_warning_message_segment_number(actx),
@ -32282,7 +32281,8 @@ dissect_lte_rrc_T_warningMessageSegment_r9(tvbuff_t *tvb _U_, int offset _U_, as
subtree = proto_item_add_subtree(actx->created_item, ett_lte_rrc_warningMessageSegment);
frag_tvb = process_reassembled_data(warning_msg_seg_tvb, 0, actx->pinfo, "Reassembled SIB12 warning message",
frag_data, &lte_rrc_sib12_frag_items, NULL, subtree);
if (frag_tvb) {
p_dcs = g_hash_table_lookup(lte_rrc_etws_cmas_dcs_hash, GUINT_TO_POINTER((guint)private_data_get_message_identifier(actx)));
if (frag_tvb && p_dcs) {
dissect_lte_rrc_warningMessageSegment(frag_tvb, subtree, actx->pinfo, GPOINTER_TO_UINT(p_dcs));
}
}