avctp.c 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /*
  3. *
  4. * BlueZ - Bluetooth protocol stack for Linux
  5. *
  6. * Copyright (C) 2004-2011 Marcel Holtmann <marcel@holtmann.org>
  7. *
  8. *
  9. */
  10. #ifdef HAVE_CONFIG_H
  11. #include <config.h>
  12. #endif
  13. #define _GNU_SOURCE
  14. #include <stdio.h>
  15. #include <errno.h>
  16. #include <unistd.h>
  17. #include <stdlib.h>
  18. #include <string.h>
  19. #include "parser.h"
  20. #include "sdp.h"
  21. static char *pt2str(uint8_t hdr)
  22. {
  23. switch (hdr & 0x0c) {
  24. case 0x00:
  25. return "";
  26. case 0x04:
  27. return "Start";
  28. case 0x08:
  29. return "Cont";
  30. case 0x0c:
  31. return "End";
  32. default:
  33. return "Unk";
  34. }
  35. }
  36. void avctp_dump(int level, struct frame *frm, uint16_t psm)
  37. {
  38. uint8_t hdr;
  39. uint16_t pid;
  40. p_indent(level, frm);
  41. hdr = p_get_u8(frm);
  42. pid = p_get_u16(frm);
  43. printf("AVCTP %s: %s %s: pt 0x%02x transaction %d pid 0x%04x\n",
  44. psm == 23 ? "Control" : "Browsing",
  45. hdr & 0x02 ? "Response" : "Command",
  46. pt2str(hdr), hdr & 0x0c, hdr >> 4, pid);
  47. if (pid == SDP_UUID_AV_REMOTE || pid == SDP_UUID_AV_REMOTE_TARGET)
  48. avrcp_dump(level + 1, frm, hdr, psm);
  49. else
  50. raw_dump(level + 1, frm);
  51. }