int getServiceArgsX(int argc,char *argv[],const char *av[],int an) { validateLicense(argv[0],__DATE__); return -1; }
int putServiceArgs(PCStr(execpath),PCStr(servname),int ac,const char *av[]) { validateLicense(execpath,__DATE__); return -1; }
static int jaxerMain(int argc, char **argv) { nsresult rv; int ret = 0; nsCOMPtr<nsIPrefBranch> prefBranch(do_GetService(NS_PREFSERVICE_CONTRACTID)); /* Activate our JavaScript Console listener */ AutoConsoleListener aCL; /* Get the commandport, we use it as a lock for logging */ char * sLock = "4328"; for (int i = 1; i < argc-1; ++i) { if (!strcmp(argv[i], "-commandport") || !strcmp(argv[i], "--commandport")) { sLock = argv[i+1]; } } // Let's Init the logger so we can write log msgs. rv = gJaxerLog.Init(sLock); if (NS_FAILED(rv)) { fprintf(stderr, "Cannot init aptCoreTrace for jaxer logging. error=0x%x", rv); return 1; } gJaxerLog.Log(eDEBUG, "Jaxer: Log inited."); // We need to do this (seemingly superfluous operation) in order to make the // Mozilla core aware that this thread is the "main" thread. If we don't do // an operation like this here, Mozilla will cough up assertions later when // we attempt to load the HTML page. nsCOMPtr<nsIURI> url; rv = NS_NewURI(getter_AddRefs(url), "resource://framework"); if (NS_FAILED(rv)) { gJaxerLog.Log(eERROR, "Create new URI for resource://framework failed: rv=0x%x", rv); return 1; } if (!prefBranch) { gJaxerLog.Log(eERROR, "Get PrefService failed."); return 1; } { nsCOMPtr<nsIFile> file; PRBool exists = PR_FALSE; rv = NS_GetSpecialDirectory(NS_APP_PREF_DEFAULTS_50_DIR, getter_AddRefs(file)); NS_ENSURE_SUCCESS(rv, 1); rv = file->Append(NS_LITERAL_STRING("Jaxer_prefs.js")); NS_ENSURE_SUCCESS(rv, 1); rv = file->Exists(&exists); if (NS_FAILED(rv) || !exists) { nsString aMsg; file->GetPath(aMsg); gJaxerLog.Log(eINFO, "Preferences file (%s) could not be located.", NS_ConvertUTF16toUTF8(aMsg).get()); return 1; } gJaxerLog.Log(eTRACE, "Loaded Jaxer_prefs.js"); PRInt32 type; rv = prefBranch->GetPrefType("Jaxer.HTML.Tag.Monitor.1", &type); if ( NS_FAILED(rv) || type != nsIPrefBranch::PREF_STRING) { nsString aMsg; file->GetPath(aMsg); gJaxerLog.Log(eINFO, "Jaxer preferences were not found in file (%s).", NS_ConvertUTF16toUTF8(aMsg).get()); return 1; } } /* Initialize preference observer */ AutoPrefObserver apo; /* Send startup event */ nsCOMPtr<nsIObserver> startupNotifier (do_CreateInstance(NS_APPSTARTUPNOTIFIER_CONTRACTID, &rv)); startupNotifier->Observe(nsnull, APPSTARTUP_TOPIC, nsnull); /* Initialize command line */ nsCOMPtr<nsICommandLineRunner> cmdLine(do_CreateInstance("@mozilla.org/toolkit/command-line;1")); if (!cmdLine) { gJaxerLog.Log(eERROR, "Failed to create nsICommandLineRunner"); return 1; } nsCOMPtr<nsIFile> workingDir; rv = NS_GetSpecialDirectory(NS_OS_CURRENT_WORKING_DIR, getter_AddRefs(workingDir)); if (NS_FAILED(rv)) { gJaxerLog.Log(eERROR, "Get current working directory failed: rv=0x%x", rv); return 1; } rv = cmdLine->Init(argc, argv, workingDir, nsICommandLine::STATE_INITIAL_LAUNCH); if (NS_FAILED(rv)) { gJaxerLog.Log(eERROR, "CommandLine init failed: rv=0x%x", rv); ret = 1; return 1; } rv = cmdLine->Run(); if (NS_FAILED(rv)) { gJaxerLog.Log(eERROR, "CommandLine Run failed: rv=0x%x", rv); return 1; } // Init on main thread - same reasons as above { nsCOMPtr<nsICertOverrideService> overrideService = do_GetService(NS_CERTOVERRIDE_CONTRACTID); } #if defined(MOZ_WIDGET_GTK2) gtk_init_check(&argc, &argv); #endif #if defined(JAXER_PRO_BUILD) char sUser[400]; if (validateLicense(sUser) != PR_TRUE) { gJaxerLog.Terminate(); return 1; } #endif //rv = FCGXStream::Startup(argc, argv); if (JaxerStartup(argc, argv) != 0) { gJaxerLog.Log(eERROR, "Jaxer: Failed to establish communication with manager."); return 1; } gJaxerLog.Log(eTRACE, "Inited manager communication"); // Set WebConfig HTTPStream::SetWebServerConfigFile(gWebServerConfig); nsCOMPtr<aptIDocumentFetcherService> dfs; nsCOMPtr<aptIManagerCmdService> mcs; nsCOMPtr<nsIRunnable> aEvent; nsCOMPtr<nsIThread> aRunner; nsIThread *MainThread; dfs = do_GetService("@aptana.com/httpdocumentfetcher;1", &rv); rv = dfs->Init(); if (NS_FAILED(rv)) { gJaxerLog.Log(eERROR, "Init aptIDocumentFetcherService failed: rv=0x%x", rv); ret = 1; goto Done; } gJaxerLog.Log(eTRACE, "Inited aptIDocumentFetcherService"); mcs = do_GetService("@aptana.com/managercmdservice;1", &rv); rv = mcs->Init((PRInt32)g_pipe); if (NS_FAILED(rv)) { gJaxerLog.Log(eERROR, "Init aptIManagerCmdService failed: rv=0x%x", rv); ret = 1; goto Done; } /* Jaxer has started up! */ #if defined(JAXER_PRO_BUILD) gJaxerLog.Log(eNOTICE, "[Jaxer/%s -- starting] %s", JAXER_BUILD_ID, sUser); #else gJaxerLog.Log(eNOTICE, "[Jaxer/%s -- starting] Community Edition, licensed by Aptana, Inc. under GPL/APL (see LICENSE.TXT)", JAXER_BUILD_ID); #endif aEvent = new aptMgrCmdReader(g_pipe); if (!aEvent) { //return NS_ERROR_OUT_OF_MEMORY; ret = 1; goto Done; } rv = NS_NewThread(getter_AddRefs(aRunner), aEvent); if (NS_FAILED(rv)) { ret = 1; goto Done; } // Start waiting for incoming requests MainThread = NS_GetCurrentThread(); while (gJaxerState != eEXITING) { gJaxerLog.Log(eTRACE, "Waiting for next request."); PRBool processedEvent; rv = MainThread->ProcessNextEvent(PR_TRUE, &processedEvent); if (NS_FAILED(rv)) { //Process event failed } if (!processedEvent) { //Process event failed } } Done: gJaxerLog.Log(eTRACE, "Main done. Wait for thread"); gJaxerState = eEXITING; #ifdef _WIN32 CloseHandle(g_pipe); #else close(g_pipe); #endif if (aRunner) aRunner->Shutdown(); gJaxerLog.Log(eTRACE, "Main done. Thread returned"); gJaxerLog.Terminate(); //FCGXStream::Cleanup(); return ret; }