/* * Create a web server described by a config file. */ MaHttp *maCreateWebServer(cchar *configFile) { Mpr *mpr; MaHttp *http; MaServer *server; /* * Initialize and start the portable runtime services. */ if ((mpr = mprCreate(0, NULL, NULL)) == 0) { mprError(mpr, "Can't create the web server runtime"); return 0; } if (mprStart(mpr, 0) < 0) { mprError(mpr, "Can't start the web server runtime"); return 0; } http = maCreateHttp(mpr); if ((server = maCreateServer(http, configFile, NULL, NULL, -1)) == 0) { mprError(mpr, "Can't create the web server"); return 0; } if (maParseConfig(server, configFile) < 0) { mprError(mpr, "Can't parse the config file %s", configFile); return 0; } return http; }
/* Create a simple stand-alone web server */ int main(int argc, char **argv, char **envp) { Mpr *mpr; MaAppweb *appweb; MaServer *server; int rc; rc = MPR_ERR_CANT_CREATE; if ((mpr = mprCreate(0, NULL, MPR_USER_EVENTS_THREAD)) == 0) { mprError("Cannot create the web server runtime"); return -1; } mprStart(); appweb = maCreateAppweb(mpr); mprAddRoot(appweb); server = maCreateServer(appweb, 0); if (maParseConfig(server, "appweb.conf", 0) < 0) { mprError("Cannot parse the config file %s", "appweb.conf"); return -1; } httpDefineAction("/action/myaction", myaction); if (maStartServer(server) < 0) { mprError("Cannot start the web server"); return -1; } mprServiceEvents(-1, 0); maStopServer(server); mprRemoveRoot(appweb); mprDestroy(MPR_EXIT_DEFAULT); return 0; }
/* Create a simple stand-alone web server */ int main(int argc, char **argv, char **envp) { Mpr *mpr; int rc; rc = MPR_ERR_CANT_CREATE; if ((mpr = mprCreate(0, NULL, MPR_USER_EVENTS_THREAD)) == 0) { mprError("Cannot create runtime"); return -1; } if (httpCreate(HTTP_CLIENT_SIDE | HTTP_SERVER_SIDE) == 0) { mprError("Cannot create the HTTP services"); return -1; } mprStart(); if (maParseConfig("appweb.conf") < 0) { mprError("Cannot parse the config file %s", "appweb.conf"); return -1; } httpDefineAction("/action/myaction", myaction); if (httpStartEndpoints() < 0) { mprError("Cannot start the web server"); return -1; } mprServiceEvents(-1, 0); mprDestroy(); return 0; }
static int createEndpoints(int argc, char **argv) { cchar *endpoint; char *ip; int argind, port, secure; ip = 0; port = -1; endpoint = 0; argind = 0; if ((app->appweb = maCreateAppweb()) == 0) { mprLog("error appweb", 0, "Cannot create HTTP service"); return MPR_ERR_CANT_CREATE; } if ((app->server = maCreateServer(app->appweb, "default")) == 0) { mprLog("error appweb", 0, "Cannot create HTTP server"); return MPR_ERR_CANT_CREATE; } loadStaticModules(); mprGC(MPR_GC_FORCE | MPR_GC_COMPLETE); if (argind == argc) { if (maParseConfig(app->server, app->configFile, 0) < 0) { return MPR_ERR_CANT_CREATE; } } else { app->documents = sclone(argv[argind++]); if (argind == argc) { if (maConfigureServer(app->server, NULL, app->home, app->documents, NULL, ME_HTTP_PORT, 0) < 0) { return MPR_ERR_CANT_CREATE; } } else while (argind < argc) { endpoint = argv[argind++]; mprParseSocketAddress(endpoint, &ip, &port, &secure, 80); if (maConfigureServer(app->server, NULL, app->home, app->documents, ip, port, 0) < 0) { return MPR_ERR_CANT_CREATE; } } } if (app->workers >= 0) { mprSetMaxWorkers(app->workers); } /* Call any ESP initializers from slink.c */ appwebStaticInitialize(); #if ME_WIN_LIKE writePort(app->server); #elif ME_UNIX_LIKE addSignals(); #endif mprGC(MPR_GC_FORCE | MPR_GC_COMPLETE); return 0; }
static int runServer(cchar *configFile, cchar *ip, int port, cchar *home, cchar *documents) { MaAppweb *appweb; MaServer *server; if (mprStart() < 0) { mprLog("error appweb", 0, "Cannot start the web server runtime"); return MPR_ERR_CANT_CREATE; } if ((appweb = maCreateAppweb()) == 0) { mprLog("error appweb", 0, "Cannot create appweb object"); return MPR_ERR_CANT_CREATE; } mprAddRoot(appweb); if ((server = maCreateServer(appweb, 0)) == 0) { mprLog("error appweb", 0, "Cannot create the web server"); mprRemoveRoot(appweb); return MPR_ERR_CANT_CREATE; } if (home) { if (maConfigureServer(server, 0, home, documents, ip, port, 0) < 0) { mprLog("error appweb", 0, "Cannot create the web server"); mprRemoveRoot(appweb); return MPR_ERR_BAD_STATE; } } else { if (maParseConfig(server, configFile, 0) < 0) { mprLog("error appweb", 0, "Cannot parse the config file %s", configFile); mprRemoveRoot(appweb); return MPR_ERR_CANT_READ; } } if (maStartServer(server) < 0) { mprLog("error appweb", 0, "Cannot start the web server"); mprRemoveRoot(appweb); return MPR_ERR_CANT_COMPLETE; } mprServiceEvents(-1, 0); maStopServer(server); mprRemoveRoot(appweb); return 0; }
/* Create a web server described by a config file. */ int maRunWebServer(cchar *configFile) { Mpr *mpr; MaAppweb *appweb; MaServer *server; int rc; rc = MPR_ERR_CANT_CREATE; if ((mpr = mprCreate(0, NULL, 0)) == 0) { mprError("Can't create the web server runtime"); } else { if (mprStart() < 0) { mprError("Can't start the web server runtime"); } else { if ((appweb = maCreateAppweb(mpr)) == 0) { mprError("Can't create appweb object"); } else { mprAddRoot(appweb); if ((server = maCreateServer(appweb, 0)) == 0) { mprError("Can't create the web server"); } else { if (maParseConfig(server, configFile, 0) < 0) { mprError("Can't parse the config file %s", configFile); } else { if (maStartServer(server) < 0) { mprError("Can't start the web server"); } else { mprServiceEvents(-1, 0); rc = 0; } maStopServer(server); } } mprRemoveRoot(appweb); } } } mprDestroy(MPR_EXIT_DEFAULT); return rc; }
/* Create the listening endoints */ static int createEndpoints(int argc, char **argv) { cchar *endpoint; char *ip; int argind, port, secure; ip = 0; port = -1; endpoint = 0; argind = 0; if ((app->appweb = maCreateAppweb()) == 0) { mprError("Cannot create HTTP service for %s", mprGetAppName()); return MPR_ERR_CANT_CREATE; } if ((app->server = maCreateServer(app->appweb, "default")) == 0) { mprError("Cannot create HTTP server for %s", mprGetAppName()); return MPR_ERR_CANT_CREATE; } loadStaticModules(); if (argc > argind) { app->documents = sclone(argv[argind++]); mprLog(2, "Documents %s", app->documents); } if (argind == argc) { if (maParseConfig(app->server, app->configFile, 0) < 0) { return MPR_ERR_CANT_CREATE; } } else { while (argind < argc) { endpoint = argv[argind++]; mprParseSocketAddress(endpoint, &ip, &port, &secure, 80); if (maConfigureServer(app->server, NULL, app->home, app->documents, ip, port) < 0) { return MPR_ERR_CANT_CREATE; } } } return 0; }
/* Configure the server. If the configFile is defined, use it. If not, then consider home, documents, ip and port. */ int maConfigureServer(MaServer *server, cchar *configFile, cchar *home, cchar *documents, cchar *ip, int port) { MaAppweb *appweb; Http *http; HttpEndpoint *endpoint; HttpHost *host; HttpRoute *route; char *path; appweb = server->appweb; http = appweb->http; if (configFile) { path = mprGetAbsPath(configFile); if (maParseConfig(server, path, 0) < 0) { /* mprUserError("Can't configure server using %s", path); */ return MPR_ERR_CANT_INITIALIZE; } return 0; } else { mprLog(2, "DocumentRoot %s", documents); if ((endpoint = httpCreateConfiguredEndpoint(home, documents, ip, port)) == 0) { return MPR_ERR_CANT_OPEN; } maAddEndpoint(server, endpoint); host = mprGetFirstItem(endpoint->hosts); mprAssert(host); route = mprGetFirstItem(host->routes); mprAssert(route); #if UNUSED searchPath = getSearchPath(dir); mprSetModuleSearchPath(searchPath); #endif #if BLD_FEATURE_CGI maLoadModule(appweb, "cgiHandler", "mod_cgi"); if (httpLookupStage(http, "cgiHandler")) { httpAddRouteHandler(route, "cgiHandler", "cgi cgi-nph bat cmd pl py"); /* Add cgi-bin with a route for the /cgi-bin URL prefix. */ path = "cgi-bin"; if (mprPathExists(path, X_OK)) { HttpRoute *cgiRoute; cgiRoute = httpCreateAliasRoute(route, "/cgi-bin/", path, 0); mprLog(4, "ScriptAlias \"/cgi-bin/\":\"%s\"", path); httpSetRouteHandler(cgiRoute, "cgiHandler"); httpFinalizeRoute(cgiRoute); } } #endif #if BLD_FEATURE_ESP maLoadModule(appweb, "espHandler", "mod_esp"); if (httpLookupStage(http, "espHandler")) { httpAddRouteHandler(route, "espHandler", "esp"); } #endif #if BLD_FEATURE_EJSCRIPT maLoadModule(appweb, "ejsHandler", "mod_ejs"); if (httpLookupStage(http, "ejsHandler")) { httpAddRouteHandler(route, "ejsHandler", "ejs"); } #endif #if BLD_FEATURE_PHP maLoadModule(appweb, "phpHandler", "mod_php"); if (httpLookupStage(http, "phpHandler")) { httpAddRouteHandler(route, "phpHandler", "php"); } #endif httpAddRouteHandler(route, "fileHandler", ""); httpFinalizeRoute(route); } if (home) { maSetServerHome(server, home); } if (ip || port > 0) { maSetServerAddress(server, ip, port); } return 0; }