From 888e0d0ee8d85e1dc432d6f2f89101c5c1ec3b7f Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Mon, 10 Sep 2007 00:07:50 +0000 Subject: [PATCH] hcidump: Separate RFC mode parsing into its own function --- tools/parser/l2cap.c | 62 ++++++++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 28 deletions(-) diff --git a/tools/parser/l2cap.c b/tools/parser/l2cap.c index 944e1ba13..e92a8f696 100644 --- a/tools/parser/l2cap.c +++ b/tools/parser/l2cap.c @@ -420,29 +420,14 @@ static inline void conn_rsp(int level, struct frame *frm) printf("\n"); } -static void conf_list(int level, void *ptr, int len) +static void conf_mode(void *ptr, int len, int in, uint16_t cid) { - uint8_t *list = ptr; - int i; + uint8_t mode; - p_indent(level, 0); - for (i = 0; i < len; i++) { - switch (list[i] & 0x7f) { - case L2CAP_CONF_MTU: - printf("MTU "); - break; - case L2CAP_CONF_FLUSH_TO: - printf("FlushTo "); - break; - case L2CAP_CONF_QOS: - printf("QoS "); - break; - case L2CAP_CONF_RFC: - printf("RFC "); - break; - } - } - printf("\n"); + mode = *((uint8_t *) ptr); + set_mode(in, cid, mode); + + printf("RFC 0x%02x (%s)", mode, mode2str(mode)); } static void conf_opt(int level, void *ptr, int len, int in, uint16_t cid) @@ -450,7 +435,6 @@ static void conf_opt(int level, void *ptr, int len, int in, uint16_t cid) p_indent(level, 0); while (len > 0) { l2cap_conf_opt *h = ptr; - uint8_t mode; ptr += L2CAP_CONF_OPT_SIZE + h->len; len -= L2CAP_CONF_OPT_SIZE + h->len; @@ -478,12 +462,7 @@ static void conf_opt(int level, void *ptr, int len, int in, uint16_t cid) break; case L2CAP_CONF_RFC: - printf("Mode"); - if (h->len > 0) { - mode = *h->val; - set_mode(in, cid, mode); - printf(" 0x%02x (%s)", mode, mode2str(mode)); - } + conf_mode(h->val, h->len, in, cid); break; default: @@ -499,6 +478,33 @@ static void conf_opt(int level, void *ptr, int len, int in, uint16_t cid) printf("\n"); } +static void conf_list(int level, uint8_t *list, int len) +{ + int i; + + p_indent(level, 0); + for (i = 0; i < len; i++) { + switch (list[i] & 0x7f) { + case L2CAP_CONF_MTU: + printf("MTU "); + break; + case L2CAP_CONF_FLUSH_TO: + printf("FlushTo "); + break; + case L2CAP_CONF_QOS: + printf("QoS "); + break; + case L2CAP_CONF_RFC: + printf("RFC "); + break; + default: + printf("%2.2x ", list[i] & 0x7f); + break; + } + } + printf("\n"); +} + static inline void conf_req(int level, l2cap_cmd_hdr *cmd, struct frame *frm) { l2cap_conf_req *h = frm->ptr; -- 2.47.3