Replace "btsdp" tap with function to query service_infos tree, since that's all dissectors were doing with it. Not used outside of dissectors and cuts down on a few redundant global variables.

svn path=/trunk/; revision=53677
This commit is contained in:
Michael Mann 2013-11-30 19:26:18 +00:00
parent d1e4422a4a
commit e2d2d12098
6 changed files with 14 additions and 87 deletions

View File

@ -124,7 +124,6 @@ static gint ett_bthfp_brsf_ag = -1;
static dissector_handle_t bthfp_handle;
static wmem_tree_t *fragments = NULL;
static wmem_tree_t *sdp_service_infos = NULL;
#define ROLE_UNKNOWN 0
#define ROLE_AG 1
@ -1242,7 +1241,7 @@ dissect_bthfp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
key[9].length = 0;
key[9].key = NULL;
service_info = (service_info_t *) wmem_tree_lookup32_array_le(sdp_service_infos, key);
service_info = btsdp_get_service_info(key);
if (service_info && service_info->interface_id == rfcomm_data->interface_id &&
service_info->adapter_id == rfcomm_data->adapter_id &&
service_info->sdp_psm == SDP_PSM_DEFAULT &&
@ -1529,18 +1528,6 @@ dissect_bthfp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
return offset;
}
static int
bthfp_sdp_tap_packet(void *arg _U_, packet_info *pinfo _U_, epan_dissect_t *edt _U_, const void *arg2)
{
const sdp_package_t *sdp_package = (const sdp_package_t *) arg2;
if (sdp_service_infos == NULL) {
sdp_service_infos = sdp_package->service_infos;
}
return 0;
}
void
proto_register_bthfp(void)
{
@ -2048,8 +2035,6 @@ proto_reg_handoff_bthfp(void)
dissector_add_uint("btrfcomm.service", BTSDP_HFP_SERVICE_UUID, bthfp_handle);
dissector_add_uint("btrfcomm.service", BTSDP_HFP_GW_SERVICE_UUID, bthfp_handle);
dissector_add_handle("btrfcomm.channel", bthfp_handle);
register_tap_listener("btsdp", NULL, NULL, TL_IS_DISSECTOR_HELPER, NULL, bthfp_sdp_tap_packet, NULL);
}
/*

View File

@ -71,7 +71,6 @@ static gint ett_bthsp_parameters = -1;
static dissector_handle_t bthsp_handle;
static wmem_tree_t *fragments = NULL;
static wmem_tree_t *sdp_service_infos = NULL;
#define ROLE_UNKNOWN 0
#define ROLE_AG 1
@ -741,7 +740,7 @@ dissect_bthsp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
key[9].length = 0;
key[9].key = NULL;
service_info = (service_info_t *) wmem_tree_lookup32_array_le(sdp_service_infos, key);
service_info = btsdp_get_service_info(key);
if (service_info && service_info->interface_id == rfcomm_data->interface_id &&
service_info->adapter_id == rfcomm_data->adapter_id &&
service_info->sdp_psm == SDP_PSM_DEFAULT &&
@ -1028,18 +1027,6 @@ dissect_bthsp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
return offset;
}
static int
bthsp_sdp_tap_packet(void *arg _U_, packet_info *pinfo _U_, epan_dissect_t *edt _U_, const void *arg2)
{
const sdp_package_t *sdp_package = (const sdp_package_t *) arg2;
if (sdp_service_infos == NULL) {
sdp_service_infos = sdp_package->service_infos;
}
return 0;
}
void
proto_register_bthsp(void)
{
@ -1177,8 +1164,6 @@ proto_reg_handoff_bthsp(void)
dissector_add_uint("btrfcomm.service", BTSDP_HSP_HS_SERVICE_UUID, bthsp_handle);
dissector_add_uint("btrfcomm.service", BTSDP_HSP_GW_SERVICE_UUID, bthsp_handle);
dissector_add_handle("btrfcomm.channel", bthsp_handle);
register_tap_listener("btsdp", NULL, NULL, TL_IS_DISSECTOR_HELPER, NULL, bthsp_sdp_tap_packet, NULL);
}
/*

View File

@ -150,7 +150,6 @@ static dissector_table_t l2cap_service_dissector_table;
* For received CIDs we 'or' the cid with 0x80000000 in this table
*/
static wmem_tree_t *cid_to_psm_table = NULL;
static wmem_tree_t *sdp_service_infos = NULL;
typedef struct _config_data_t {
guint8 mode;
@ -473,10 +472,8 @@ get_service_uuid(packet_info *pinfo, btl2cap_data_t *l2cap_data, guint16 psm, gb
key[9].length = 0;
key[9].key = NULL;
if (sdp_service_infos)
service_info = (service_info_t *) wmem_tree_lookup32_array_le(sdp_service_infos, key);
else
service_info = NULL;
service_info = btsdp_get_service_info(key);
if (service_info && service_info->interface_id == interface_id &&
service_info->adapter_id == adapter_id &&
service_info->sdp_psm == SDP_PSM_DEFAULT &&
@ -1935,19 +1932,6 @@ dissect_btl2cap(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
}
static int
btl2cap_sdp_tap_packet(void *arg _U_, packet_info *pinfo _U_, epan_dissect_t *edt _U_, const void *arg2)
{
const sdp_package_t *sdp_package = (const sdp_package_t *) arg2;
if (sdp_service_infos == NULL) {
sdp_service_infos = sdp_package->service_infos;
}
return 0;
}
/* Register the protocol with Wireshark */
void
proto_register_btl2cap(void)
@ -2436,10 +2420,6 @@ proto_register_btl2cap(void)
void
proto_reg_handoff_btl2cap(void)
{
/* tap into the btsdp dissector to look for l2cap PSM infomation that
helps us determine the type of l2cap payload, i.e. which service is
using the PSM channel so we know which sub-dissector to call */
register_tap_listener("btsdp", NULL, NULL, TL_IS_DISSECTOR_HELPER, NULL, btl2cap_sdp_tap_packet, NULL);
}
/*

View File

@ -121,8 +121,6 @@ static gint ett_btgnss = -1;
static expert_field ei_btrfcomm_mcc_length_bad = EI_INIT;
static wmem_tree_t *sdp_service_infos = NULL;
static dissector_table_t rfcomm_service_dissector_table;
static dissector_table_t rfcomm_channel_dissector_table;
@ -660,9 +658,8 @@ dissect_btrfcomm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data
key[9].length = 0;
key[9].key = NULL;
if (sdp_service_infos) {
service_info = (service_info_t *) wmem_tree_lookup32_array_le(sdp_service_infos, key);
}
service_info = btsdp_get_service_info(key);
if (service_info && service_info->interface_id == l2cap_data->interface_id &&
service_info->adapter_id == l2cap_data->adapter_id &&
service_info->sdp_psm == SDP_PSM_DEFAULT &&
@ -1104,18 +1101,6 @@ proto_register_btrfcomm(void)
register_decode_as(&btrfcomm_chan_da);
}
static int
btrfcomm_sdp_tap_packet(void *arg _U_, packet_info *pinfo _U_, epan_dissect_t *edt _U_, const void *arg2)
{
const sdp_package_t *sdp_package = (const sdp_package_t *) arg2;
if (sdp_service_infos == NULL) {
sdp_service_infos = sdp_package->service_infos;
}
return 0;
}
void
proto_reg_handoff_btrfcomm(void)
{
@ -1126,11 +1111,6 @@ proto_reg_handoff_btrfcomm(void)
dissector_add_handle("btl2cap.cid", btrfcomm_handle);
data_handle = find_dissector("data");
/* tap into the btsdp dissector to look for rfcomm channel infomation that
helps us determine the type of rfcomm payload, i.e. which service is
using the channels so we know which sub-dissector to call */
register_tap_listener("btsdp", NULL, NULL, TL_IS_DISSECTOR_HELPER, NULL, btrfcomm_sdp_tap_packet, NULL);
}
/* Bluetooth Dial-Up Networking (DUN) profile dissection */

View File

@ -347,15 +347,11 @@ static expert_field ei_btsdp_continuation_state_none = EI_INIT;
static expert_field ei_btsdp_continuation_state_large = EI_INIT;
static expert_field ei_data_element_value_large = EI_INIT;
static gint btsdp_tap = -1;
static wmem_tree_t *tid_requests = NULL;
static wmem_tree_t *continuation_states = NULL;
static wmem_tree_t *record_handle_services = NULL;
static wmem_tree_t *service_infos = NULL;
static sdp_package_t sdp_package;
typedef struct _tid_request_t {
guint32 interface_id;
guint32 adapter_id;
@ -970,6 +966,13 @@ extern value_string_ext usb_langid_vals_ext;
void proto_register_btsdp(void);
void proto_reg_handoff_btsdp(void);
service_info_t* btsdp_get_service_info(wmem_tree_key_t* key)
{
if (service_infos == NULL)
return NULL;
return (service_info_t *)wmem_tree_lookup32_array_le(service_infos, key);
}
static uuid_t
get_most_specified_uuid(wmem_array_t *uuid_array)
@ -4263,8 +4266,6 @@ dissect_btsdp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
l2cap_data = (btl2cap_data_t *) data;
DISSECTOR_ASSERT(l2cap_data);
tap_queue_packet(btsdp_tap, NULL, (void *) &sdp_package);
switch (pinfo->p2p_dir) {
case P2P_DIR_SENT:
col_set_str(pinfo->cinfo, COL_INFO, "Sent ");
@ -5749,8 +5750,6 @@ proto_register_btsdp(void)
record_handle_services = wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope());
service_infos = wmem_tree_new_autoreset(wmem_epan_scope(), wmem_file_scope());
sdp_package.service_infos = service_infos;
btsdp_tap = register_tap("btsdp");
module = prefs_register_protocol(proto_btsdp, NULL);
prefs_register_static_text_preference(module, "bnep.version",

View File

@ -206,9 +206,7 @@ typedef struct _service_info_t {
extern value_string_ext vs_service_classes_ext;
typedef struct _sdp_package_t {
wmem_tree_t *service_infos;
} sdp_package_t;
extern service_info_t* btsdp_get_service_info(wmem_tree_key_t* key);
#endif