}
}
-void avctp_dump(int level, struct frame *frm)
+void avctp_dump(int level, struct frame *frm, uint16_t psm)
{
uint8_t hdr;
uint16_t pid;
pt2str(hdr), hdr & 0x0c, hdr >> 4, pid);
if (pid == SDP_UUID_AV_REMOTE || pid == SDP_UUID_AV_REMOTE_TARGET)
- avrcp_dump(level + 1, frm);
+ avrcp_dump(level + 1, frm, psm);
else
raw_dump(level + 1, frm);
}
}
}
-void avrcp_dump(int level, struct frame *frm)
+static void avrcp_browsing_dump(int level, struct frame *frm)
+{
+ uint8_t pduid;
+ uint16_t len;
+
+ pduid = get_u8(frm);
+ len = get_u16(frm);
+
+ printf("AVRCP: %s: len 0x%04x\n", pdu2str(pduid), len);
+
+ if (len != frm->len) {
+ p_indent(level, frm);
+ printf("PDU Malformed\n");
+ raw_dump(level, frm);
+ return;
+ }
+
+ switch (pduid) {
+ default:
+ raw_dump(level, frm);
+ }
+}
+
+static void avrcp_control_dump(int level, struct frame *frm)
{
uint8_t ctype, address, subunit, opcode, company[3];
int i;
- p_indent(level, frm);
-
ctype = get_u8(frm);
address = get_u8(frm);
opcode = get_u8(frm);
raw_dump(level, frm);
}
}
+
+void avrcp_dump(int level, struct frame *frm, uint16_t psm)
+{
+ p_indent(level, frm);
+
+ switch (psm) {
+ case 0x17:
+ avrcp_control_dump(level, frm);
+ break;
+ case 0x1B:
+ avrcp_browsing_dump(level, frm);
+ break;
+ default:
+ raw_dump(level, frm);
+ }
+}
break;
case 0x17:
+ case 0x1B:
if (!p_filter(FILT_AVCTP))
- avctp_dump(level, frm);
+ avctp_dump(level, frm, psm);
else
raw_dump(level + 1, frm);
break;
void hidp_dump(int level, struct frame *frm);
void hcrp_dump(int level, struct frame *frm);
void avdtp_dump(int level, struct frame *frm);
-void avctp_dump(int level, struct frame *frm);
-void avrcp_dump(int level, struct frame *frm);
+void avctp_dump(int level, struct frame *frm, uint16_t psm);
+void avrcp_dump(int level, struct frame *frm, uint16_t psm);
void att_dump(int level, struct frame *frm);
void smp_dump(int level, struct frame *frm);
void sap_dump(int level, struct frame *frm);