From 4b3f684999d715d636a3d3a385fc06487c93149e Mon Sep 17 00:00:00 2001 From: thlo Date: Sun, 31 Jan 2016 19:47:35 +0100 Subject: Add (optional) support for CORS HTTP response header. --- responsebase.c | 6 ++++++ smarttvweb.conf | 5 +++++ stvw_cfg.c | 10 +++++++++- stvw_cfg.h | 5 +++++ 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/responsebase.c b/responsebase.c index 1ca526a..5ee657e 100755 --- a/responsebase.c +++ b/responsebase.c @@ -87,6 +87,12 @@ void cResponseBase::sendHeaders(int status, const char *title, const char *extra hdr += f; snprintf(f, sizeof(f), "Server: %s\r\n", SERVER); hdr += f; + + if (mRequest->mFactory->getConfig()->addCorsHeader()) { + snprintf(f, sizeof(f), "Access-Control-Allow-Origin: %s\r\n", (mRequest->mFactory->getConfig()->getCorsHeader().c_str())); + hdr += f; + } + now = time(NULL); strftime(timebuf, sizeof(timebuf), RFC1123FMT, gmtime(&now)); snprintf(f, sizeof(f), "Date: %s\r\n", timebuf); diff --git a/smarttvweb.conf b/smarttvweb.conf index 0fac880..97849ec 100755 --- a/smarttvweb.conf +++ b/smarttvweb.conf @@ -39,3 +39,8 @@ GroupSeparators Ignore # Only used, when UseStreamDev4Live is false # Buffer duration in the plugin for live (in milliseconds) BuiltInLiveBufDur 600 + +# In case, the server should add a Cross Origin Resource Sharing Header +# Value of the access-control-allow-origin HTTP response header +#CorsHeader http://192.168.1.122 http://teefax:8000 + diff --git a/stvw_cfg.c b/stvw_cfg.c index 7af88b7..19f16c8 100755 --- a/stvw_cfg.c +++ b/stvw_cfg.c @@ -34,7 +34,8 @@ cSmartTvConfig::cSmartTvConfig(string d): mConfigDir(d), mLog(NULL), mCfgFile(NULL), mLogFile(), mMediaFolder(), mSegmentDuration(), mHasMinBufferTime(), mHasBitrateCorrection(), mLiveChannels(), mGroupSep(IGNORE), mServerAddress(""), mServerPort(8000), mCmds(false), mUseStreamDev4Live(true), - mBuiltInLiveStartMode (4), mBuiltInLivePktBuf4Hd(150), mBuiltInLivePktBuf4Sd(75), mBuiltInLiveBufDur(0.6) { + mBuiltInLiveStartMode (4), mBuiltInLivePktBuf4Hd(150), mBuiltInLivePktBuf4Sd(75), mBuiltInLiveBufDur(0.6), + mAddCorsHeader(false), mCorsHeaderPyld() { #ifndef STANDALONE mLogFile= ""; @@ -82,6 +83,7 @@ void cSmartTvConfig::printConfig() { // *(mLog->log()) << " BuiltInLivePktBuf4Hd: " << mBuiltInLivePktBuf4Hd << endl; // *(mLog->log()) << " BuiltInLivePktBuf4Sd: " << mBuiltInLivePktBuf4Sd << endl; *(mLog->log()) << " BuiltInLiveBufDur: " << mBuiltInLiveBufDur << endl; + *(mLog->log()) << " CorsHdrPyld: " << mCorsHeaderPyld << endl; } @@ -197,6 +199,12 @@ void cSmartTvConfig::readConfig() { mBuiltInLiveBufDur = 0.5; continue; } + + if (strcmp(attr, "CorsHeader") == 0) { + mAddCorsHeader = true; + mCorsHeaderPyld = value; + continue; + } #ifndef STANDALONE esyslog("WARNING in SmartTvWeb: Attribute= %s with value= %s was not processed, thus ignored.", attr, value); diff --git a/stvw_cfg.h b/stvw_cfg.h index a2c0233..81d5a38 100755 --- a/stvw_cfg.h +++ b/stvw_cfg.h @@ -63,6 +63,9 @@ class cSmartTvConfig { int mBuiltInLivePktBuf4Sd; double mBuiltInLiveBufDur; + bool mAddCorsHeader; + string mCorsHeaderPyld; + public: cSmartTvConfig(string dir); ~cSmartTvConfig(); @@ -87,6 +90,8 @@ class cSmartTvConfig { int getBuiltInLivePktBuf4Sd() { return mBuiltInLivePktBuf4Sd; }; double getBuiltInLiveBufDur() { return mBuiltInLiveBufDur; }; + bool addCorsHeader() { return mAddCorsHeader; }; + string getCorsHeader() {return mCorsHeaderPyld; }; }; #endif -- cgit v1.2.3