diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 10bb2f1..54757c3 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -132,3 +132,6 @@ Norman Thiel vel_tins for reporting that externremux x264 uses value of ABR for VBR + +Matthias Prill + for reporting a compiler error with older libstdc++ versions diff --git a/HISTORY b/HISTORY index ad4f134..7624838 100644 --- a/HISTORY +++ b/HISTORY @@ -1,6 +1,8 @@ VDR Plugin 'streamdev' Revision History --------------------------------------- +- don't use std::map.at(). It's not available in older libstdc++ version + (reported by Matthias Prill) - fixed extremux x264 using value of ABR for VBR (thanks to vel_tins@vdrportal) 2010-07-20: Version 0.4.0b diff --git a/remux/extern.c b/remux/extern.c index ce76883..d66dc0a 100644 --- a/remux/extern.c +++ b/remux/extern.c @@ -151,7 +151,10 @@ cTSExt::cTSExt(cRingBufferLinear *ResultBuffer, const cServerConnection *Connect // look for section parameters: /path;param1=value1;param2=value2/ std::string::size_type begin, end; - std::string path = Connection->Headers().at("PATH_INFO"); + const static std::string PATH_INFO("PATH_INFO"); + + tStrStrMap::const_iterator it_pathinfo = Connection->Headers().find(PATH_INFO); + const std::string& path = it_pathinfo == Connection->Headers().end() ? "/" : it_pathinfo->second; begin = path.find(';', 0); begin = path.find_first_not_of(';', begin); end = path.find_first_of(";/", begin); diff --git a/server/connectionHTTP.c b/server/connectionHTTP.c index 7e9766c..72a72c0 100644 --- a/server/connectionHTTP.c +++ b/server/connectionHTTP.c @@ -1,5 +1,5 @@ /* - * $Id: connectionHTTP.c,v 1.13.2.4 2010/07/20 12:26:10 schmirl Exp $ + * $Id: connectionHTTP.c,v 1.13.2.5 2010/07/22 14:18:36 schmirl Exp $ */ #include @@ -140,7 +140,12 @@ bool cConnectionHTTP::ProcessRequest(void) } } - if (Headers().at(REQUEST_METHOD).compare("GET") == 0 && ProcessURI(Headers().at(PATH_INFO))) { + tStrStrMap::const_iterator it_method = Headers().find(REQUEST_METHOD); + tStrStrMap::const_iterator it_pathinfo = Headers().find(PATH_INFO); + if (it_method == Headers().end() || it_pathinfo == Headers().end()) { + // should never happen + esyslog("streamdev-server connectionHTTP: Missing method or pathinfo"); + } else if (it_method->second.compare("GET") == 0 && ProcessURI(it_pathinfo->second)) { if (m_ChannelList) return Respond("%s", true, m_ChannelList->HttpHeader().c_str()); else if (m_Channel != NULL) { @@ -176,7 +181,7 @@ bool cConnectionHTTP::ProcessRequest(void) return Respond("HTTP/1.0 404 not found") && Respond(""); } - } else if (Headers().at(REQUEST_METHOD).compare("HEAD") == 0 && ProcessURI(Headers().at(PATH_INFO))) { + } else if (it_method->second.compare("HEAD") == 0 && ProcessURI(it_pathinfo->second)) { DeferClose(); if (m_ChannelList) return Respond("%s", true, m_ChannelList->HttpHeader().c_str()); @@ -249,7 +254,8 @@ cChannelList* cConnectionHTTP::ChannelListFromString(const std::string& Path, co const static std::string QUERY_STRING("QUERY_STRING"); const static std::string HOST("HTTP_HOST"); - const std::string query = Headers().at(QUERY_STRING); + tStrStrMap::const_iterator it_query = Headers().find(QUERY_STRING); + const std::string& query = it_query == Headers().end() ? "" : it_query->second; std::string groupTarget; cChannelIterator *iterator = NULL;