void set_hide(bool hide) { if (hide) set_hide_mode(); else unset_hide_mode(); }
static void receive_call_result_data(struct ubus_request *req, int type, struct blob_attr *msg) { struct blob_attr *tb[__INIT_MAX]; char *token, *ssid, *ssid_pwd; int len, ret; if (!msg) return; ret = 0; blobmsg_parse(init_policy, __INIT_MAX, tb, blob_data(msg), blob_len(msg)); if(tb[INIT_TOKEN] && tb[INIT_SSID] && tb[INIT_SSID_PWD]){ token = blobmsg_data(tb[INIT_TOKEN]); ssid = blobmsg_data(tb[INIT_SSID]); ssid_pwd = blobmsg_data(tb[INIT_SSID_PWD]); // todo dlog("recv token[%s], ssid[%s] ssid_pwd[%s]\n", token, ssid, ssid_pwd); // printf("recv token[%s], ssid[%s] ssid_pwd[%s]\n", token, ssid, ssid_pwd); char *base64 = malloc(MAX_ALLOC_LEN); char *router_key_iv = malloc(MAX_ALLOC_LEN); char *r_ssid = malloc(MAX_ALLOC_LEN); char *r_pwd = malloc(MAX_ALLOC_LEN); char base64_ssid[MAX_ALLOC_LEN] = {0}; char base64_pwd[MAX_ALLOC_LEN] = {0}; // get router key, iv memset(base64, 0, MAX_ALLOC_LEN); int base64_length = base64Decode(base64, token, strlen(token)); // printf("json base64 len: %d\n", base64_length); AES128_CBC_decrypt_buffer(router_key_iv, base64, base64_length, repeater_key, repeater_iv); memcpy(router_key, router_key_iv, 16); memcpy(router_iv, router_key_iv+16, 16); // ssid memset(base64_ssid, 0, MAX_ALLOC_LEN); memset(r_ssid, 0, MAX_ALLOC_LEN); memset(rr_ssid, 0, MAX_ALLOC_LEN); base64_length = base64Decode(base64_ssid, ssid, strlen(ssid)); AES128_CBC_decrypt_buffer(r_ssid, base64_ssid, base64_length, router_key, router_iv); memcpy(rr_ssid, r_ssid, strlen(r_ssid)); // printf("rr_ssid:%s\n", rr_ssid); // ssid pwd memset(base64_pwd, 0, MAX_ALLOC_LEN); memset(r_pwd, 0, MAX_ALLOC_LEN); memset(rr_pwd, 0, MAX_ALLOC_LEN); base64_length = base64Decode(base64_pwd, ssid_pwd, strlen(ssid_pwd)); AES128_CBC_decrypt_buffer(r_pwd, base64_pwd, base64_length, router_key, router_iv); memcpy(rr_pwd, r_pwd, strlen(r_pwd)); // printf("rr_pwd:%s\n", rr_pwd); flag_ssid_pwd = 1; /* Succeed to get password and ssid, so clear hide_mode flag */ set_hide_mode(0); if (router_key_iv) free(router_key_iv); if (base64) free(base64); if (r_ssid) free(r_ssid); if (r_pwd) free(r_pwd); }else{ dlog("recv DATA INVALID\n"); ret = 1; } if (ret){ printf("ecos pair verify failed!\n"); dlog("ret:%d wait %d try again\n", ret, TRAFFICD_INIT_LOOP_TIME / 1000); uloop_timeout_set(&sd->timeout_init, TRAFFICD_INIT_LOOP_TIME); }else{ printf("ssid:%s\n", rr_ssid); printf("ecos pair verify ok!\n"); #ifdef __ECOS #if 0 CFG_set(CFG_TRAFFIC_INIT, 0); sys->init_mode = 0; uloop_timeout_set(&sd->timeout_mat, TRAFFICD_WIFIAP_LOOP_TIME); #endif #endif } }