diff options
Diffstat (limited to 'epan/dissectors/packet-packetlogger.c')
-rw-r--r-- | epan/dissectors/packet-packetlogger.c | 163 |
1 files changed, 85 insertions, 78 deletions
diff --git a/epan/dissectors/packet-packetlogger.c b/epan/dissectors/packet-packetlogger.c index ab65bc7fbb..b4608e147f 100644 --- a/epan/dissectors/packet-packetlogger.c +++ b/epan/dissectors/packet-packetlogger.c @@ -24,21 +24,21 @@ void proto_reg_handoff_packetlogger(void); #define PSNAME "PKTLOG" #define PFNAME "packetlogger" -static int proto_packetlogger = -1; - -static int hf_type = -1; -static int hf_info = -1; -static int hf_syslog = -1; -static int hf_syslog_process_id = -1; -static int hf_syslog_message_type = -1; -static int hf_syslog_process = -1; -static int hf_syslog_sender = -1; -static int hf_syslog_subsystem = -1; -static int hf_syslog_category = -1; -static int hf_syslog_message = -1; - -static gint ett_packetlogger = -1; -static gint ett_syslog = -1; +static int proto_packetlogger; + +static int hf_type; +static int hf_info; +static int hf_syslog; +static int hf_syslog_process_id; +static int hf_syslog_message_type; +static int hf_syslog_process; +static int hf_syslog_sender; +static int hf_syslog_subsystem; +static int hf_syslog_category; +static int hf_syslog_message; + +static gint ett_packetlogger; +static gint ett_syslog; static dissector_handle_t packetlogger_handle; static dissector_table_t hci_h1_table; @@ -57,6 +57,8 @@ static dissector_table_t hci_h1_table; #define PKT_HCI_EVENT 0x01 #define PKT_SENT_ACL_DATA 0x02 #define PKT_RECV_ACL_DATA 0x03 +#define PKT_SENT_SCO_DATA 0x08 +#define PKT_RECV_SCO_DATA 0x09 #define PKT_LMP_SEND 0x0A #define PKT_LMP_RECV 0x0B #define PKT_SYSLOG 0xF7 @@ -73,6 +75,8 @@ static const value_string type_vals[] = { { PKT_HCI_EVENT, "HCI Event" }, { PKT_SENT_ACL_DATA, "Sent ACL Data" }, { PKT_RECV_ACL_DATA, "Recv ACL Data" }, + { PKT_SENT_SCO_DATA, "Sent SCO Data" }, + { PKT_RECV_SCO_DATA, "Recv SCO Data" }, { PKT_LMP_SEND, "Sent LMP Data" }, { PKT_LMP_RECV, "Recv LMP Data" }, { PKT_SYSLOG, "Syslog" }, @@ -86,6 +90,26 @@ static const value_string type_vals[] = { { 0, NULL } }; +static void dissect_bthci_h1(tvbuff_t *tvb, packet_info *pinfo, + proto_tree *tree, proto_item *ti, guint8 pl_type, guint32 channel, + gboolean sent, bluetooth_data_t *bluetooth_data) +{ + struct bthci_phdr bthci; + + bthci.channel = channel; + bthci.sent = sent; + pinfo->p2p_dir = sent ? P2P_DIR_SENT : P2P_DIR_RECV; + + bluetooth_data->previous_protocol_data.bthci = &bthci; + proto_item_set_len (ti, 1); + + col_add_fstr (pinfo->cinfo, COL_INFO, "%s", val_to_str(pl_type, type_vals, "Unknown 0x%02x")); + if (!dissector_try_uint_new (hci_h1_table, bthci.channel, + tvb, pinfo, tree, TRUE, bluetooth_data)) { + call_data_dissector (tvb, pinfo, tree); + } +} + static void dissect_syslog(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { proto_item *ti = NULL; @@ -103,23 +127,23 @@ static void dissect_syslog(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) offset += 1; len = tvb_strsize (tvb, offset); - proto_tree_add_item (sub_tree, hf_syslog_process, tvb, offset, len, ENC_ASCII|ENC_NA); + proto_tree_add_item (sub_tree, hf_syslog_process, tvb, offset, len, ENC_ASCII); offset += len; len = tvb_strsize (tvb, offset); - proto_tree_add_item (sub_tree, hf_syslog_sender, tvb, offset, len, ENC_ASCII|ENC_NA); + proto_tree_add_item (sub_tree, hf_syslog_sender, tvb, offset, len, ENC_ASCII); offset += len; len = tvb_strsize (tvb, offset); - proto_tree_add_item (sub_tree, hf_syslog_subsystem, tvb, offset, len, ENC_ASCII|ENC_NA); + proto_tree_add_item (sub_tree, hf_syslog_subsystem, tvb, offset, len, ENC_ASCII); offset += len; len = tvb_strsize (tvb, offset); - proto_tree_add_item (sub_tree, hf_syslog_category, tvb, offset, len, ENC_ASCII|ENC_NA); + proto_tree_add_item (sub_tree, hf_syslog_category, tvb, offset, len, ENC_ASCII); offset += len; len = tvb_strsize (tvb, offset); - proto_tree_add_item (sub_tree, hf_syslog_message, tvb, offset, len, ENC_ASCII|ENC_NA); + proto_tree_add_item (sub_tree, hf_syslog_message, tvb, offset, len, ENC_ASCII); col_add_fstr (pinfo->cinfo, COL_INFO, "%s", tvb_format_stringzpad_wsp (pinfo->pool, tvb, offset, len)); } @@ -132,7 +156,6 @@ static int dissect_packetlogger(tvbuff_t *tvb, packet_info *pinfo, guint8 pl_type; gint len; bluetooth_data_t *bluetooth_data; - struct bthci_phdr bthci; bluetooth_data = (bluetooth_data_t *) data; @@ -149,64 +172,48 @@ static int dissect_packetlogger(tvbuff_t *tvb, packet_info *pinfo, len = tvb_reported_length_remaining (tvb, 1); next_tvb = tvb_new_subset_remaining (tvb, 1); - if (pl_type <= PKT_RECV_ACL_DATA) { - /* HCI H1 packages */ - switch (pl_type) { - case PKT_HCI_COMMAND: - bthci.channel = BTHCI_CHANNEL_COMMAND; - bthci.sent = P2P_DIR_SENT; - pinfo->p2p_dir = P2P_DIR_SENT; - break; - case PKT_HCI_EVENT: - bthci.channel = BTHCI_CHANNEL_EVENT; - bthci.sent = P2P_DIR_RECV; - pinfo->p2p_dir = P2P_DIR_RECV; - break; - case PKT_SENT_ACL_DATA: - bthci.channel = BTHCI_CHANNEL_ACL; - bthci.sent = P2P_DIR_SENT; - pinfo->p2p_dir = P2P_DIR_SENT; - break; - case PKT_RECV_ACL_DATA: - bthci.channel = BTHCI_CHANNEL_ACL; - bthci.sent = P2P_DIR_RECV; - pinfo->p2p_dir = P2P_DIR_RECV; - break; - default: - bthci.channel = pl_type; - bthci.sent = P2P_DIR_UNKNOWN; - pinfo->p2p_dir = P2P_DIR_UNKNOWN; - break; - } - bluetooth_data->previous_protocol_data.bthci = &bthci; - proto_item_set_len (ti, 1); - + switch (pl_type) { + case PKT_HCI_COMMAND: + dissect_bthci_h1 (next_tvb, pinfo, tree, ti, pl_type, BTHCI_CHANNEL_COMMAND, + TRUE, bluetooth_data); + break; + case PKT_HCI_EVENT: + dissect_bthci_h1 (next_tvb, pinfo, tree, ti, pl_type, BTHCI_CHANNEL_EVENT, + FALSE, bluetooth_data); + break; + case PKT_SENT_ACL_DATA: + dissect_bthci_h1 (next_tvb, pinfo, tree, ti, pl_type, BTHCI_CHANNEL_ACL, + TRUE, bluetooth_data); + break; + case PKT_RECV_ACL_DATA: + dissect_bthci_h1 (next_tvb, pinfo, tree, ti, pl_type, BTHCI_CHANNEL_ACL, + FALSE, bluetooth_data); + break; + case PKT_SENT_SCO_DATA: + dissect_bthci_h1 (next_tvb, pinfo, tree, ti, pl_type, BTHCI_CHANNEL_SCO, + TRUE, bluetooth_data); + break; + case PKT_RECV_SCO_DATA: + dissect_bthci_h1 (next_tvb, pinfo, tree, ti, pl_type, BTHCI_CHANNEL_SCO, + FALSE, bluetooth_data); + break; + case PKT_SYSLOG: + dissect_syslog (next_tvb, pinfo, packetlogger_tree); + break; + case PKT_KERNEL: + case PKT_KERNEL_DEBUG: + case PKT_ERROR: + case PKT_POWER: + case PKT_NOTE: + case PKT_CONFIG: + case PKT_NEW_CONTROLLER: + proto_tree_add_item (packetlogger_tree, hf_info, next_tvb, 0, len, ENC_ASCII); + col_add_fstr (pinfo->cinfo, COL_INFO, "%s", tvb_format_stringzpad_wsp (pinfo->pool, next_tvb, 0, len)); + break; + default: + call_data_dissector(next_tvb, pinfo, tree); col_add_fstr (pinfo->cinfo, COL_INFO, "%s", val_to_str(pl_type, type_vals, "Unknown 0x%02x")); - if (!dissector_try_uint_new(hci_h1_table, bthci.channel, - next_tvb, pinfo, tree, TRUE, bluetooth_data)) { - call_data_dissector(next_tvb, pinfo, tree); - } - } else { - /* PacketLogger data */ - switch (pl_type) { - case PKT_SYSLOG: - dissect_syslog (next_tvb, pinfo, packetlogger_tree); - break; - case PKT_KERNEL: - case PKT_KERNEL_DEBUG: - case PKT_ERROR: - case PKT_POWER: - case PKT_NOTE: - case PKT_CONFIG: - case PKT_NEW_CONTROLLER: - proto_tree_add_item (packetlogger_tree, hf_info, next_tvb, 0, len, ENC_ASCII|ENC_NA); - col_add_fstr (pinfo->cinfo, COL_INFO, "%s", tvb_format_stringzpad_wsp (pinfo->pool, next_tvb, 0, len)); - break; - default: - call_data_dissector(next_tvb, pinfo, tree); - col_add_fstr (pinfo->cinfo, COL_INFO, "%s", val_to_str(pl_type, type_vals, "Unknown 0x%02x")); - break; - } + break; } return tvb_captured_length(tvb); |