void TSASFunRedirect::Exec(const TStrKdV& FldNmValPrV, const PSAppSrvRqEnv& RqEnv) { PUrl Url = RqEnv->GetHttpRq()->GetUrl(); TStr FunNm = (Url->GetPathSegs() > 1) ? Url->GetPathSeg(1) : ""; EAssert(MapH.IsKey(FunNm)); const TRedirect& Redirect = MapH.GetDat(FunNm); TStrKdV _FldNmValPrV = Redirect.FldNmValPrV; for (int FldN = 0; FldN < FldNmValPrV.Len(); FldN++) { TStr OrgFldNm = FldNmValPrV[FldN].Key; if (Redirect.FldNmMapH.IsKey(OrgFldNm)) { _FldNmValPrV.Add(TStrKd(Redirect.FldNmMapH.GetDat(OrgFldNm), FldNmValPrV[FldN].Dat)); } } RqEnv->ExecFun(Redirect.FunNm, _FldNmValPrV); }
////////////////////////////////////// // File-Download-Function PSIn TSASFunFPath::ExecSIn(const TStrKdV& FldNmValPrV, const PSAppSrvRqEnv& RqEnv, TStr& ContTypeStr) { // construct file name TStr FNm = FPath; PUrl Url = RqEnv->GetHttpRq()->GetUrl(); const int PathSegs = Url->GetPathSegs(); if ((PathSegs == 1) || (PathSegs == 2 && Url->GetPathSeg(1).Empty())) { // nothing specified, do the default TStr PathSeg = Url->GetPathSeg(0); if (PathSeg.LastCh() != '/') { FNm += "/"; } FNm += DefaultFNm; } else { // extract file name for (int PathSegN = 1; PathSegN < PathSegs; PathSegN++) { FNm += "/"; FNm += Url->GetPathSeg(PathSegN); } } // get mime-type TStr FExt = FNm.GetFExt(); if (FExt == ".htm") { ContTypeStr = THttp::TextHtmlFldVal; } else if (FExt == ".html") { ContTypeStr = THttp::TextHtmlFldVal; } else if (FExt == ".js") { ContTypeStr = THttp::TextJavaScriptFldVal; } else if (FExt == ".css") { ContTypeStr = THttp::TextCssFldVal; } else if (FExt == ".ico") { ContTypeStr = THttp::ImageIcoFldVal; } else if (FExt == ".png") { ContTypeStr = THttp::ImagePngFldVal; } else if (FExt == ".jpg") { ContTypeStr = THttp::ImageJpgFldVal; } else if (FExt == ".jpeg") { ContTypeStr = THttp::ImageJpgFldVal; } else if (FExt == ".gif") { ContTypeStr = THttp::ImageGifFldVal; } else { printf("Unknown MIME type for extension '%s' for file '%s'", FExt.CStr(), FNm.CStr()); ContTypeStr = THttp::AppOctetFldVal; } // return stream to the file return TFIn::New(FNm); }