/* Open an instance of the ESP for a new request */ static int openEsp(HttpQueue *q) { HttpConn *conn; HttpRx *rx; HttpRoute *rp; EspRoute *eroute; EspReq *req; conn = q->conn; rx = conn->rx; if ((req = mprAllocObj(EspReq, manageReq)) == 0) { httpMemoryError(conn); return MPR_ERR_MEMORY; } /* If unloading a module, this lock will cause a wait here while ESP applications are reloaded. */ lock(esp); esp->inUse++; unlock(esp); /* Find the ESP route configuration. Search up the route parent chain. */ for (eroute = 0, rp = rx->route; rp; rp = rp->parent) { if (rp->eroute) { eroute = rp->eroute; break; } } if (!eroute) { eroute = createEspRoute(rx->route); } rx->route->eroute = eroute; conn->reqData = req; req->esp = esp; req->route = rx->route; req->autoFinalize = 1; /* If a cookie is not explicitly set, use the application name for the session cookie so that cookies are unique per esp application. */ if (!rx->route->cookie) { httpSetRouteCookie(rx->route, sfmt("esp-%s", eroute->appName)); } return 0; }
/* Open an instance of the ESP for a new request */ static void openEsp(HttpQueue *q) { HttpConn *conn; HttpRx *rx; HttpRoute *route; EspRoute *eroute; EspReq *req; conn = q->conn; rx = conn->rx; if (rx->flags & (HTTP_OPTIONS | HTTP_TRACE)) { httpHandleOptionsTrace(q->conn); } else { if ((req = mprAllocObj(EspReq, manageReq)) == 0) { httpMemoryError(conn); return; } /* Find the ESP route configuration. Search up the route parent chain */ for (eroute = 0, route = rx->route; route; route = route->parent) { if (route->eroute) { eroute = route->eroute; break; } } if (!eroute) { // MOB - should be saved for future similar requests (locking too) eroute = allocEspRoute(route); return; } conn->data = req; req->esp = esp; req->route = route; req->eroute = eroute; req->autoFinalize = 1; } /* If unloading a module, this lock will cause a wait here while ESP applications are reloaded */ lock(esp); esp->inUse++; unlock(esp); }