📄 hci.c
字号:
periodic_inquiry_cp *cp = frm->ptr; p_indent(level, frm); printf("max %d min %d lap 0x%2.2x%2.2x%2.2x len %d num %d\n", btohs(cp->max_period), btohs(cp->min_period), cp->lap[2], cp->lap[1], cp->lap[0], cp->length, cp->num_rsp);}static inline void create_conn_dump(int level, struct frame *frm){ create_conn_cp *cp = frm->ptr; uint16_t ptype = btohs(cp->pkt_type); uint16_t clkoffset = btohs(cp->clock_offset); char addr[18], *str; p_indent(level, frm); ba2str(&cp->bdaddr, addr); printf("bdaddr %s ptype 0x%4.4x rswitch 0x%2.2x clkoffset 0x%4.4x%s\n", addr, ptype, cp->role_switch, clkoffset & 0x7fff, clkoffset & 0x8000 ? " (valid)" : ""); str = hci_ptypetostr(ptype); if (str) { p_indent(level, frm); printf("Packet type: %s\n", str); free(str); }}static inline void disconnect_dump(int level, struct frame *frm){ disconnect_cp *cp = frm->ptr; p_indent(level, frm); printf("handle %d reason 0x%2.2x\n", btohs(cp->handle), cp->reason); p_indent(level, frm); printf("Reason: %s\n", status2str(cp->reason));}static inline void add_sco_dump(int level, struct frame *frm){ add_sco_cp *cp = frm->ptr; uint16_t ptype = btohs(cp->pkt_type); char *str; p_indent(level, frm); printf("handle %d ptype 0x%4.4x\n", btohs(cp->handle), ptype); str = hci_ptypetostr(ptype); if (str) { p_indent(level, frm); printf("Packet type: %s\n", str); free(str); }}static inline void accept_conn_req_dump(int level, struct frame *frm){ accept_conn_req_cp *cp = frm->ptr; char addr[18]; p_indent(level, frm); ba2str(&cp->bdaddr, addr); printf("bdaddr %s role 0x%2.2x\n", addr, cp->role); p_indent(level, frm); printf("Role: %s\n", role2str(cp->role));}static inline void reject_conn_req_dump(int level, struct frame *frm){ reject_conn_req_cp *cp = frm->ptr; char addr[18]; p_indent(level, frm); ba2str(&cp->bdaddr, addr); printf("bdaddr %s reason 0x%2.2x\n", addr, cp->reason); p_indent(level, frm); printf("Reason: %s\n", status2str(cp->reason));}static inline void pin_code_reply_dump(int level, struct frame *frm){ pin_code_reply_cp *cp = frm->ptr; char addr[18], pin[17]; p_indent(level, frm); ba2str(&cp->bdaddr, addr); memset(pin, 0, sizeof(pin)); if (parser.flags & DUMP_NOVENDOR) memset(pin, '*', cp->pin_len); else memcpy(pin, cp->pin_code, cp->pin_len); printf("bdaddr %s len %d pin \'%s\'\n", addr, cp->pin_len, pin);}static inline void link_key_reply_dump(int level, struct frame *frm){ link_key_reply_cp *cp = frm->ptr; char addr[18]; int i; p_indent(level, frm); ba2str(&cp->bdaddr, addr); printf("bdaddr %s key ", addr); for (i = 0; i < 16; i++) if (parser.flags & DUMP_NOVENDOR) printf("**"); else printf("%2.2X", cp->link_key[i]); printf("\n");}static inline void pin_code_neg_reply_dump(int level, struct frame *frm){ bdaddr_t *bdaddr = frm->ptr; char addr[18]; p_indent(level, frm); ba2str(bdaddr, addr); printf("bdaddr %s\n", addr);}static inline void set_conn_encrypt_dump(int level, struct frame *frm){ set_conn_encrypt_cp *cp = frm->ptr; p_indent(level, frm); printf("handle %d encrypt 0x%2.2x\n", btohs(cp->handle), cp->encrypt);}static inline void remote_name_req_dump(int level, struct frame *frm){ remote_name_req_cp *cp = frm->ptr; uint16_t clkoffset = btohs(cp->clock_offset); char addr[18]; p_indent(level, frm); ba2str(&cp->bdaddr, addr); printf("bdaddr %s mode %d clkoffset 0x%4.4x%s\n", addr, cp->pscan_rep_mode, clkoffset & 0x7fff, clkoffset & 0x8000 ? " (valid)" : "");}static inline void master_link_key_dump(int level, struct frame *frm){ master_link_key_cp *cp = frm->ptr; p_indent(level, frm); printf("flag %d\n", cp->key_flag);}static inline void read_remote_ext_features_dump(int level, struct frame *frm){ read_remote_ext_features_cp *cp = frm->ptr; p_indent(level, frm); printf("handle %d page %d\n", btohs(cp->handle), cp->page_num);}static inline void hold_mode_dump(int level, struct frame *frm){ hold_mode_cp *cp = frm->ptr; p_indent(level, frm); printf("handle %d max %d min %d\n", btohs(cp->handle), btohs(cp->max_interval), btohs(cp->min_interval));}static inline void sniff_mode_dump(int level, struct frame *frm){ sniff_mode_cp *cp = frm->ptr; p_indent(level, frm); printf("handle %d max %d min %d attempt %d timeout %d\n", btohs(cp->handle), btohs(cp->max_interval), btohs(cp->min_interval), btohs(cp->attempt), btohs(cp->timeout));}static inline void write_link_policy_dump(int level, struct frame *frm){ write_link_policy_cp *cp = frm->ptr; uint16_t policy = btohs(cp->policy); char *str; p_indent(level, frm); printf("handle %d policy 0x%2.2x\n", btohs(cp->handle), policy); str = hci_lptostr(policy); if (str) { p_indent(level, frm); printf("Link policy: %s\n", str); free(str); }}static inline void sniff_subrate_dump(int level, struct frame *frm){ sniff_subrate_cp *cp = frm->ptr; p_indent(level, frm); printf("handle %d\n", btohs(cp->handle)); p_indent(level, frm); printf("max latency remote %d local %d\n", btohs(cp->max_remote_latency), btohs(cp->max_local_latency)); p_indent(level, frm); printf("min timeout remote %d local %d\n", btohs(cp->min_remote_timeout), btohs(cp->min_local_timeout));}static inline void set_event_mask_dump(int level, struct frame *frm){ set_event_mask_cp *cp = frm->ptr; int i; p_indent(level, frm); printf("Mask: 0x"); for (i = 0; i < 8; i++) printf("%2.2x", cp->mask[i]); printf("\n");}static inline void set_event_flt_dump(int level, struct frame *frm){ set_event_flt_cp *cp = frm->ptr; uint8_t dev_class[3], dev_mask[3]; char addr[18]; p_indent(level, frm); printf("type %d condition %d\n", cp->flt_type, (cp->flt_type == 0) ? 0 : cp->cond_type); switch (cp->flt_type) { case FLT_CLEAR_ALL: p_indent(level, frm); printf("Clear all filters\n"); break; case FLT_INQ_RESULT: p_indent(level, frm); printf("Inquiry result"); switch (cp->cond_type) { case INQ_RESULT_RETURN_ALL: printf(" for all devices\n"); break; case INQ_RESULT_RETURN_CLASS: memcpy(dev_class, cp->condition, 3); memcpy(dev_mask, cp->condition + 3, 3); printf(" with class 0x%2.2x%2.2x%2.2x mask 0x%2.2x%2.2x%2.2x\n", dev_class[2], dev_class[1], dev_class[0], dev_mask[2], dev_mask[1], dev_mask[0]); break; case INQ_RESULT_RETURN_BDADDR: ba2str((bdaddr_t *) cp->condition, addr); printf(" with bdaddr %s\n", addr); break; default: printf("\n"); break; } break; case FLT_CONN_SETUP: p_indent(level, frm); printf("Connection setup"); switch (cp->cond_type) { case CONN_SETUP_ALLOW_ALL: case CONN_SETUP_ALLOW_CLASS: case CONN_SETUP_ALLOW_BDADDR: default: printf("\n"); break; } break; }}static inline void write_pin_type_dump(int level, struct frame *frm){ write_pin_type_cp *cp = frm->ptr; p_indent(level, frm); printf("type %d\n", cp->pin_type);}static inline void request_stored_link_key_dump(int level, struct frame *frm){ read_stored_link_key_cp *cp = frm->ptr; char addr[18]; p_indent(level, frm); ba2str(&cp->bdaddr, addr); printf("bdaddr %s all %d\n", addr, cp->read_all);}static inline void return_link_keys_dump(int level, struct frame *frm){ uint8_t num = get_u8(frm); uint8_t key[16]; char addr[18]; int i, n; for (n = 0; n < num; n++) { ba2str(frm->ptr, addr); memcpy(key, frm->ptr + 6, 16); p_indent(level, frm); printf("bdaddr %s key ", addr); for (i = 0; i < 16; i++) if (parser.flags & DUMP_NOVENDOR) printf("**"); else printf("%2.2X", key[i]); printf("\n"); frm->ptr += 2; frm->len -= 2; }}static inline void change_local_name_dump(int level, struct frame *frm){ change_local_name_cp *cp = frm->ptr; char name[249]; int i; memset(name, 0, sizeof(name)); for (i = 0; i < 248 && cp->name[i]; i++) if (isprint(cp->name[i])) name[i] = cp->name[i]; else name[i] = '.'; p_indent(level, frm); printf("name \'%s\'\n", name);}static inline void write_class_of_dev_dump(int level, struct frame *frm){ write_class_of_dev_cp *cp = frm->ptr; p_indent(level, frm); printf("class 0x%2.2x%2.2x%2.2x\n", cp->dev_class[2], cp->dev_class[1], cp->dev_class[0]);}static inline void write_voice_setting_dump(int level, struct frame *frm){ write_voice_setting_cp *cp = frm->ptr; p_indent(level, frm); printf("voice setting 0x%4.4x\n", btohs(cp->voice_setting));}static inline void write_current_iac_lap_dump(int level, struct frame *frm){ write_current_iac_lap_cp *cp = frm->ptr; int i; for (i = 0; i < cp->num_current_iac; i++) { p_indent(level, frm); printf("IAC 0x%2.2x%2.2x%2.2x", cp->lap[i][2], cp->lap[i][1], cp->lap[i][0]); if (cp->lap[i][2] == 0x9e && cp->lap[i][1] == 0x8b) { switch (cp->lap[i][0]) { case 0x00: printf(" (Limited Inquiry Access Code)"); break; case 0x33: printf(" (General Inquiry Access Code)"); break; } } printf("\n"); }}static inline void write_scan_enable_dump(int level, struct frame *frm){ uint8_t enable = get_u8(frm); p_indent(level, frm); printf("enable %d\n", enable);}static inline void write_page_timeout_dump(int level, struct frame *frm){ write_page_timeout_cp *cp = frm->ptr; p_indent(level, frm); printf("timeout %d\n", btohs(cp->timeout));}static inline void write_page_activity_dump(int level, struct frame *frm){ write_page_activity_cp *cp = frm->ptr; p_indent(level, frm); printf("interval %d window %d\n", btohs(cp->interval), btohs(cp->window));}static inline void write_inquiry_scan_type_dump(int level, struct frame *frm){ write_inquiry_scan_type_cp *cp = frm->ptr; p_indent(level, frm); printf("type %d\n", cp->type);}static inline void write_inquiry_mode_dump(int level, struct frame *frm){ write_inquiry_mode_cp *cp = frm->ptr; p_indent(level, frm); printf("mode %d\n", cp->mode);}static inline void write_link_supervision_timeout_dump(int level, struct frame *frm){ write_link_supervision_timeout_cp *cp = frm->ptr; p_indent(level, frm); printf("handle %d timeout %d\n", btohs(cp->handle), btohs(cp->link_sup_to));}static inline void write_ext_inquiry_response_dump(int level, struct frame *frm){ write_ext_inquiry_response_cp *cp = frm->ptr; p_indent(level, frm); printf("fec 0x%2.2x\n", cp->fec); frm->ptr++; frm->len--; ext_inquiry_response_dump(level, frm);}static inline void request_transmit_power_level_dump(int level, struct frame *frm){ read_transmit_power_level_cp *cp = frm->ptr; p_indent(level, frm); printf("handle %d type %d (%s)\n", btohs(cp->handle), cp->type, cp->type ? "maximum" : "current");}static inline void request_local_ext_features_dump(int level, struct frame *frm){ read_local_ext_features_cp *cp = frm->ptr; p_indent(level, frm); printf("page %d\n", cp->page_num);}static inline void request_clock_dump(int level, struct frame *frm){ read_clock_cp *cp = frm->ptr; p_indent(level, frm); printf("handle %d which %d (%s)\n", btohs(cp->handle), cp->which_clock, cp->which_clock ? "piconet" : "local");}static inline void command_dump(int level, struct frame *frm){ hci_command_hdr *hdr = frm->ptr; uint16_t opcode = btohs(hdr->opcode); uint16_t ogf = cmd_opcode_ogf(opcode); uint16_t ocf = cmd_opcode_ocf(opcode); if (p_filter(FILT_HCI)) return; if (ogf == OGF_VENDOR_CMD && (parser.flags & DUMP_NOVENDOR)) return; p_indent(level, frm); printf("HCI Command: %s (0x%2.2x|0x%4.4x) plen %d\n", opcode2str(opcode), ogf, ocf, hdr->plen); frm->ptr += HCI_COMMAND_HDR_SIZE; frm->len -= HCI_COMMAND_HDR_SIZE; if (ogf == OGF_VENDOR_CMD) { if (ocf == 0 && get_manufacturer() == 10) { csr_dump(level + 1, frm); return; } } if (!(parser.flags & DUMP_VERBOSE)) { raw_dump(level, frm); return; } switch (ogf) { case OGF_LINK_CTL: switch (ocf) { case OCF_INQUIRY: inquiry_dump(level + 1, frm); return; case OCF_PERIODIC_INQUIRY: periodic_inquiry_dump(level + 1, frm); return; case OCF_INQUIRY_CANCEL: case OCF_EXIT_PERIODIC_INQUIRY: return; case OCF_CREATE_CONN: create_conn_dump(level + 1, frm); return; case OCF_DISCONNECT: disconnect_dump(level + 1, frm); return; case OCF_CREATE_CONN_CANCEL: case OCF_REMOTE_NAME_REQ_CANCEL: case OCF_ACCEPT_SYNC_CONN_REQ: bdaddr_command_dump(level + 1, frm); return; case OCF_ADD_SCO: case OCF_SET_CONN_PTYPE: add_sco_dump(level + 1, frm); return; case OCF_ACCEPT_CONN_REQ: accept_conn_req_dump(level + 1, frm); return; case OCF_REJECT_CONN_REQ: case OCF_REJECT_SYNC_CONN_REQ: reject_conn_req_dump(level + 1, frm); return; case OCF_PIN_CODE_REPLY: pin_code_reply_dump(level + 1, frm); return; case OCF_LINK_KEY_REPLY: link_key_reply_dump(level + 1, frm); return; case OCF_PIN_CODE_NEG_REPLY:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -