bool JavascriptApi::Execute(const CefString& name, CefRefPtr<CefV8Value> object, const CefV8ValueList& arguments, CefRefPtr<CefV8Value>& retval, CefString& exception) { if (name == "GetVersion") { retval = CefV8Value::CreateString(GetPhpDesktopVersion()); return true; } else if (name == "ToggleFullscreen") { CefRefPtr<CefProcessMessage> message = \ CefProcessMessage::Create("ToggleFullscreen"); cefBrowser_->SendProcessMessage(PID_BROWSER, message); isFullscreen_ = !(isFullscreen_); return true; } else if (name == "IsFullscreen") { retval = CefV8Value::CreateBool(isFullscreen_); return true; } // Function does not exist. return false; }
bool StartWebServer() { //LOG_INFO << "Starting Mongoose " << mg_version() << " web server"; qDebug() << "Starting Mongoose " << mg_version() << " web server"; ////json_value* appSettings = GetApplicationSettings(); // 404_handler ////std::string _404_handler = (*appSettings)["web_server"]["404_handler"]; std::string _404_handler = "/pretty-urls.php"; // Ip address and port. If port was set to 0, then real port // will be known only after the webserver was started. ////std::string ipAddress = (*appSettings)["web_server"]["listen_on"][0]; std::string ipAddress = "127.0.0.1"; ////std::string port = (*appSettings)["web_server"]["listen_on"][1]; std::string port = "8080"; #if 0x0 long portInt = (*appSettings)["web_server"]["listen_on"][1]; if (portInt) port = IntToString(portInt); if (ipAddress.empty()) { ipAddress = "127.0.0.1"; } if (port.empty()) { port = "0"; } #endif // WWW directory from settings. #if 0x0 std::string wwwDirectory = (*appSettings)["web_server"]["www_directory"]; if (wwwDirectory.empty()) { wwwDirectory = "www"; } wwwDirectory = GetAbsolutePath(wwwDirectory); #else std::string wwwDirectory = "E:\\phpdesktop-chrome-31.8-php-5.6.1\\www"; #endif //LOG_INFO << "WWW directory: " << wwwDirectory; qDebug() << "WWW directory: " << wwwDirectory; // Index files from settings. #if 0x0 const json_value indexFilesArray = (*appSettings)["web_server"]["index_files"]; std::string indexFiles; for (int i = 0; i < 32; i++) { const char* file = indexFilesArray[i]; if (strlen(file)) { if (indexFiles.length()) indexFiles.append(","); indexFiles.append(file); } } if (indexFiles.empty()) indexFiles = "index.html,index.php"; #else std::string indexFiles = "index.html,index.php"; #endif //LOG_INFO << "Index files: " << indexFiles; qDebug() << "Index files: " << indexFiles; // CGI interpreter from settings. #if 0x0 std::string cgiInterpreter = (*appSettings)["web_server"]["cgi_interpreter"]; if (cgiInterpreter.empty()) { cgiInterpreter = "php\\php-cgi.exe"; } cgiInterpreter = GetAbsolutePath(cgiInterpreter); #else std::string cgiInterpreter = "E:\\phpdesktop-chrome-31.8-php-5.6.1\\php\\php-cgi.exe"; #endif //LOG_INFO << "CGI interpreter: " << cgiInterpreter; qDebug() << "CGI interpreter: " << cgiInterpreter; // CGI extensions from settings. #if 0x0 const json_value cgiExtensions = (*appSettings)["web_server"]["cgi_extensions"]; std::string cgiPattern; for (int i = 0; i < 32; i++) { const char* extension = cgiExtensions[i]; if (strlen(extension)) { if (cgiPattern.length()) cgiPattern.append("|"); cgiPattern.append("**.").append(extension).append("$"); } } if (cgiPattern.empty()) cgiPattern = "**.php$"; #else std::string cgiPattern = "**.php$"; #endif //LOG_INFO << "CGI pattern: " << cgiPattern; qDebug() << "CGI pattern: " << cgiPattern; // Hide files patterns. #if 0x0 const json_value hide_files = (*appSettings)["web_server"]["hide_files"]; std::string hide_files_patterns = ""; for (int i = 0; i < 100; i++) { const char* pattern = hide_files[i]; if (strlen(pattern)) { if (hide_files_patterns.length()) hide_files_patterns.append("|"); hide_files_patterns.append("**/").append(pattern).append("$"); } } #else std::string hide_files_patterns = ""; #endif //LOG_INFO << "Hide files patterns: " << hide_files_patterns; qDebug() << "Hide files patterns: " << hide_files_patterns; // Temp directory. ////std::string cgi_temp_dir = (*appSettings)["web_server"]["cgi_temp_dir"]; ////cgi_temp_dir = GetAbsolutePath(cgi_temp_dir); std::string cgi_temp_dir = ""; QDir cgi_temp_dir_q(QString::fromStdString(cgi_temp_dir)); ////if (!cgi_temp_dir.length() || !DirectoryExists(cgi_temp_dir)) { if (!cgi_temp_dir.length() || !cgi_temp_dir_q.exists()) { if (cgi_temp_dir.length()) { //LOG_WARNING << "cgi_temp_dir directory does not exist: " << cgi_temp_dir; qDebug() << "cgi_temp_dir directory does not exist: " << cgi_temp_dir; } ////cgi_temp_dir.assign(GetAnsiTempDirectory()); cgi_temp_dir = QDir::tempPath().toStdString(); } // CGI environment variables. std::string cgiEnvironment = ""; cgiEnvironment.append("TMP=").append(cgi_temp_dir).append(","); cgiEnvironment.append("TEMP=").append(cgi_temp_dir).append(","); cgiEnvironment.append("TMPDIR=").append(cgi_temp_dir).append(","); // Mongoose sets SERVER_NAME to "mydomain.com" cgiEnvironment.append("SERVER_NAME=").append(ipAddress).append(","); #if 0x0 // Let users identify whether web app runs in a normal browser // or a phpdesktop browser. cgiEnvironment.append("PHPDESKTOP_VERSION=").append(GetPhpDesktopVersion()); // Environment from application args if (g_cgiEnvironmentFromArgv.length()) { cgiEnvironment.append(",").append(g_cgiEnvironmentFromArgv); } #endif //LOG_INFO << "CGI environment variables set: " << cgiEnvironment; qDebug() << "CGI environment variables set: " << cgiEnvironment; // Mongoose web server. std::string listening_ports = ipAddress + ":" + port; const char* options[] = { "document_root", wwwDirectory.c_str(), "listening_ports", listening_ports.c_str(), "index_files", indexFiles.c_str(), "cgi_interpreter", cgiInterpreter.c_str(), "cgi_pattern", cgiPattern.c_str(), "cgi_environment", cgiEnvironment.c_str(), "404_handler", _404_handler.c_str(), "hide_files_patterns", hide_files_patterns.c_str(), NULL }; // Globals. g_wwwDirectory = wwwDirectory; g_cgiInterpreter = cgiInterpreter; mg_callbacks callbacks = {0}; callbacks.log_message = &log_message; callbacks.end_request = &end_request; g_mongooseContext = mg_start(&callbacks, NULL, options); if (g_mongooseContext == NULL) return false; // When port was set to 0 then a random free port was assigned. g_webServerPort = mg_get_listening_port(g_mongooseContext); g_webServerIpAddress = ipAddress; g_webServerUrl = "http://" + ipAddress + ":" + std::to_string(g_webServerPort) + "/"; //LOG_INFO << "Web server url: " << g_webServerUrl; qDebug() << "Web server url: " << g_webServerUrl; return true; }