nsresult nsAutoConfig::evaluateLocalFile(nsIFile *file) { nsresult rv; nsCOMPtr<nsIInputStream> inStr; rv = NS_NewLocalFileInputStream(getter_AddRefs(inStr), file); if (NS_FAILED(rv)) return rv; PRInt64 fileSize; PRUint32 fs, amt=0; file->GetFileSize(&fileSize); LL_L2UI(fs, fileSize); // Converting 64 bit structure to unsigned int char *buf = (char *)PR_Malloc(fs * sizeof(char)); if (!buf) return NS_ERROR_OUT_OF_MEMORY; rv = inStr->Read(buf, fs, &amt); if (NS_SUCCEEDED(rv)) { EvaluateAdminConfigScript(buf, fs, nsnull, PR_FALSE, PR_TRUE, PR_FALSE); } inStr->Close(); PR_Free(buf); return rv; }
NS_IMETHODIMP nsAutoConfig::OnStopRequest(nsIRequest *request, nsISupports *context, nsresult aStatus) { nsresult rv; // If the request is failed, go read the failover.jsc file if (NS_FAILED(aStatus)) { PR_LOG(MCD, PR_LOG_DEBUG, ("mcd request failed with status %x\n", aStatus)); return readOfflineFile(); } // Checking for the http response, if failure go read the failover file. nsCOMPtr<nsIHttpChannel> pHTTPCon(do_QueryInterface(request)); if (pHTTPCon) { PRUint32 httpStatus; pHTTPCon->GetResponseStatus(&httpStatus); if (httpStatus != 200) { PR_LOG(MCD, PR_LOG_DEBUG, ("mcd http request failed with status %x\n", httpStatus)); return readOfflineFile(); } } // Send the autoconfig.jsc to javascript engine. rv = EvaluateAdminConfigScript(mBuf.get(), mBuf.Length(), nsnull, PR_FALSE,PR_TRUE, PR_FALSE); if (NS_SUCCEEDED(rv)) { // Write the autoconfig.jsc to failover.jsc (cached copy) rv = writeFailoverFile(); if (NS_FAILED(rv)) NS_WARNING("Error writing failover.jsc file"); // Releasing the lock to allow the main thread to start execution mLoaded = PR_TRUE; return NS_OK; } // there is an error in parsing of the autoconfig file. NS_WARNING("Error reading autoconfig.jsc from the network, reading the offline version"); return readOfflineFile(); }
nsresult nsReadConfig::openAndEvaluateJSFile(const char *aFileName, PRInt32 obscureValue, bool isEncoded, bool isBinDir) { nsresult rv; nsCOMPtr<nsIInputStream> inStr; if (isBinDir) { nsCOMPtr<nsIFile> jsFile; rv = NS_GetSpecialDirectory(NS_XPCOM_CURRENT_PROCESS_DIR, getter_AddRefs(jsFile)); if (NS_FAILED(rv)) return rv; rv = jsFile->AppendNative(nsDependentCString(aFileName)); if (NS_FAILED(rv)) return rv; rv = NS_NewLocalFileInputStream(getter_AddRefs(inStr), jsFile); if (NS_FAILED(rv)) return rv; } else { nsCOMPtr<nsIIOService> ioService = do_GetIOService(&rv); if (NS_FAILED(rv)) return rv; nsCAutoString location("resource://gre/defaults/autoconfig/"); location += aFileName; nsCOMPtr<nsIURI> uri; rv = ioService->NewURI(location, nsnull, nsnull, getter_AddRefs(uri)); if (NS_FAILED(rv)) return rv; nsCOMPtr<nsIChannel> channel; rv = ioService->NewChannelFromURI(uri, getter_AddRefs(channel)); if (NS_FAILED(rv)) return rv; rv = channel->Open(getter_AddRefs(inStr)); if (NS_FAILED(rv)) return rv; } PRUint32 fs, amt = 0; inStr->Available(&fs); char *buf = (char *)PR_Malloc(fs * sizeof(char)); if (!buf) return NS_ERROR_OUT_OF_MEMORY; rv = inStr->Read(buf, fs, &amt); NS_ASSERTION((amt == fs), "failed to read the entire configuration file!!"); if (NS_SUCCEEDED(rv)) { if (obscureValue > 0) { // Unobscure file by subtracting some value from every char. for (PRUint32 i = 0; i < amt; i++) buf[i] -= obscureValue; } rv = EvaluateAdminConfigScript(buf, amt, aFileName, false, true, isEncoded ? true:false); } inStr->Close(); PR_Free(buf); return rv; }
nsresult nsReadConfig::openAndEvaluateJSFile(const char *aFileName, int32_t obscureValue, bool isEncoded, bool isBinDir) { nsresult rv; nsCOMPtr<nsIInputStream> inStr; if (isBinDir) { nsCOMPtr<nsIFile> jsFile; rv = NS_GetSpecialDirectory(XRE_EXECUTABLE_FILE, getter_AddRefs(jsFile)); if (NS_FAILED(rv)) return rv; rv = jsFile->SetNativeLeafName(nsDependentCString(aFileName)); if (NS_FAILED(rv)) return rv; rv = NS_NewLocalFileInputStream(getter_AddRefs(inStr), jsFile); if (NS_FAILED(rv)) return rv; } else { nsCOMPtr<nsIIOService> ioService = do_GetIOService(&rv); if (NS_FAILED(rv)) return rv; nsAutoCString location("resource://gre/defaults/autoconfig/"); location += aFileName; nsCOMPtr<nsIURI> uri; rv = ioService->NewURI(location, nullptr, nullptr, getter_AddRefs(uri)); if (NS_FAILED(rv)) return rv; nsCOMPtr<nsIChannel> channel; rv = ioService->NewChannelFromURI(uri, getter_AddRefs(channel)); if (NS_FAILED(rv)) return rv; rv = channel->Open(getter_AddRefs(inStr)); if (NS_FAILED(rv)) return rv; } uint64_t fs64; uint32_t amt = 0; rv = inStr->Available(&fs64); if (NS_FAILED(rv)) return rv; // PR_Malloc dones't support over 4GB if (fs64 > UINT32_MAX) return NS_ERROR_FILE_TOO_BIG; uint32_t fs = (uint32_t)fs64; char *buf = (char *)PR_Malloc(fs * sizeof(char)); if (!buf) return NS_ERROR_OUT_OF_MEMORY; rv = inStr->Read(buf, (uint32_t)fs, &amt); NS_ASSERTION((amt == fs), "failed to read the entire configuration file!!"); if (NS_SUCCEEDED(rv)) { if (obscureValue > 0) { // Unobscure file by subtracting some value from every char. for (uint32_t i = 0; i < amt; i++) buf[i] -= obscureValue; } rv = EvaluateAdminConfigScript(buf, amt, aFileName, false, true, isEncoded ? true:false); } inStr->Close(); PR_Free(buf); return rv; }
nsresult nsReadConfig::openAndEvaluateJSFile(const char *aFileName, PRBool isEncoded, PRInt32 obscureValue, PRBool isBinDir) { nsresult rv; nsCOMPtr<nsIFile> jsFile; if (isBinDir) { rv = NS_GetSpecialDirectory(NS_XPCOM_CURRENT_PROCESS_DIR, getter_AddRefs(jsFile)); if (NS_FAILED(rv)) return rv; #ifdef XP_MAC jsFile->AppendNative(NS_LITERAL_CSTRING("Essential Files")); #endif } else { rv = NS_GetSpecialDirectory(NS_APP_DEFAULTS_50_DIR, getter_AddRefs(jsFile)); if (NS_FAILED(rv)) return rv; rv = jsFile->AppendNative(NS_LITERAL_CSTRING("autoconfig")); if (NS_FAILED(rv)) return rv; } rv = jsFile->AppendNative(nsDependentCString(aFileName)); if (NS_FAILED(rv)) return rv; nsCOMPtr<nsIInputStream> inStr; rv = NS_NewLocalFileInputStream(getter_AddRefs(inStr), jsFile); if (NS_FAILED(rv)) return rv; PRInt64 fileSize; PRUint32 fs, amt = 0; jsFile->GetFileSize(&fileSize); LL_L2UI(fs, fileSize); // Converting 64 bit structure to unsigned int char *buf = (char *)PR_Malloc(fs * sizeof(char)); if (!buf) return NS_ERROR_OUT_OF_MEMORY; rv = inStr->Read(buf, fs, &amt); NS_ASSERTION((amt == fs), "failed to read the entire configuration file!!"); if (NS_SUCCEEDED(rv)) { if (obscureValue > 0) { // Unobscure file by subtracting some value from every char. for (PRUint32 i = 0; i < amt; i++) buf[i] -= obscureValue; } nsCAutoString path; jsFile->GetNativePath(path); nsCAutoString fileURL; fileURL = NS_LITERAL_CSTRING("file:///") + path; rv = EvaluateAdminConfigScript(buf, amt, fileURL.get(), PR_FALSE, PR_TRUE, isEncoded ? PR_TRUE:PR_FALSE); } inStr->Close(); PR_Free(buf); return rv; }