/* Case insensitive string comparison. Limited by length */ PUBLIC int scaselesscmp(cchar *s1, cchar *s2) { if (s1 == 0) { return -1; } else if (s2 == 0) { return 1; } return sncaselesscmp(s1, s2, max(slen(s1), slen(s2))); }
static char *resolveUrl(HttpConn *conn, cchar *url) { if (*url == '/') { if (app->host) { if (sncaselesscmp(app->host, "http://", 7) != 0 && sncaselesscmp(app->host, "https://", 8) != 0) { return sfmt("http://%s%s", app->host, url); } else { return sfmt("%s%s", app->host, url); } } else { return sfmt("http://127.0.0.1%s", url); } } if (sncaselesscmp(url, "http://", 7) != 0 && sncaselesscmp(url, "https://", 8) != 0) { if (*url == ':' && isPort(&url[1])) { return sfmt("http://127.0.0.1%s", url); } else if (isPort(url)) { return sfmt("http://127.0.0.1:%s", url); } else { return sfmt("http://%s", url); } } return sclone(url); }
static void trace(HttpConn *conn, cchar *url, int fetchCount, cchar *method, int status, MprOff contentLen) { if (sncaselesscmp(url, "http://", 7) != 0) { url += 7; } if ((fetchCount % 200) == 1) { if (fetchCount == 1 || (fetchCount % 5000) == 1) { if (fetchCount > 1) { mprPrintf("\n"); } mprPrintf(" Count Thread Op Code Bytes Url\n"); } mprPrintf("%7d %7s %4s %5d %7d %s\n", fetchCount - 1, mprGetCurrentThreadName(conn), method, status, (uchar) contentLen, url); } }
/* Match if this request needs the upload filter. Return true if needed. */ static int matchUpload(HttpConn *conn, HttpRoute *route, int dir) { HttpRx *rx; char *pat; ssize len; if (!(dir & HTTP_STAGE_RX)) { return HTTP_ROUTE_OMIT_FILTER; } rx = conn->rx; if (!(rx->flags & HTTP_POST) || rx->remainingContent <= 0) { return HTTP_ROUTE_OMIT_FILTER; } pat = "multipart/form-data"; len = strlen(pat); if (sncaselesscmp(rx->mimeType, pat, len) == 0) { rx->upload = 1; return HTTP_ROUTE_OK; } return HTTP_ROUTE_OMIT_FILTER; }