示例#1
0
/*
    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;
}
示例#2
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);
}