Compare commits

...

1 Commits

1 changed files with 20 additions and 2 deletions

View File

@ -49,6 +49,7 @@ void proto_reg_handoff_gsm_rlcmac(void);
static dissector_handle_t lte_rrc_dl_dcch_handle = NULL;
static dissector_handle_t rrc_irat_ho_to_utran_cmd_handle = NULL;
static dissector_handle_t llc_handle = NULL;
/* private typedefs */
typedef struct
@ -8585,6 +8586,7 @@ static guint8 dissect_gprs_data_segments(tvbuff_t *tvb, packet_info *pinfo, prot
data_tvb = tvb_new_subset_length(tvb, octet_offset, blk_length - octet_offset);
call_data_dissector(data_tvb, pinfo, subtree);
octet_offset = blk_length;
/* TODO: here store data_tvb for later */
break;
case 63:
@ -8611,7 +8613,14 @@ static guint8 dissect_gprs_data_segments(tvbuff_t *tvb, packet_info *pinfo, prot
"data segment: LI[%d]=%d indicates: (Last segment of) LLC frame (%d octets)",
i, li, li);
data_tvb = tvb_new_subset_length(tvb, octet_offset, li);
call_data_dissector(data_tvb, pinfo, subtree);
if(data_tvb) {
if (llc_handle) {
/* TODO: here used data_tvb previously stored and append current data_tvb to it. */
call_dissector(llc_handle, data_tvb, pinfo, subtree);
} else {
call_data_dissector(data_tvb, pinfo, subtree);
}
}
octet_offset += li;
break;
}
@ -8628,6 +8637,7 @@ static guint8 dissect_gprs_data_segments(tvbuff_t *tvb, packet_info *pinfo, prot
"data segment: LI not present: \n The Upper Layer PDU in the current RLC data block either fills the current RLC data block precisely \nor continues in the following in-sequence RLC data block");
data_tvb = tvb_new_subset_length(tvb, octet_offset, blk_length - octet_offset);
call_data_dissector(data_tvb, pinfo, subtree);
/* TODO: here store data_tvb for later */
} else {
proto_tree_add_bytes_item(tree, hf_padding, tvb, octet_offset, blk_length - octet_offset, ENC_BIG_ENDIAN, NULL, NULL, NULL);
}
@ -8730,7 +8740,14 @@ static guint16 dissect_egprs_data_segments(tvbuff_t *tvb, packet_info *pinfo, pr
"data segment: LI[%d]=%d indicates: (Last segment of) LLC frame (%d octets)",
i, li, li);
data_tvb = tvb_new_subset_length(tvb, octet_offset, li);
call_data_dissector(data_tvb, pinfo, subtree);
if(data_tvb) {
if (llc_handle) {
/* TODO: here used data_tvb previously stored and append current data_tvb to it. */
call_dissector(llc_handle, data_tvb, pinfo, subtree);
} else {
call_data_dissector(data_tvb, pinfo, subtree);
}
}
octet_offset += li;
break;
}
@ -18630,6 +18647,7 @@ void proto_reg_handoff_gsm_rlcmac(void)
{
lte_rrc_dl_dcch_handle = find_dissector("lte_rrc.dl_dcch");
rrc_irat_ho_to_utran_cmd_handle = find_dissector("rrc.irat.ho_to_utran_cmd");
llc_handle = find_dissector("llcgprs");
}
/*