Added automatic User-Agent stream tagging
This commit is contained in:
parent
d0912c9d00
commit
9ddfa97148
8 changed files with 33 additions and 4 deletions
|
@ -67,6 +67,7 @@ namespace Mist{
|
|||
lastStats = 0;
|
||||
maxSkipAhead = 7500;
|
||||
minSkipAhead = 5000;
|
||||
uaDelay = 10;
|
||||
realTime = 1000;
|
||||
lastRecv = Util::epoch();
|
||||
if (myConn){
|
||||
|
@ -1207,6 +1208,17 @@ namespace Mist{
|
|||
}else{
|
||||
tmpEx.lastSecond(0);
|
||||
}
|
||||
/*LTS-START*/
|
||||
//Tag the session with the user agent
|
||||
static bool newUA = true;//we only do this once per connection
|
||||
if (newUA && ((now - myConn.connTime()) >= uaDelay || !myConn) && UA.size()){
|
||||
std::string APIcall = "{\"tag_sessid\":{\"" + tmpEx.getSessId() + "\":" + JSON::string_escape("UA:"+UA) + "}}";
|
||||
Socket::UDPConnection uSock;
|
||||
uSock.SetDestination("localhost", 4242);
|
||||
uSock.SendNow(APIcall);
|
||||
newUA = false;
|
||||
}
|
||||
/*LTS-END*/
|
||||
statsPage.keepAlive();
|
||||
}
|
||||
doSync();
|
||||
|
|
|
@ -100,6 +100,8 @@ namespace Mist {
|
|||
bool sought;///<If a seek has been done, this is set to true. Used for seeking on prepareNext().
|
||||
protected://these are to be messed with by child classes
|
||||
bool pushing;
|
||||
std::string UA; ///< User Agent string, if known.
|
||||
uint16_t uaDelay;///<Seconds to wait before setting the UA.
|
||||
uint64_t lastRecv;
|
||||
long long unsigned int firstTime;///< Time of first packet after last seek. Used for real-time sending.
|
||||
virtual std::string getConnectedHost();
|
||||
|
|
|
@ -8,7 +8,10 @@
|
|||
#include <iomanip>
|
||||
|
||||
namespace Mist {
|
||||
OutDashMP4::OutDashMP4(Socket::Connection & conn) : HTTPOutput(conn){realTime = 0;}
|
||||
OutDashMP4::OutDashMP4(Socket::Connection & conn) : HTTPOutput(conn){
|
||||
uaDelay = 0;
|
||||
realTime = 0;
|
||||
}
|
||||
OutDashMP4::~OutDashMP4(){}
|
||||
|
||||
std::string OutDashMP4::makeTime(uint64_t time){
|
||||
|
|
|
@ -131,6 +131,8 @@ namespace Mist {
|
|||
} //BuildManifest
|
||||
|
||||
OutHDS::OutHDS(Socket::Connection & conn) : HTTPOutput(conn) {
|
||||
uaDelay = 0;
|
||||
realTime = 0;
|
||||
audioTrack = 0;
|
||||
playUntil = 0;
|
||||
}
|
||||
|
|
|
@ -258,6 +258,7 @@ namespace Mist {
|
|||
|
||||
|
||||
OutHLS::OutHLS(Socket::Connection & conn) : TSOutput(conn) {
|
||||
uaDelay = 0;
|
||||
realTime = 0;
|
||||
until=0xFFFFFFFFFFFFFFFFull;
|
||||
}
|
||||
|
|
|
@ -46,7 +46,10 @@ std::string toUTF16(std::string original) {
|
|||
|
||||
|
||||
namespace Mist {
|
||||
OutHSS::OutHSS(Socket::Connection & conn) : HTTPOutput(conn){realTime = 0;}
|
||||
OutHSS::OutHSS(Socket::Connection & conn) : HTTPOutput(conn){
|
||||
uaDelay = 0;
|
||||
realTime = 0;
|
||||
}
|
||||
OutHSS::~OutHSS(){}
|
||||
|
||||
void OutHSS::init(Util::Config * cfg) {
|
||||
|
|
|
@ -213,6 +213,9 @@ namespace Mist {
|
|||
|
||||
void HTTPOutput::onRequest(){
|
||||
while (H.Read(myConn)){
|
||||
if (H.hasHeader("User-Agent")){
|
||||
UA = H.GetHeader("User-Agent");
|
||||
}
|
||||
if (hasSessionIDs()){
|
||||
if (H.GetVar("sessId").size()){
|
||||
std::string ua = H.GetVar("sessId");
|
||||
|
@ -222,8 +225,8 @@ namespace Mist {
|
|||
crc = checksum::crc32(0, ua.data(), ua.size());
|
||||
}
|
||||
}else{
|
||||
std::string ua = H.GetHeader("User-Agent") + H.GetHeader("X-Playback-Session-Id");
|
||||
crc = checksum::crc32(0, ua.data(), ua.size());
|
||||
std::string mixed_ua = UA + H.GetHeader("X-Playback-Session-Id");
|
||||
crc = checksum::crc32(0, mixed_ua.data(), mixed_ua.size());
|
||||
}
|
||||
|
||||
INFO_MSG("Received request %s", H.getUrl().c_str());
|
||||
|
|
|
@ -597,6 +597,9 @@ namespace Mist {
|
|||
if (amfData.getContentP(2)->getContentP("objectEncoding")) {
|
||||
objencoding = amfData.getContentP(2)->getContentP("objectEncoding")->NumValue();
|
||||
}
|
||||
if (amfData.getContentP(2)->getContentP("flashVer")) {
|
||||
UA = amfData.getContentP(2)->getContentP("flashVer")->StrValue();
|
||||
}
|
||||
app_name = amfData.getContentP(2)->getContentP("tcUrl")->StrValue();
|
||||
reqUrl = app_name;//LTS
|
||||
app_name = app_name.substr(app_name.find('/', 7) + 1);
|
||||
|
|
Loading…
Add table
Reference in a new issue