void p2p_copy_filter_devname(char *dst, size_t dst_len, const void *src, size_t src_len) { size_t i; if (src_len >= dst_len) src_len = dst_len - 1; os_memcpy(dst, src, src_len); dst[src_len] = '\0'; for (i = 0; i < src_len; i++) { if (dst[i] == '\0') break; if (is_ctrl_char(dst[i])) dst[i] = '_'; } }
int wps_attr_text(struct wpabuf *data, char *buf, char *end) { struct wps_parse_attr attr; char *pos = buf; int ret; if (wps_parse_msg(data, &attr) < 0) return -1; if (attr.wps_state) { if (*attr.wps_state == WPS_STATE_NOT_CONFIGURED) ret = os_snprintf(pos, end - pos, "wps_state=unconfigured\n"); else if (*attr.wps_state == WPS_STATE_CONFIGURED) ret = os_snprintf(pos, end - pos, "wps_state=configured\n"); else ret = 0; if (os_snprintf_error(end - pos, ret)) return pos - buf; pos += ret; } if (attr.ap_setup_locked && *attr.ap_setup_locked) { ret = os_snprintf(pos, end - pos, "wps_ap_setup_locked=1\n"); if (os_snprintf_error(end - pos, ret)) return pos - buf; pos += ret; } if (attr.selected_registrar && *attr.selected_registrar) { ret = os_snprintf(pos, end - pos, "wps_selected_registrar=1\n"); if (os_snprintf_error(end - pos, ret)) return pos - buf; pos += ret; } if (attr.dev_password_id) { ret = os_snprintf(pos, end - pos, "wps_device_password_id=%u\n", WPA_GET_BE16(attr.dev_password_id)); if (os_snprintf_error(end - pos, ret)) return pos - buf; pos += ret; } if (attr.sel_reg_config_methods) { ret = os_snprintf(pos, end - pos, "wps_selected_registrar_config_methods=" "0x%04x\n", WPA_GET_BE16(attr.sel_reg_config_methods)); if (os_snprintf_error(end - pos, ret)) return pos - buf; pos += ret; } if (attr.primary_dev_type) { char devtype[WPS_DEV_TYPE_BUFSIZE]; ret = os_snprintf(pos, end - pos, "wps_primary_device_type=%s\n", wps_dev_type_bin2str(attr.primary_dev_type, devtype, sizeof(devtype))); if (os_snprintf_error(end - pos, ret)) return pos - buf; pos += ret; } if (attr.dev_name) { char *str = os_malloc(attr.dev_name_len + 1); size_t i; if (str == NULL) return pos - buf; for (i = 0; i < attr.dev_name_len; i++) { if (attr.dev_name[i] == 0 || is_ctrl_char(attr.dev_name[i])) str[i] = '_'; else str[i] = attr.dev_name[i]; } str[i] = '\0'; ret = os_snprintf(pos, end - pos, "wps_device_name=%s\n", str); os_free(str); if (os_snprintf_error(end - pos, ret)) return pos - buf; pos += ret; } if (attr.config_methods) { ret = os_snprintf(pos, end - pos, "wps_config_methods=0x%04x\n", WPA_GET_BE16(attr.config_methods)); if (os_snprintf_error(end - pos, ret)) return pos - buf; pos += ret; } return pos - buf; }
static int p2p_group_info_text(const u8 *gi, size_t gi_len, char *buf, char *end) { char *pos = buf; int ret; struct p2p_group_info info; unsigned int i; if (p2p_group_info_parse(gi, gi_len, &info) < 0) return 0; for (i = 0; i < info.num_clients; i++) { struct p2p_client_info *cli; char name[WPS_DEV_NAME_MAX_LEN + 1]; char devtype[WPS_DEV_TYPE_BUFSIZE]; u8 s; int count; cli = &info.client[i]; ret = os_snprintf(pos, end - pos, "p2p_group_client: " "dev=" MACSTR " iface=" MACSTR, MAC2STR(cli->p2p_device_addr), MAC2STR(cli->p2p_interface_addr)); if (os_snprintf_error(end - pos, ret)) return pos - buf; pos += ret; ret = os_snprintf(pos, end - pos, " dev_capab=0x%x config_methods=0x%x " "dev_type=%s", cli->dev_capab, cli->config_methods, wps_dev_type_bin2str(cli->pri_dev_type, devtype, sizeof(devtype))); if (os_snprintf_error(end - pos, ret)) return pos - buf; pos += ret; for (s = 0; s < cli->num_sec_dev_types; s++) { ret = os_snprintf(pos, end - pos, " dev_type=%s", wps_dev_type_bin2str( &cli->sec_dev_types[s * 8], devtype, sizeof(devtype))); if (os_snprintf_error(end - pos, ret)) return pos - buf; pos += ret; } os_memcpy(name, cli->dev_name, cli->dev_name_len); name[cli->dev_name_len] = '\0'; count = (int) cli->dev_name_len - 1; while (count >= 0) { if (is_ctrl_char(name[count])) name[count] = '_'; count--; } ret = os_snprintf(pos, end - pos, " dev_name='%s'\n", name); if (os_snprintf_error(end - pos, ret)) return pos - buf; pos += ret; } return pos - buf; }