Fixes to HTTP connector.
This commit is contained in:
parent
48c4efc4fd
commit
480bda3f67
1 changed files with 30 additions and 2 deletions
|
@ -292,9 +292,8 @@ namespace Connector_HTTP {
|
||||||
H.SetHeader("Content-Type", "image/x-icon");
|
H.SetHeader("Content-Type", "image/x-icon");
|
||||||
H.SetHeader("Server", "mistserver/" PACKAGE_VERSION "/" + Util::Config::libver);
|
H.SetHeader("Server", "mistserver/" PACKAGE_VERSION "/" + Util::Config::libver);
|
||||||
H.SetHeader("Content-Length", icon_len);
|
H.SetHeader("Content-Length", icon_len);
|
||||||
H.SetBody("");
|
|
||||||
long long int ret = Util::getMS();
|
long long int ret = Util::getMS();
|
||||||
conn.SendNow(H.BuildResponse("200", "OK"));
|
H.SendResponse("200", "OK", conn);
|
||||||
conn.SendNow((const char*)icon_data, icon_len);
|
conn.SendNow((const char*)icon_data, icon_len);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -387,8 +386,28 @@ namespace Connector_HTTP {
|
||||||
response = "// Generating info code for stream " + streamname + "\n\nif (!mistvideo){var mistvideo = {};}\n";
|
response = "// Generating info code for stream " + streamname + "\n\nif (!mistvideo){var mistvideo = {};}\n";
|
||||||
JSON::Value json_resp;
|
JSON::Value json_resp;
|
||||||
IPC::semaphore configLock("!mistConfLock", O_CREAT | O_RDWR, ACCESSPERMS, 1);
|
IPC::semaphore configLock("!mistConfLock", O_CREAT | O_RDWR, ACCESSPERMS, 1);
|
||||||
|
IPC::semaphore metaLocker(std::string("liveMeta@" + streamname).c_str(), O_CREAT | O_RDWR, ACCESSPERMS, 1);
|
||||||
|
bool metaLock = false;
|
||||||
configLock.wait();
|
configLock.wait();
|
||||||
DTSC::Scan strm = DTSC::Scan(serverCfg.mapped, serverCfg.len).getMember("streams").getMember(streamname).getMember("meta");
|
DTSC::Scan strm = DTSC::Scan(serverCfg.mapped, serverCfg.len).getMember("streams").getMember(streamname).getMember("meta");
|
||||||
|
IPC::sharedPage streamIndex;
|
||||||
|
if (!strm){
|
||||||
|
configLock.post();
|
||||||
|
//Stream metadata not found - attempt to start it
|
||||||
|
if (Util::startInput(streamname)){
|
||||||
|
streamIndex.init(streamname, 8 * 1024 * 1024);
|
||||||
|
if (streamIndex.mapped){
|
||||||
|
metaLock = true;
|
||||||
|
metaLocker.wait();
|
||||||
|
strm = DTSC::Packet(streamIndex.mapped, streamIndex.len, true).getScan();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!strm){
|
||||||
|
//stream failed to start or isn't configured
|
||||||
|
response += "// Stream isn't configured and/or couldn't be started. Sorry.\n";
|
||||||
|
}
|
||||||
|
configLock.wait();
|
||||||
|
}
|
||||||
DTSC::Scan prots = DTSC::Scan(serverCfg.mapped, serverCfg.len).getMember("config").getMember("protocols");
|
DTSC::Scan prots = DTSC::Scan(serverCfg.mapped, serverCfg.len).getMember("config").getMember("protocols");
|
||||||
if (strm && prots){
|
if (strm && prots){
|
||||||
DTSC::Scan trcks = strm.getMember("tracks");
|
DTSC::Scan trcks = strm.getMember("tracks");
|
||||||
|
@ -414,6 +433,11 @@ namespace Connector_HTTP {
|
||||||
|
|
||||||
// show ALL the meta datas!
|
// show ALL the meta datas!
|
||||||
json_resp["meta"] = strm.asJSON();
|
json_resp["meta"] = strm.asJSON();
|
||||||
|
for (JSON::ObjIter it = json_resp["meta"]["tracks"].ObjBegin(); it != json_resp["meta"]["tracks"].ObjEnd(); ++it){
|
||||||
|
it->second.removeMember("fragments");
|
||||||
|
it->second.removeMember("keys");
|
||||||
|
it->second.removeMember("parts");
|
||||||
|
}
|
||||||
|
|
||||||
//create a set for storing source information
|
//create a set for storing source information
|
||||||
std::set<JSON::Value, sourceCompare> sources;
|
std::set<JSON::Value, sourceCompare> sources;
|
||||||
|
@ -462,6 +486,10 @@ namespace Connector_HTTP {
|
||||||
}else{
|
}else{
|
||||||
json_resp["error"] = "The specified stream is not available on this server.";
|
json_resp["error"] = "The specified stream is not available on this server.";
|
||||||
}
|
}
|
||||||
|
if (metaLock){
|
||||||
|
metaLocker.post();
|
||||||
|
}
|
||||||
|
|
||||||
configLock.post();
|
configLock.post();
|
||||||
configLock.close();
|
configLock.close();
|
||||||
response += "mistvideo['" + streamname + "'] = " + json_resp.toString() + ";\n";
|
response += "mistvideo['" + streamname + "'] = " + json_resp.toString() + ";\n";
|
||||||
|
|
Loading…
Add table
Reference in a new issue