void cw_dbg_dmp_(int level, const char *file, int line, const uint8_t * data, int len, const char *format, ...) { if (!cw_dbg_is_level(level)) return; char *dmp = cw_dbg_mkdmp(data,len); cw_dbg(level,"%s%s",format,dmp); free(dmp); }
void cw_dbg_elem_colored(int level, struct conn *conn, int msg, int msgelem, const uint8_t * msgbuf, int len) { if (!cw_dbg_is_level(level)) return; const char *elemname; char vendorname[256]; char vendor_details[265]; *vendor_details = 0; if (msgelem == CW_ELEM_VENDOR_SPECIFIC_PAYLOAD) { uint32_t vendor_id = ntohl(*((uint32_t *) msgbuf)); int type = ntohs(*((uint16_t *) (msgbuf + 4))); cw_format_vendor(vendor_details, vendor_id, type, msgbuf); sprintf(vendorname, "%s/%s/%s", cw_strelemp(conn->actions, msgelem), (char *) cw_strvendor(vendor_id), vendor_details); elemname = vendorname; } else { elemname = cw_strelemp(conn->actions, msgelem); } if (!cw_dbg_is_level(DBG_ELEM_DMP)){ cw_dbg(DBG_ELEM, "%d (%s), len=%d", msgelem, elemname, len); } else{ char *dmp = cw_dbg_mkdmp(msgbuf,len); cw_dbg(DBG_ELEM, "%d (%s), len=%d%s%s", msgelem, elemname, len, get_dbg_color_ontext(DBG_ELEM_DMP), dmp); free(dmp); } }
static int cw_read_wtp_descriptor_versions(mbag_t mbag, uint8_t * data, int len, int silent) { int i = 0; while (i<len) { if (i + 8 > len) { if (!silent) cw_dbg(DBG_ELEM_ERR, "WTP descriptor subelement to long, length=%d>%d", i + 8, len); return 0; } uint32_t vendor_id = cw_get_dword(data + i); uint32_t val = cw_get_dword(data + i + 4); int subtype = (val >> 16) & 0xffff; int sublen = val & 0xffff; i += 8; if (sublen + i > len) { if (!silent) cw_dbg(DBG_ELEM_ERR, "WTP Descriptor sub-element too long, length = %d", sublen); return 0; } if (!silent) { char *dmp; char *dmpmem = NULL; if (cw_dbg_is_level(DBG_SUBELEM_DMP)) { dmpmem = cw_dbg_mkdmp(data + i, sublen); dmp = dmpmem; } else dmp = ""; cw_dbg(DBG_SUBELEM, "WTP Descriptor subtype=%d,len=%d%s", subtype, sublen, dmp); if (dmpmem) free(dmpmem); } switch (subtype) { case CW_SUBELEM_WTP_HARDWARE_VERSION: /* mbag_set_dword(mbag, CW_ITEM_WTP_HARDWARE_VENDOR, vendor_id); mbag_set_bstrn(mbag, CW_ITEM_WTP_HARDWARE_VERSION, data + i, sublen); */ mbag_set_vendorstr(mbag, CW_ITEM_WTP_HARDWARE_VERSION, vendor_id, data + i, sublen); break; case CW_SUBELEM_WTP_SOFTWARE_VERSION: mbag_set_vendorstr(mbag, CW_ITEM_WTP_SOFTWARE_VERSION, vendor_id, data + i, sublen); /* mbag_set_dword(mbag, CW_ITEM_WTP_SOFTWARE_VENDOR, vendor_id); mbag_set_bstrn(mbag, CW_ITEM_WTP_SOFTWARE_VERSION, data + i, sublen); */ break; case CW_SUBELEM_WTP_BOOTLOADER_VERSION: mbag_set_vendorstr(mbag, CW_ITEM_WTP_BOOTLOADER_VERSION, vendor_id, data + i, sublen); /* mbag_set_dword(mbag, CW_ITEM_WTP_BOOTLOADER_VENDOR, vendor_id); mbag_set_bstrn(mbag, CW_ITEM_WTP_BOOTLOADER_VERSION, data + i, sublen); */ break; default: if (!silent) cw_dbg(DBG_ELEM_ERR, "Unknown WTP descriptor subelement, type = %d", subtype); break; } i += sublen; } //while (i < len); return 1; }