diff --git a/apps/sbc/HeaderFilter.cpp b/apps/sbc/HeaderFilter.cpp index 44803352..cef440d3 100644 --- a/apps/sbc/HeaderFilter.cpp +++ b/apps/sbc/HeaderFilter.cpp @@ -90,7 +90,7 @@ bool readFilter(AmConfigReader& cfg, const char* cfg_key_filter, const char* cfg return true; } -int skip_header(const std::string& hdr, size_t start_pos, +int skip_header(std::string& hdr, size_t start_pos, size_t& name_end, size_t& val_begin, size_t& val_end, size_t& hdr_end) { /* adapted from sip/parse_header.cpp */ @@ -111,8 +111,11 @@ int skip_header(const std::string& hdr, size_t start_pos, int st = H_NAME; int saved_st = 0; + /* iterate till actual name, if space(s)/tab(s) in front of hf name */ + bool iteration_till_name = true; + size_t p = start_pos; - for (; p& filter_list) { /* todo: multi-line header support */ size_t start_pos = 0; - while (start_pos& filter_list) { return res; } - string hdr_name = hdrs.substr(start_pos, name_end-start_pos); + string hdr_name = hdrs.substr(start_pos, name_end - start_pos); std::transform(hdr_name.begin(), hdr_name.end(), hdr_name.begin(), ::tolower); bool erase = (f_type == Whitelist); + string hdr_value = hdrs.substr(val_begin, val_end - val_begin); + + DBG("hdr name parsed: '%s'\n", hdr_name.c_str()); + DBG("hdr value parsed: '%s'\n", hdr_value.c_str()); + for (set::iterator it = headerfilter_list.begin(); it != headerfilter_list.end(); ++it) { @@ -237,9 +299,10 @@ int inplaceHeaderFilter(string& hdrs, const vector& filter_list) { } if (erase) { - DBG("erasing header '%s' by %s\n", hdr_name.c_str(), FilterType2String(f_type)); + DBG("erasing header '%s' by filter '%s'\n", hdr_name.c_str(), FilterType2String(f_type)); hdrs.erase(start_pos, hdr_end-start_pos); } else { + DBG("header accepted '%s' by filter '%s'\n", hdr_name.c_str(), FilterType2String(f_type)); start_pos = hdr_end; } }