static int reportResponse(HttpConn *conn, cchar *url, MprTime elapsed) { HttpRx *rx; MprOff bytesRead; char *responseHeaders; int status; if (mprShouldAbortRequests(conn)) { return 0; } app->status = status = httpGetStatus(conn); bytesRead = httpGetContentLength(conn); if (bytesRead < 0 && conn->rx) { bytesRead = conn->rx->bytesRead; } mprLog(6, "Response status %d, elapsed %Ld", status, elapsed); if (conn->error) { app->success = 0; } if (conn->rx && bytesRead > 0) { if (!app->noout) { mprPrintf("\n"); } if (app->showHeaders) { responseHeaders = httpGetHeaders(conn); rx = conn->rx; mprPrintf("%s %d %s\n", conn->protocol, status, rx->statusMessage); if (responseHeaders) { mprPrintf("%s\n", responseHeaders); } } else if (app->showStatus) { mprPrintf("%d\n", status); } } if (status < 0) { mprError("Can't process request for \"%s\" %s", url, httpGetError(conn)); return MPR_ERR_CANT_READ; } else if (status == 0 && conn->protocol == 0) { /* Ignore */; } else if (!(200 <= status && status <= 206) && !(301 <= status && status <= 304)) { if (!app->zeroOnErrors) { app->success = 0; } if (!app->showStatus) { mprError("Can't process request for \"%s\" (%d) %s", url, status, httpGetError(conn)); return MPR_ERR_CANT_READ; } } mprLock(app->mutex); if (app->verbose && app->noout) { trace(conn, url, app->fetchCount, app->method, status, bytesRead); } mprUnlock(app->mutex); return 0; }
static int serverCollectFullPayload(struct HttpConnection *http, void *payload_, const char *buf, int len) { int rc = HTTP_READ_MORE; struct PayLoad *payload = (struct PayLoad *)payload_; if (buf && len) { if (payload->len + len > MAX_PAYLOAD_LENGTH) { httpSendReply(http, 400, "Bad Request", NO_MSG); return HTTP_DONE; } check(len > 0); check(payload->bytes = realloc(payload->bytes, payload->len + len)); memcpy(payload->bytes + payload->len, buf, len); payload->len += len; } const char *contentLength = getFromHashMap(httpGetHeaders(http), "content-length"); if (!contentLength || (payload->bytes && ((contentLength && atoi(contentLength) <= payload->len) || !buf))) { rc = payload->handler(http, payload->arg, payload->bytes ? payload->bytes : "", payload->len); free(payload->bytes); payload->bytes = NULL; payload->len = 0; } if (!buf) { if (rc == HTTP_SUSPEND || rc == HTTP_PARTIAL_REPLY) { // Tell the other party that the connection is getting torn down, even // though it requested it to be suspended. payload->handler(http, payload->arg, NULL, 0); rc = HTTP_DONE; } free(payload); } return rc; }
char *espGetHeaders(HttpConn *conn) { return httpGetHeaders(conn); }