Allow overriding application name with -DAPPNAME="Name here"

This commit is contained in:
Thulinma 2019-11-28 01:58:12 +01:00
parent a8e04e1787
commit 771fad390a
21 changed files with 57 additions and 49 deletions

View file

@ -107,6 +107,10 @@ endif()
if (DEFINED UDP_API_PORT )
add_definitions(-DUDP_API_PORT=${UDP_API_PORT})
endif()
if (NOT DEFINED APPNAME )
set(APPNAME "MistServer")
endif()
add_definitions(-DAPPNAME="${APPNAME}")
########################################
# Build Variables - Thread Names #

View file

@ -21,6 +21,7 @@
#define PRETTY_ARG_MSTIME(t) PRETTY_ARG_TIME(t / 1000), (int)(t % 1000)
#if DEBUG > -1
#define APPIDENT APPNAME "/" PACKAGE_VERSION
#define __STDC_FORMAT_MACROS 1
#include "config.h"
#include <inttypes.h>

View file

@ -117,7 +117,11 @@ namespace HTTP{
}
if (method.size()){H.method = method;}
H.SetHeader("User-Agent", "MistServer " PACKAGE_VERSION);
if (link.host.find("mistserver") != std::string::npos){
H.SetHeader("User-Agent", "MistServer" PACKAGE_VERSION);
}else{
H.SetHeader("User-Agent", APPIDENT);
}
H.SetHeader("X-Version", PACKAGE_VERSION);
H.SetHeader("Accept", "*/*");
if (authStr.size() && (link.user.size() || link.pass.size())){

View file

@ -840,7 +840,7 @@ namespace SDP{
M.setCodec(tid, codecRTP2Mist(answerVideoFormat.encodingName));
if (M.getCodec(tid).empty()){
FAIL_MSG("Failed to convert the format codec into one that MistServer understands. %s.",
FAIL_MSG("Failed to convert the format codec into one that " APPNAME " understands. %s.",
answerVideoFormat.encodingName.c_str());
return false;
}
@ -859,7 +859,7 @@ namespace SDP{
M.setCodec(tid, codecRTP2Mist(answerAudioFormat.encodingName));
if (M.getCodec(tid).empty()){
FAIL_MSG("Failed to convert the format codec into one that MistServer understands. %s.",
FAIL_MSG("Failed to convert the format codec into one that " APPNAME " understands. %s.",
answerAudioFormat.encodingName.c_str());
return false;
}

View file

@ -1515,9 +1515,10 @@ namespace TS{
entry.setFreeCAM(true); // Not conditional access
std::string sdti;
sdti += (char)0x48;
sdti += (char)(15 + streamName.size()); // length
sdti += (char)(4 + strlen(APPNAME) + streamName.size()); // length
sdti += (char)1; // digital television service
sdti.append("\012MistServer");
sdti += (char)strlen(APPNAME);
sdti.append(APPNAME);
sdti += (char)streamName.size();
sdti.append(streamName);
entry.setESInfo(sdti);

View file

@ -212,7 +212,7 @@ int main_loop(int argc, char **argv){
strftime(buffer, 25, "%c", timeinfo);
std::cerr << std::endl
<< std::endl
<< "!----MistServer Started at " << buffer << " ----!" << std::endl;
<< "!----" APPNAME " Started at " << buffer << " ----!" << std::endl;
}
}
// reload config from config file

View file

@ -344,7 +344,7 @@ int Controller::handleAPIConnection(Socket::Connection &conn){
if (!authorized){
H.Clean();
H.body = "Please login first or provide a valid token authentication.";
H.SetHeader("Server", "MistServer/" PACKAGE_VERSION);
H.SetHeader("Server", APPIDENT);
H.SetHeader("WWW-Authenticate", "json " + req["authorize"].toString());
H.SendResponse("403", "Not authorized", conn);
H.Clean();
@ -358,7 +358,7 @@ int Controller::handleAPIConnection(Socket::Connection &conn){
if (!authorized){
H.Clean();
H.body = "Please login first or provide a valid token authentication.";
H.SetHeader("Server", "MistServer/" PACKAGE_VERSION);
H.SetHeader("Server", APPIDENT);
H.SendResponse("403", "Not authorized", conn);
H.Clean();
continue;
@ -388,7 +388,7 @@ int Controller::handleAPIConnection(Socket::Connection &conn){
H.Clean();
H.SetHeader("Content-Type", "text/html");
H.SetHeader("X-Info", "To force an API response, request the file /api");
H.SetHeader("Server", "MistServer/" PACKAGE_VERSION);
H.SetHeader("Server", APPIDENT);
H.SetHeader("Content-Length", server_html_len);
H.SetHeader("X-UA-Compatible", "IE=edge;chrome=1");
H.SendResponse("200", "OK", conn);

View file

@ -16,13 +16,13 @@ namespace Controller{
/// Generate list of available triggers, storing in global 'capabilities' JSON::Value.
void checkAvailTriggers(){
JSON::Value &trgs = capabilities["triggers"];
trgs["SYSTEM_START"]["when"] = "After MistServer boot";
trgs["SYSTEM_START"]["when"] = "After " APPNAME " boot";
trgs["SYSTEM_START"]["stream_specific"] = false;
trgs["SYSTEM_START"]["payload"] = "";
trgs["SYSTEM_START"]["response"] = "always";
trgs["SYSTEM_START"]["response_action"] = "If false, shuts down the server.";
trgs["SYSTEM_STOP"]["when"] = "Before MistServer shuts down";
trgs["SYSTEM_STOP"]["when"] = "Before " APPNAME " shuts down";
trgs["SYSTEM_STOP"]["stream_specific"] = false;
trgs["SYSTEM_STOP"]["payload"] = "shutdown reason (string)";
trgs["SYSTEM_STOP"]["response"] = "always";

View file

@ -1474,7 +1474,7 @@ void Controller::handlePrometheus(HTTP::Parser &H, Socket::Connection &conn, int
if (H.GetVar("jsonp") != ""){jsonp = H.GetVar("jsonp");}
break;
}
H.SetHeader("Server", "MistServer/" PACKAGE_VERSION);
H.SetHeader("Server", APPIDENT);
H.StartResponse("200", "OK", H, conn, true);
// Collect core server stats

View file

@ -1110,8 +1110,7 @@ namespace Mist{
"</ServerKey><RequestXml>"
"<![CDATA["
"<KeyOSEncryptionInfoRequest><APIVersion>5.0.0.2</APIVersion><DRMType>smooth</"
"DRMType><EncoderVersion>"
"MistServer " RELEASE "_" PACKAGE_VERSION "</EncoderVersion><UserKey>";
"DRMType><EncoderVersion>" APPIDENT "</EncoderVersion><UserKey>";
soap << config->getString("buydrm");
soap << "</UserKey><KeyID>";
soap << formatGUID(contentID);

View file

@ -16,8 +16,8 @@ namespace Mist{
inputDTSC::inputDTSC(Util::Config *cfg) : Input(cfg){
capa["name"] = "DTSC";
capa["desc"] = "Load DTSC files as Video on Demand sources, or dtsc:// URLs from other "
"MistServer instances for live sources. This is the optimal method to pull live "
"sources from other MistServer (or compatible) instances.";
"instances for live sources. This is the optimal method to pull live "
"sources from MistServer compatible instances.";
capa["priority"] = 9;
capa["source_match"].append("/*.dtsc");
capa["source_match"].append("dtsc://*");
@ -193,7 +193,7 @@ namespace Mist{
if (!srcConn.connected()){return false;}
JSON::Value prep;
prep["cmd"] = "play";
prep["version"] = "MistServer " PACKAGE_VERSION;
prep["version"] = APPIDENT;
prep["stream"] = streamName;
srcConn.SendNow("DTCM");
char sSize[4] ={0, 0, 0, 0};

View file

@ -100,7 +100,7 @@ namespace Mist{
if ((username.size() || password.size()) && authRequest.size()){
sndH.auth(username, password, authRequest);
}
sndH.SetHeader("User-Agent", "MistServer " PACKAGE_VERSION);
sndH.SetHeader("User-Agent", APPIDENT);
sndH.SetHeader("CSeq", JSON::Value(cSeq).asString());
if (session.size()){sndH.SetHeader("Session", session);}
if (extraHeaders && extraHeaders->size()){

View file

@ -13,7 +13,7 @@ namespace Mist{
setBlocking(true);
JSON::Value prep;
prep["cmd"] = "hi";
prep["version"] = "MistServer " PACKAGE_VERSION;
prep["version"] = APPIDENT;
prep["pack_method"] = 2;
salt = Secure::md5("mehstuff" + JSON::Value((uint64_t)time(0)).asString());
prep["salt"] = salt;
@ -55,8 +55,7 @@ namespace Mist{
Output::init(cfg);
capa["name"] = "DTSC";
capa["friendly"] = "DTSC";
capa["desc"] = "Real time streaming over DTSC (MistServer proprietary protocol, for efficient "
"inter-server streaming)";
capa["desc"] = "Real time streaming over DTSC (proprietary protocol for efficient inter-server streaming)";
capa["deps"] = "";
capa["codecs"][0u][0u].append("+*");
cfg->addConnectorOptions(4200, capa);

View file

@ -335,7 +335,7 @@ namespace Mist{
EBML::sendElemSeek(myConn, EBML::EID_CUES, seekheadSize + infoSize + tracksSize);
}
// Info
EBML::sendElemInfo(myConn, "MistServer " PACKAGE_VERSION, duration);
EBML::sendElemInfo(myConn, APPIDENT, duration);
// Tracks
size_t trackSizes = 0;
for (std::map<size_t, Comms::Users>::iterator it = userSelect.begin(); it != userSelect.end(); it++){
@ -497,7 +497,7 @@ namespace Mist{
// Segment contains SeekHead, Info, Tracks, Cues (in that order)
// Howeveer, SeekHead is dependent on Info/Tracks sizes, so we calculate those first.
// Calculating Info size
infoSize = EBML::sizeElemInfo("MistServer " PACKAGE_VERSION, duration);
infoSize = EBML::sizeElemInfo(APPIDENT, duration);
// Calculating Tracks size
tracksSize = 0;
for (std::map<size_t, Comms::Users>::iterator it = userSelect.begin(); it != userSelect.end(); it++){

View file

@ -226,7 +226,7 @@ namespace Mist{
if (H.url == "/crossdomain.xml"){
H.Clean();
H.SetHeader("Content-Type", "text/xml");
H.SetHeader("Server", "MistServer/" PACKAGE_VERSION);
H.SetHeader("Server", APPIDENT);
H.setCORSHeaders();
if (method == "OPTIONS" || method == "HEAD"){
H.SendResponse("200", "OK", myConn);
@ -415,7 +415,7 @@ namespace Mist{
return;
}
H.Clean(); // make sure no parts of old requests are left in any buffers
H.SetHeader("Server", "MistServer/" PACKAGE_VERSION);
H.SetHeader("Server", APPIDENT);
H.setCORSHeaders();
H.SetHeader("Content-Type", "application/vnd.apple.mpegurl");
H.SetHeader("Cache-Control", "no-cache");

View file

@ -58,7 +58,7 @@ namespace Mist{
INFO_MSG("Failing '%s': %s", H.url.c_str(), msg.c_str());
if (!webSock && !isRecording()){
H.Clean(); // make sure no parts of old requests are left in any buffers
H.SetHeader("Server", "MistServer/" PACKAGE_VERSION);
H.SetHeader("Server", APPIDENT);
H.setCORSHeaders();
H.SetBody("Could not retrieve stream: " + msg);
H.SendResponse("404", "Error opening stream", myConn);
@ -208,7 +208,7 @@ namespace Mist{
H.GetVar("stream").c_str());
if (!handler.size()){
H.Clean();
H.SetHeader("Server", "MistServer/" PACKAGE_VERSION);
H.SetHeader("Server", APPIDENT);
H.setCORSHeaders();
H.SetBody("<!DOCTYPE html><html><head><title>Unsupported Media "
"Type</title></head><body><h1>Unsupported Media Type</h1>The server isn't quite "

View file

@ -375,7 +375,7 @@ namespace Mist{
H.Clean();
H.SetHeader("Content-Type", "text/html");
H.SetHeader("X-UA-Compatible", "IE=edge");
H.SetHeader("Server", "MistServer/" PACKAGE_VERSION);
H.SetHeader("Server", APPIDENT);
H.setCORSHeaders();
if (method == "OPTIONS" || method == "HEAD"){
H.SendResponse("200", "OK", myConn);
@ -599,7 +599,7 @@ namespace Mist{
if (it->asStringRef().substr(0, cbToken.size() + 1) == cbToken + ":"){
H.Clean();
H.SetHeader("Content-Type", "text/plain");
H.SetHeader("Server", "MistServer/" PACKAGE_VERSION);
H.SetHeader("Server", APPIDENT);
H.setCORSHeaders();
H.SetBody(it->asStringRef().substr(cbToken.size() + 1));
H.SendResponse("200", "OK", myConn);
@ -609,7 +609,7 @@ namespace Mist{
}
H.Clean();
H.SetHeader("Content-Type", "text/plain");
H.SetHeader("Server", "MistServer/" PACKAGE_VERSION);
H.SetHeader("Server", APPIDENT);
H.setCORSHeaders();
H.SetBody("No matching validation found for token '" + cbToken + "'");
H.SendResponse("404", "Not found", myConn);
@ -620,7 +620,7 @@ namespace Mist{
if (H.url == "/crossdomain.xml"){
H.Clean();
H.SetHeader("Content-Type", "text/xml");
H.SetHeader("Server", "MistServer/" PACKAGE_VERSION);
H.SetHeader("Server", APPIDENT);
H.setCORSHeaders();
if (method == "OPTIONS" || method == "HEAD"){
H.SendResponse("200", "OK", myConn);
@ -639,7 +639,7 @@ namespace Mist{
if (H.url == "/clientaccesspolicy.xml"){
H.Clean();
H.SetHeader("Content-Type", "text/xml");
H.SetHeader("Server", "MistServer/" PACKAGE_VERSION);
H.SetHeader("Server", APPIDENT);
H.setCORSHeaders();
if (method == "OPTIONS" || method == "HEAD"){
H.SendResponse("200", "OK", myConn);
@ -660,7 +660,7 @@ namespace Mist{
if (H.url == "/flashplayer.swf"){
H.Clean();
H.SetHeader("Content-Type", "application/x-shockwave-flash");
H.SetHeader("Server", "MistServer/" PACKAGE_VERSION);
H.SetHeader("Server", APPIDENT);
H.SetBody((const char *)FlashMediaPlayback_101_swf, FlashMediaPlayback_101_swf_len);
H.SendResponse("200", "OK", myConn);
return;
@ -668,7 +668,7 @@ namespace Mist{
if (H.url == "/oldflashplayer.swf"){
H.Clean();
H.SetHeader("Content-Type", "application/x-shockwave-flash");
H.SetHeader("Server", "MistServer/" PACKAGE_VERSION);
H.SetHeader("Server", APPIDENT);
H.SetBody((const char *)FlashMediaPlayback_swf, FlashMediaPlayback_swf_len);
H.SendResponse("200", "OK", myConn);
return;
@ -723,7 +723,7 @@ namespace Mist{
H.Clean();
H.SetHeader("Content-Type", "application/smil");
H.SetHeader("Server", "MistServer/" PACKAGE_VERSION);
H.SetHeader("Server", APPIDENT);
H.setCORSHeaders();
if (method == "OPTIONS" || method == "HEAD"){
H.SendResponse("200", "OK", myConn);
@ -747,7 +747,7 @@ namespace Mist{
std::string rURL = H.url;
if (method != "OPTIONS" && method != "HEAD"){initialize();}
H.Clean();
H.SetHeader("Server", "MistServer/" PACKAGE_VERSION);
H.SetHeader("Server", APPIDENT);
H.setCORSHeaders();
if (rURL.substr(0, 6) != "/json_"){
H.SetHeader("Content-Type", "application/javascript");
@ -787,7 +787,7 @@ namespace Mist{
std::string response;
std::string rURL = H.url;
H.Clean();
H.SetHeader("Server", "MistServer/" PACKAGE_VERSION);
H.SetHeader("Server", APPIDENT);
H.setCORSHeaders();
H.SetHeader("Content-Type", "application/javascript; charset=utf-8");
if (method == "OPTIONS" || method == "HEAD"){
@ -860,7 +860,7 @@ namespace Mist{
std::string response;
std::string url = H.url;
H.Clean();
H.SetHeader("Server", "MistServer/" PACKAGE_VERSION);
H.SetHeader("Server", APPIDENT);
H.setCORSHeaders();
H.SetHeader("Content-Type", "text/css");
if (method == "OPTIONS" || method == "HEAD"){
@ -893,7 +893,7 @@ namespace Mist{
if (H.url == "/videojs.js"){
std::string response;
H.Clean();
H.SetHeader("Server", "MistServer/" PACKAGE_VERSION);
H.SetHeader("Server", APPIDENT);
H.setCORSHeaders();
H.SetHeader("Content-Type", "application/javascript");
if (method == "OPTIONS" || method == "HEAD"){
@ -913,7 +913,7 @@ namespace Mist{
if (H.url == "/dashjs.js"){
std::string response;
H.Clean();
H.SetHeader("Server", "MistServer/" PACKAGE_VERSION);
H.SetHeader("Server", APPIDENT);
H.setCORSHeaders();
H.SetHeader("Content-Type", "application/javascript");
if (method == "OPTIONS" || method == "HEAD"){
@ -935,7 +935,7 @@ namespace Mist{
if (H.url == "/webrtc.js"){
std::string response;
H.Clean();
H.SetHeader("Server", "MistServer/" PACKAGE_VERSION);
H.SetHeader("Server", APPIDENT);
H.setCORSHeaders();
H.SetHeader("Content-Type", "application/javascript");
if (method == "OPTIONS" || method == "HEAD"){
@ -979,7 +979,7 @@ namespace Mist{
/*LTS-START*/
if (H.GetVar("s").size() && H.GetVar("s") == SUPER_SECRET){
H.Clean();
H.SetHeader("Server", "mistserver/" PACKAGE_VERSION);
H.SetHeader("Server", APPIDENT);
H.setCORSHeaders();
if (method == "OPTIONS" || method == "HEAD"){
H.SendResponse("200", "OK", myConn);
@ -995,7 +995,7 @@ namespace Mist{
H.Clean();
#include "../icon.h"
H.SetHeader("Content-Type", "image/x-icon");
H.SetHeader("Server", "MistServer/" PACKAGE_VERSION);
H.SetHeader("Server", APPIDENT);
H.SetHeader("Content-Length", icon_len);
H.setCORSHeaders();
if (method == "OPTIONS" || method == "HEAD"){

View file

@ -48,7 +48,7 @@ namespace Mist{
WARN_MSG("URL %s is not inside webroot %s: %s", H.url.c_str(), resolved_path.c_str(), path.c_str());
}
H.Clean();
H.SetHeader("Server", "mistserver/" PACKAGE_VERSION);
H.SetHeader("Server", APPIDENT);
H.setCORSHeaders();
if (method == "OPTIONS" || method == "HEAD"){
H.SendResponse("200", "OK", myConn);
@ -65,7 +65,7 @@ namespace Mist{
unsigned long long filesize = inFile.tellg();
inFile.seekg(0, std::ios_base::beg);
H.Clean();
H.SetHeader("Server", "mistserver/" PACKAGE_VERSION);
H.SetHeader("Server", APPIDENT);
H.SetHeader("Content-Length", filesize);
H.setCORSHeaders();
if (method == "OPTIONS" || method == "HEAD"){

View file

@ -223,7 +223,7 @@ namespace Mist{
// seed the rng
if ((ret = mbedtls_ctr_drbg_seed(&ctr_drbg, mbedtls_entropy_func, &entropy,
(const unsigned char *)"MistServer", 10)) != 0){
(const unsigned char *)APPNAME, strlen(APPNAME))) != 0){
FAIL_MSG("Could not seed the random number generator!");
}

View file

@ -138,7 +138,7 @@ namespace Mist{
amfReply.getContentP(2)->addContent(AMF::Object("app", app + args));
amfReply.getContentP(2)->addContent(AMF::Object("type", "nonprivate"));
amfReply.getContentP(2)->addContent(
AMF::Object("flashVer", "FMLE/3.0 (compatible; MistServer/" PACKAGE_VERSION "/" RELEASE ")"));
AMF::Object("flashVer", "FMLE/3.0 (compatible; " APPNAME ")"));
amfReply.getContentP(2)->addContent(AMF::Object("tcUrl", pushHost + app + args));
sendCommand(amfReply, 20, 0);

View file

@ -189,7 +189,7 @@ namespace Mist{
<< reqUrl
<< "\r\n"
"t=0 0\r\n"
"a=tool:MistServer\r\n"
"a=tool:" APPIDENT "\r\n"
"a=type:broadcast\r\n"
"a=control:*\r\n"
<< "a=range:npt=" << ((double)startTime()) / 1000.0 << "-"
@ -327,7 +327,7 @@ namespace Mist{
<< reqUrl
<< "\r\n"
"t=0 0\r\n"
"a=tool:MistServer\r\n"
"a=tool:" APPIDENT "\r\n"
"a=type:broadcast\r\n"
"a=control:*\r\n"
<< "a=range:npt=" << ((double)startTime()) / 1000.0 << "-"