From be03534b69ba7dc002027f0f46de938b6fae52fe Mon Sep 17 00:00:00 2001 From: GetAway Date: Thu, 11 Apr 2024 19:07:37 +0200 Subject: [PATCH] This commit refactors the extraction of HTTP headers in the cPlayback::Start method to include the 'Referer' header using the extractParam helper function. It ensures that the 'Referer' value from URL parameters is properly extracted and appended to the headers when present. Using: Origin commit data ------------------ Branch: master Commit: https://github.com/neutrino-images/ni-libstb-hal/commit/34400d702ff0566b9b4a557b93741cf2805024a7 Author: GetAway Date: 2024-04-11 (Thu, 11 Apr 2024) ------------------ This commit was generated by Migit --- libarmbox/playback_libeplayer3.cpp | 44 +++++++++++++++++++++++++----- libarmbox/playback_libeplayer3.h | 1 + 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/libarmbox/playback_libeplayer3.cpp b/libarmbox/playback_libeplayer3.cpp index 6d3ac35..d89e9af 100644 --- a/libarmbox/playback_libeplayer3.cpp +++ b/libarmbox/playback_libeplayer3.cpp @@ -100,6 +100,26 @@ void cPlayback::Close(void) } } +std::string cPlayback::extractParam(const std::string &hdrs, const std::string ¶mName) +{ + size_t paramPos = hdrs.find(paramName); + if (paramPos != std::string::npos) { + size_t valuePos = paramPos + paramName.length(); + size_t valueEndPos = hdrs.find('&', valuePos); + if (valueEndPos == std::string::npos) { + valueEndPos = hdrs.length(); + } + std::string value = hdrs.substr(valuePos, valueEndPos - valuePos); + + size_t trailingSpacePos = value.find_last_not_of(" \t\r\n"); + if (trailingSpacePos != std::string::npos) { + value.erase(trailingSpacePos + 1); + } + return value; + } + return ""; +} + bool cPlayback::Start(std::string filename, std::string headers, std::string filename2) { return Start((char *) filename.c_str(), 0, 0, 0, 0, 0, headers, filename2); @@ -142,17 +162,27 @@ bool cPlayback::Start(char *filename, int vpid, int vtype, int apid, int ac3, in if (isHTTP && headers.empty()) { - size_t pos = file.find('#'); - if (pos != std::string::npos) - { - headers = file.substr(pos + 1); - pos = headers.find("User-Agent="); - if (pos != std::string::npos) - headers.replace(pos + 10, 1, ": "); + size_t pos = file.rfind('#'); + if (pos != std::string::npos) { + std::string val; + std::string hdrs = file.substr(pos + 1); + + val = extractParam(hdrs, "User-Agent="); + if (!val.empty()) { + headers += "User-Agent: " + val + "\n"; + } + val = extractParam(hdrs, "Referer="); + if (!val.empty()) { + headers += "Referer: " + val + "\n"; + } + if (!headers.empty()) { + file = file.substr(0, pos); + } } } if (!headers.empty()) { + printf("Headers List\n%s", headers.c_str()); const char hkey[] = "headers"; ffmpeg_av_dict_set(hkey, headers.c_str(), 0); } diff --git a/libarmbox/playback_libeplayer3.h b/libarmbox/playback_libeplayer3.h index e984358..a4762c2 100644 --- a/libarmbox/playback_libeplayer3.h +++ b/libarmbox/playback_libeplayer3.h @@ -36,6 +36,7 @@ class cPlayback off64_t last_size; int init_jump; AVFormatContext *avft; + std::string extractParam(const std::string &hdrs, const std::string ¶mName); public: cPlayback(int num = 0); ~cPlayback();