diff options
author | Pascal Quantin <pascal.quantin@gmail.com> | 2013-12-03 19:44:32 +0000 |
---|---|---|
committer | Pascal Quantin <pascal.quantin@gmail.com> | 2013-12-03 19:44:32 +0000 |
commit | 8b3f82def11470cc0b407894c44a7a734c30dbe6 (patch) | |
tree | 37b28bc7fe91b7e548b40ad8cdcf183d641ecd82 /epan | |
parent | c28c8ed2145e50cee06a3496976914f6cabc4f75 (diff) |
Add request / response tracking to MBIM_FUNCTION_ERROR_MSG messages
svn path=/trunk/; revision=53762
Diffstat (limited to 'epan')
-rw-r--r-- | epan/dissectors/packet-mbim.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/epan/dissectors/packet-mbim.c b/epan/dissectors/packet-mbim.c index c9aa9c43ca..720ea26680 100644 --- a/epan/dissectors/packet-mbim.c +++ b/epan/dissectors/packet-mbim.c @@ -3981,8 +3981,30 @@ dissect_mbim_control(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void * } } break; - case MBIM_HOST_ERROR_MSG: case MBIM_FUNCTION_ERROR_MSG: + open_count = GPOINTER_TO_UINT(wmem_tree_lookup32_le(mbim_conv->open, PINFO_FD_NUM(pinfo))); + trans_id_key[0].length = 1; + trans_id_key[0].key = &open_count; + trans_id_key[1].length = 1; + trans_id_key[1].key = &trans_id; + trans_id_key[2].length = 0; + trans_id_key[2].key = NULL; + if (!PINFO_FD_VISITED(pinfo)) { + mbim_info = (struct mbim_info *)wmem_tree_lookup32_array(mbim_conv->trans, trans_id_key); + if (mbim_info) { + mbim_info->resp_frame = PINFO_FD_NUM(pinfo); + } + } else { + mbim_info = (struct mbim_info *)wmem_tree_lookup32_array(mbim_conv->trans, trans_id_key); + if (mbim_info && mbim_info->req_frame) { + proto_item *req_it; + + req_it = proto_tree_add_uint(header_tree, hf_mbim_request_in, tvb, 0, 0, mbim_info->req_frame); + PROTO_ITEM_SET_GENERATED(req_it); + } + } + /* FALLTHROUGH */ + case MBIM_HOST_ERROR_MSG: proto_tree_add_item(mbim_tree, hf_mbim_error_status_code, tvb, offset, 4, ENC_LITTLE_ENDIAN); break; case MBIM_OPEN_DONE: |