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 WscWriteProfileToUfdFile( IN PRTMP_ADAPTER pAd, IN UCHAR ApIdx, IN PSTRING pUfdFileName) { PWSC_CTRL pWscControl = &pAd->ApCfg.MBSSID[ApIdx].WscControl; PWSC_CREDENTIAL pCredential = &pWscControl->WscProfile.Profile[0]; RTMP_OS_FS_INFO osFSInfo; RTMP_OS_FD file_w; PSTRING offset, pXmlTemplate = (PSTRING)XML_TEMPLATE; BOOLEAN bFound = FALSE, bRtn = TRUE; UCHAR Guid[UUID_LEN_HEX]; UCHAR Guid_Str[UUID_LEN_STR]; if (pUfdFileName == NULL) { DBGPRINT(RT_DEBUG_TRACE, ("--> %s: pUfdFileName is NULL\n", __FUNCTION__)); return FALSE; } RtmpOSFSInfoChange(&osFSInfo, TRUE); file_w = RtmpOSFileOpen(pUfdFileName, O_WRONLY|O_TRUNC|O_CREAT, 0); if (IS_FILE_OPEN_ERR(file_w)) { DBGPRINT(RT_DEBUG_TRACE, ("--> %s: Error opening file %s\n", __FUNCTION__, pUfdFileName)); return FALSE; } else { WscCreateProfileFromCfg(pAd, AP_MODE, pWscControl, &pWscControl->WscProfile); WscGenerateUUID(pAd, &Guid[0], &Guid_Str[0], ApIdx, TRUE); if ((offset = rtstrstr(pXmlTemplate, (PSTRING)XML_GUID_MARK)) != NULL) { RtmpOSFileWrite(file_w, (PSTRING)pXmlTemplate, (int)(offset - pXmlTemplate)); RtmpOSFileWrite(file_w, (PSTRING)&Guid_Str[0], (int)UUID_LEN_STR); pXmlTemplate = offset + strlen(XML_GUID_MARK); } if ((offset = rtstrstr(pXmlTemplate, (PSTRING)XML_AP_GUID_MARK)) != NULL) { RtmpOSFileWrite(file_w, (PSTRING)pXmlTemplate, (int)(offset - pXmlTemplate)); RtmpOSFileWrite(file_w, (PSTRING)&pWscControl->Wsc_Uuid_Str[0], (int)UUID_LEN_STR); pXmlTemplate = offset + strlen(XML_AP_GUID_MARK); } if ((offset = rtstrstr(pXmlTemplate, (PSTRING)XML_SSID_MARK)) != NULL) { RtmpOSFileWrite(file_w, (PSTRING)pXmlTemplate, (int)(offset - pXmlTemplate)); RtmpOSFileWrite(file_w, (PSTRING)&pCredential->SSID.Ssid[0], (int)pCredential->SSID.SsidLength); pXmlTemplate = offset + strlen(XML_SSID_MARK); } if ((offset = rtstrstr(pXmlTemplate, (PSTRING)XML_AUTH_MARK)) != NULL) { RtmpOSFileWrite(file_w, (PSTRING)pXmlTemplate, (int)(offset - pXmlTemplate)); for (PWSC_UFD_AUTH_TYPE = WSC_UFD_AUTH_TYPE; PWSC_UFD_AUTH_TYPE->auth_str; PWSC_UFD_AUTH_TYPE++) { if (PWSC_UFD_AUTH_TYPE->auth_type == pCredential->AuthType) { RtmpOSFileWrite(file_w, (PSTRING)PWSC_UFD_AUTH_TYPE->auth_str, (int)strlen(PWSC_UFD_AUTH_TYPE->auth_str)); bFound = TRUE; break; } } pXmlTemplate = offset + strlen(XML_AUTH_MARK); if (bFound == FALSE) { DBGPRINT(RT_DEBUG_TRACE, ("--> %s: Unknow Auth Type(=%x)\n", __FUNCTION__, pCredential->AuthType)); bRtn = FALSE; goto out; } } if ((offset = rtstrstr(pXmlTemplate, (PSTRING)XML_ENCR_MARK)) != NULL) { bFound = FALSE; RtmpOSFileWrite(file_w, (PSTRING)pXmlTemplate, (int)(offset - pXmlTemplate)); for (PWSC_UFD_ENCR_TYPE = WSC_UFD_ENCR_TYPE; PWSC_UFD_ENCR_TYPE->encr_str; PWSC_UFD_ENCR_TYPE++) { if (PWSC_UFD_ENCR_TYPE->encr_type == pCredential->EncrType) { RtmpOSFileWrite(file_w, (PSTRING)PWSC_UFD_ENCR_TYPE->encr_str, (int)strlen(PWSC_UFD_ENCR_TYPE->encr_str)); bFound = TRUE; } } pXmlTemplate = offset + strlen(XML_ENCR_MARK); if (bFound == FALSE) { DBGPRINT(RT_DEBUG_TRACE, ("--> %s: Unknow Encr Type(=%x)\n", __FUNCTION__, pCredential->EncrType)); bRtn = FALSE; goto out; } } if ((offset = rtstrstr(pXmlTemplate, (PSTRING)XML_KEY_MARK)) != NULL) { if (pCredential->EncrType != WSC_ENCRTYPE_NONE) { RtmpOSFileWrite(file_w, (PSTRING)pXmlTemplate, (int)(offset - pXmlTemplate)); RtmpOSFileWrite(file_w, (PSTRING)pCredential->Key, (int)pCredential->KeyLength); pXmlTemplate = offset + strlen(XML_KEY_MARK); } else { RtmpOSFileWrite(file_w, (PSTRING)XML_ENCR_END, (int)strlen(XML_ENCR_END)); RtmpOSFileWrite(file_w, (PSTRING)"\n", (int)1); pXmlTemplate = offset + strlen(XML_KEY_MARK) + strlen(XML_KEY_END) + 1; /* 1: '\n' */ } } RtmpOSFileWrite(file_w, (PSTRING)pXmlTemplate, (int)strlen(pXmlTemplate)); } out: RtmpOSFileClose(file_w); RtmpOSFSInfoChange(&osFSInfo, FALSE); return bRtn; }