aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-packetlogger.c
diff options
context:
space:
mode:
Diffstat (limited to 'epan/dissectors/packet-packetlogger.c')
-rw-r--r--epan/dissectors/packet-packetlogger.c163
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);