// Data = AuthData#FTCServer(localIp/netMask/gateWay/dnsServer) void EasyLinkNotify_EasyLinkGetExtraDataHandler(int datalen, char* data, mico_Context_t * const inContext) { OSStatus err; int index ; char address[16]; easylink_log_trace(); uint32_t *ipInfo, ipInfoCount; require_action(inContext, exit, err = kParamErr); char *debugString; debugString = DataToHexStringWithSpaces( (const uint8_t *)data, datalen ); easylink_log("Get user info: %s", debugString); free(debugString); for(index = datalen - 1; index>=0; index-- ){ if(data[index] == '#' &&( (datalen - index) == 5 || (datalen - index) == 25 ) ) break; } require_action(index >= 0, exit, err = kParamErr); data[index++] = 0x0; ipInfo = (uint32_t *)&data[index]; ipInfoCount = (datalen - index)/sizeof(uint32_t); require_action(ipInfoCount >= 1, exit, err = kParamErr); mico_rtos_lock_mutex(&inContext->flashContentInRam_mutex); inContext->flashContentInRam.micoSystemConfig.easylinkServerIP = *(uint32_t *)(ipInfo); if(ipInfoCount == 1){ inContext->flashContentInRam.micoSystemConfig.dhcpEnable = true; inet_ntoa( address, inContext->flashContentInRam.micoSystemConfig.easylinkServerIP); easylink_log("Get auth info: %s, EasyLink server ip address: %s", data, address); }else{ inContext->flashContentInRam.micoSystemConfig.dhcpEnable = false; ipInfo = (uint32_t *)&data[index]; inet_ntoa(inContext->flashContentInRam.micoSystemConfig.localIp, *(uint32_t *)(ipInfo+1)); inet_ntoa(inContext->flashContentInRam.micoSystemConfig.netMask, *(uint32_t *)(ipInfo+2)); inet_ntoa(inContext->flashContentInRam.micoSystemConfig.gateWay, *(uint32_t *)(ipInfo+3)); inet_ntoa(inContext->flashContentInRam.micoSystemConfig.dnsServer, *(uint32_t *)(ipInfo+4)); strcpy((char *)inContext->micoStatus.localIp, inContext->flashContentInRam.micoSystemConfig.localIp); strcpy((char *)inContext->micoStatus.netMask, inContext->flashContentInRam.micoSystemConfig.netMask); strcpy((char *)inContext->micoStatus.gateWay, inContext->flashContentInRam.micoSystemConfig.gateWay); strcpy((char *)inContext->micoStatus.dnsServer, inContext->flashContentInRam.micoSystemConfig.dnsServer); inet_ntoa( address, inContext->flashContentInRam.micoSystemConfig.easylinkServerIP); easylink_log("Get auth info: %s, EasyLink server ip address: %s, local IP info:%s %s %s %s ", data, address, inContext->flashContentInRam.micoSystemConfig.localIp,\ inContext->flashContentInRam.micoSystemConfig.netMask, inContext->flashContentInRam.micoSystemConfig.gateWay,inContext->flashContentInRam.micoSystemConfig.dnsServer); } mico_rtos_unlock_mutex(&inContext->flashContentInRam_mutex); require_noerr(ConfigELRecvAuthData(data, inContext), exit); EasylinkFailed = false; mico_rtos_set_semaphore(&easylink_sem); ConfigEasyLinkIsSuccess(inContext); return; exit: easylink_log("ERROR, err: %d", err); ConfigWillStop(inContext); MicoSystemReboot(); }
void EasyLinkNotify_EasyLinkGetExtraDataHandler(int datalen, char* data, const int inContext) { OSStatus err; int index ; char address[16]; char *debugString; uint32_t *ipInfo, ipInfoCount; debugString = DataToHexStringWithSpaces( (const uint8_t *)data, datalen ); wifi_easylink_log("Get user info: %s", debugString); free(debugString); for(index = datalen - 1; index>=0; index-- ){ if(data[index] == '#' &&( (datalen - index) == 5 || (datalen - index) == 25 ) ) break; } require_action(index >= 0, exit, err = kParamErr); data[index++] = 0x0; ipInfo = (uint32_t *)&data[index]; ipInfoCount = (datalen - index)/sizeof(uint32_t); require_action(ipInfoCount >= 1, exit, err = kParamErr); inet_ntoa( address, *(uint32_t *)(ipInfo) ); wifi_easylink_log("Get auth info: %s, EasyLink server ip address: %s", data, address); is_easylink_success = 1; mico_rtos_set_semaphore(&easylink_sem); return; exit: wifi_easylink_log("ERROR, err: %d", err); }