static void WriteConfToDatFile( IN PRTMP_ADAPTER pAd) { char *cfgData = 0; PSTRING fileName = NULL; RTMP_OS_FD file_r, file_w; RTMP_OS_FS_INFO osFSInfo; LONG rv, fileLen = 0; char *offset = 0; PSTRING pTempStr = 0; // INT tempStrLen = 0; DBGPRINT(RT_DEBUG_TRACE, ("-----> WriteConfToDatFile\n")); fileName = STA_PROFILE_PATH; RtmpOSFSInfoChange(&osFSInfo, TRUE); file_r = RtmpOSFileOpen(fileName, O_RDONLY, 0); if (IS_FILE_OPEN_ERR(file_r)) { DBGPRINT(RT_DEBUG_TRACE, ("-->1) %s: Error opening file %s\n", __FUNCTION__, fileName)); return; } else { char tempStr[64] = {0}; while((rv = RtmpOSFileRead(file_r, tempStr, 64)) > 0) { fileLen += rv; } os_alloc_mem(NULL, (UCHAR **)&cfgData, fileLen); if (cfgData == NULL) { RtmpOSFileClose(file_r); DBGPRINT(RT_DEBUG_TRACE, ("CfgData kmalloc fail. (fileLen = %ld)\n", fileLen)); goto out; } NdisZeroMemory(cfgData, fileLen); RtmpOSFileSeek(file_r, 0); rv = RtmpOSFileRead(file_r, (PSTRING)cfgData, fileLen); RtmpOSFileClose(file_r); if (rv != fileLen) { DBGPRINT(RT_DEBUG_TRACE, ("CfgData kmalloc fail, fileLen = %ld\n", fileLen)); goto ReadErr; } } file_w = RtmpOSFileOpen(fileName, O_WRONLY|O_TRUNC, 0); if (IS_FILE_OPEN_ERR(file_w)) { goto WriteFileOpenErr; } else { offset = (PCHAR) rtstrstr((PSTRING) cfgData, "Default\n"); offset += strlen("Default\n"); RtmpOSFileWrite(file_w, (PSTRING)cfgData, (int)(offset-cfgData)); os_alloc_mem(NULL, (UCHAR **)&pTempStr, 512); if (!pTempStr) { DBGPRINT(RT_DEBUG_TRACE, ("pTempStr kmalloc fail. (512)\n")); RtmpOSFileClose(file_w); goto WriteErr; } for (;;) { int i = 0; PSTRING ptr; NdisZeroMemory(pTempStr, 512); ptr = (PSTRING) offset; while(*ptr && *ptr != '\n') { pTempStr[i++] = *ptr++; } pTempStr[i] = 0x00; if ((size_t)(offset - cfgData) < fileLen) { offset += strlen(pTempStr) + 1; if (strncmp(pTempStr, "SSID=", strlen("SSID=")) == 0) { NdisZeroMemory(pTempStr, 512); NdisMoveMemory(pTempStr, "SSID=", strlen("SSID=")); NdisMoveMemory(pTempStr + 5, pAd->CommonCfg.Ssid, pAd->CommonCfg.SsidLen); } else if (strncmp(pTempStr, "AuthMode=", strlen("AuthMode=")) == 0) { NdisZeroMemory(pTempStr, 512); if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeOpen) sprintf(pTempStr, "AuthMode=OPEN"); else if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeShared) sprintf(pTempStr, "AuthMode=SHARED"); else if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeAutoSwitch) sprintf(pTempStr, "AuthMode=WEPAUTO"); else if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) sprintf(pTempStr, "AuthMode=WPAPSK"); else if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) sprintf(pTempStr, "AuthMode=WPA2PSK"); else if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) sprintf(pTempStr, "AuthMode=WPA"); else if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) sprintf(pTempStr, "AuthMode=WPA2"); else if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone) sprintf(pTempStr, "AuthMode=WPANONE"); } else if (strncmp(pTempStr, "EncrypType=", strlen("EncrypType=")) == 0) { NdisZeroMemory(pTempStr, 512); if (pAd->StaCfg.WepStatus == Ndis802_11WEPDisabled) sprintf(pTempStr, "EncrypType=NONE"); else if (pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled) sprintf(pTempStr, "EncrypType=WEP"); else if (pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled) sprintf(pTempStr, "EncrypType=TKIP"); else if (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled) sprintf(pTempStr, "EncrypType=AES"); } RtmpOSFileWrite(file_w, pTempStr, strlen(pTempStr)); RtmpOSFileWrite(file_w, "\n", 1); } else { break; } } RtmpOSFileClose(file_w); } WriteErr: if (pTempStr) /* kfree(pTempStr); */ os_free_mem(NULL, pTempStr); ReadErr: WriteFileOpenErr: if (cfgData) /* kfree(cfgData); */ os_free_mem(NULL, cfgData); out: RtmpOSFSInfoChange(&osFSInfo, FALSE); DBGPRINT(RT_DEBUG_TRACE, ("<----- WriteConfToDatFile\n")); return; }
BOOLEAN WscReadProfileFromUfdFile( IN PRTMP_ADAPTER pAd, IN UCHAR ApIdx, IN PSTRING pUfdFileName) { PWSC_CREDENTIAL pCredential = &pAd->ApCfg.MBSSID[ApIdx].WscControl.WscProfile.Profile[0]; RTMP_OS_FS_INFO osFSInfo; RTMP_OS_FD file_r; ssize_t rv, fileLen = 0; PSTRING pXmlData = NULL; if (pUfdFileName == NULL) { DBGPRINT(RT_DEBUG_TRACE, ("--> %s: pUfdFileName is NULL\n", __FUNCTION__)); return FALSE; } RtmpOSFSInfoChange(&osFSInfo, TRUE); file_r = RtmpOSFileOpen(pUfdFileName, O_RDONLY, 0); if (IS_FILE_OPEN_ERR(file_r)) { DBGPRINT(RT_DEBUG_TRACE, ("--> %s: Error opening file %s\n", __FUNCTION__, pUfdFileName)); return FALSE; } else { char tempStr[64] = {0}; while((rv = RtmpOSFileRead(file_r, tempStr, 64)) > 0) { fileLen += rv; } os_alloc_mem(pAd, (UCHAR **)&pXmlData, fileLen+1); if (pXmlData == NULL) { RtmpOSFileClose(file_r); RtmpOSFSInfoChange(&osFSInfo, FALSE); DBGPRINT(RT_DEBUG_TRACE, ("pXmlData kmalloc fail. (fileLen = %d)\n", fileLen)); return FALSE; } RTMPZeroMemory(pXmlData, fileLen+1); RtmpOSFileSeek(file_r, 0); rv = RtmpOSFileRead(file_r, (PSTRING)pXmlData, fileLen); RtmpOSFileClose(file_r); if (rv != fileLen) { DBGPRINT(RT_DEBUG_TRACE, ("pXmlData kmalloc fail, fileLen = %d\n", fileLen)); RtmpOSFSInfoChange(&osFSInfo, FALSE); goto ReadErr; } } RtmpOSFSInfoChange(&osFSInfo, FALSE); DBGPRINT(RT_DEBUG_TRACE, ("WscReadProfileFromUfdFile\n")); if (WscPassXmlDeclare(&pXmlData)) { if (WscGetXmlSSID(pXmlData, &pCredential->SSID)) { DBGPRINT(RT_DEBUG_TRACE, ("SSID = %s(%d)\n", pCredential->SSID.Ssid, pCredential->SSID.SsidLength)); } else return FALSE; if (WscGetXmlAuth(pXmlData, &pCredential->AuthType)) { DBGPRINT(RT_DEBUG_TRACE, ("Credential.AuthType = 0x%04x\n", pCredential->AuthType)); } else return FALSE; if (WscGetXmlEncr(pXmlData, &pCredential->EncrType)) { DBGPRINT(RT_DEBUG_TRACE, ("Credential.EncrType = 0x%04x\n", pCredential->EncrType)); } else return FALSE; pCredential->KeyLength = 0; RTMPZeroMemory(pCredential->Key, 64); if (WscGetXmlKey(pXmlData, pCredential->Key, &pCredential->KeyLength)) { DBGPRINT(RT_DEBUG_TRACE, ("Credential.Key = %s (%d)\n", pCredential->Key, pCredential->KeyLength)); } else return FALSE; /* If we cannot find keyIndex in .wfc file, use default value 1. */ if (WscGetXmlKeyIndex(pXmlData, &pCredential->KeyIndex)) { DBGPRINT(RT_DEBUG_TRACE, ("pCredential->KeyIndex = %d\n", pCredential->KeyIndex)); } DBGPRINT(RT_DEBUG_TRACE, ("WscReadProfileFromUfdFile OK\n")); WscWriteConfToPortCfg(pAd, &pAd->ApCfg.MBSSID[ApIdx].WscControl, &pAd->ApCfg.MBSSID[ApIdx].WscControl.WscProfile.Profile[0], TRUE); pAd->WriteWscCfgToDatFile = ApIdx; RtmpOsTaskWakeUp(&(pAd->wscTask)); if (pXmlData) os_free_mem(NULL, pXmlData); return TRUE; } ReadErr: if (pXmlData) os_free_mem(NULL, pXmlData); return FALSE; }