mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2024-11-26 20:47:08 +08:00
http服务器支持查找index.html文件
This commit is contained in:
parent
4c39821691
commit
28d20955e0
@ -266,6 +266,25 @@ inline bool HttpSession::checkLiveFlvStream(){
|
|||||||
|
|
||||||
inline bool makeMeun(const string &httpPath,const string &strFullPath,const string &vhost, string &strRet) ;
|
inline bool makeMeun(const string &httpPath,const string &strFullPath,const string &vhost, string &strRet) ;
|
||||||
|
|
||||||
|
inline static string findIndexFile(const string &dir){
|
||||||
|
DIR *pDir;
|
||||||
|
dirent *pDirent;
|
||||||
|
if ((pDir = opendir(dir.data())) == NULL) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
set<string> setFile;
|
||||||
|
while ((pDirent = readdir(pDir)) != NULL) {
|
||||||
|
static set<const char *,StrCaseCompare> indexSet = {"index.html","index.htm","index"};
|
||||||
|
if(indexSet.find(pDirent->d_name) != indexSet.end()){
|
||||||
|
closedir(pDir);
|
||||||
|
return pDirent->d_name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
closedir(pDir);
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
inline bool HttpSession::Handle_Req_GET(int64_t &content_len) {
|
inline bool HttpSession::Handle_Req_GET(int64_t &content_len) {
|
||||||
//先看看是否为WebSocket请求
|
//先看看是否为WebSocket请求
|
||||||
if(checkWebSocket()){
|
if(checkWebSocket()){
|
||||||
@ -299,20 +318,30 @@ inline bool HttpSession::Handle_Req_GET(int64_t &content_len) {
|
|||||||
GET_CONFIG_AND_REGISTER(string,rootPath,Http::kRootPath);
|
GET_CONFIG_AND_REGISTER(string,rootPath,Http::kRootPath);
|
||||||
string strFile = enableVhost ? rootPath + "/" + _mediaInfo._vhost + _parser.Url() :rootPath + _parser.Url();
|
string strFile = enableVhost ? rootPath + "/" + _mediaInfo._vhost + _parser.Url() :rootPath + _parser.Url();
|
||||||
replace(strFile,"//","/");
|
replace(strFile,"//","/");
|
||||||
|
|
||||||
bool bClose = (strcasecmp(_parser["Connection"].data(),"close") == 0) || ( ++_iReqCnt > reqCnt);
|
bool bClose = (strcasecmp(_parser["Connection"].data(),"close") == 0) || ( ++_iReqCnt > reqCnt);
|
||||||
//访问的是文件夹
|
|
||||||
if (strFile.back() == '/' || File::is_dir(strFile.data())) {
|
do{
|
||||||
//生成文件夹菜单索引
|
//访问的是文件夹
|
||||||
string strMeun;
|
if (strFile.back() == '/' || File::is_dir(strFile.data())) {
|
||||||
if (!makeMeun(_parser.Url(),strFile,_mediaInfo._vhost, strMeun)) {
|
auto indexFile = findIndexFile(strFile);
|
||||||
//文件夹不存在
|
if(!indexFile.empty()){
|
||||||
sendNotFound(bClose);
|
//发现该文件夹下有index文件
|
||||||
return !bClose;
|
strFile = strFile + "/" + indexFile;
|
||||||
}
|
replace(strFile,"//","/");
|
||||||
sendResponse("200 OK", makeHttpHeader(bClose,strMeun.size() ), strMeun);
|
break;
|
||||||
return !bClose;
|
}
|
||||||
}
|
//生成文件夹菜单索引
|
||||||
|
string strMeun;
|
||||||
|
if (!makeMeun(_parser.Url(),strFile,_mediaInfo._vhost, strMeun)) {
|
||||||
|
//文件夹不存在
|
||||||
|
sendNotFound(bClose);
|
||||||
|
return !bClose;
|
||||||
|
}
|
||||||
|
sendResponse("200 OK", makeHttpHeader(bClose,strMeun.size() ), strMeun);
|
||||||
|
return !bClose;
|
||||||
|
}
|
||||||
|
}while(0);
|
||||||
|
|
||||||
//访问的是文件
|
//访问的是文件
|
||||||
struct stat tFileStat;
|
struct stat tFileStat;
|
||||||
if (0 != stat(strFile.data(), &tFileStat)) {
|
if (0 != stat(strFile.data(), &tFileStat)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user