From fabcc91a0e34bafc43ab31d8f655413a4e775579 Mon Sep 17 00:00:00 2001 From: winlin Date: Mon, 7 Dec 2015 18:22:55 +0800 Subject: [PATCH] refine codes. --- trunk/src/kernel/srs_kernel_utility.cpp | 52 +++++++++++++++++++++++- trunk/src/kernel/srs_kernel_utility.hpp | 1 + trunk/src/protocol/srs_http_stack.cpp | 3 ++ trunk/src/protocol/srs_protocol_json.cpp | 15 +++++++ trunk/src/protocol/srs_protocol_json.hpp | 1 + 5 files changed, 71 insertions(+), 1 deletion(-) mode change 100755 => 100644 trunk/src/protocol/srs_http_stack.cpp diff --git a/trunk/src/kernel/srs_kernel_utility.cpp b/trunk/src/kernel/srs_kernel_utility.cpp index 8fbec7430..e1a71898d 100644 --- a/trunk/src/kernel/srs_kernel_utility.cpp +++ b/trunk/src/kernel/srs_kernel_utility.cpp @@ -357,7 +357,57 @@ vector srs_string_split(string str, string flag) while ((pos = s.find(flag)) != string::npos) { arr.push_back(s.substr(0, pos)); - s = s.substr(pos + 1); + s = s.substr(pos + flag.length()); + } + + if (!s.empty()) { + arr.push_back(s); + } + + return arr; +} + +string srs_string_min_match(string str, vector flags) +{ + string match; + + size_t min_pos = string::npos; + for (vector::iterator it = flags.begin(); it != flags.end(); ++it) { + string flag = *it; + + size_t pos = str.find(flag); + if (pos == string::npos) { + continue; + } + + if (min_pos == string::npos || pos < min_pos) { + min_pos = pos; + match = flag; + } + } + + return match; +} + +vector srs_string_split(string str, vector flags) +{ + vector arr; + + size_t pos = string::npos; + string s = str; + + while (true) { + string flag = srs_string_min_match(s, flags); + if (flag.empty()) { + break; + } + + if ((pos = s.find(flag)) == string::npos) { + break; + } + + arr.push_back(s.substr(0, pos)); + s = s.substr(pos + flag.length()); } if (!s.empty()) { diff --git a/trunk/src/kernel/srs_kernel_utility.hpp b/trunk/src/kernel/srs_kernel_utility.hpp index df5cdee23..f604bf7ad 100644 --- a/trunk/src/kernel/srs_kernel_utility.hpp +++ b/trunk/src/kernel/srs_kernel_utility.hpp @@ -90,6 +90,7 @@ extern bool srs_string_starts_with(std::string str, std::string flag0, std::stri extern bool srs_string_contains(std::string str, std::string flag); // split the string by flag to array. extern std::vector srs_string_split(std::string str, std::string flag); +extern std::vector srs_string_split(std::string str, std::vector flags); // create dir recursively extern int srs_create_dir_recursively(std::string dir); diff --git a/trunk/src/protocol/srs_http_stack.cpp b/trunk/src/protocol/srs_http_stack.cpp old mode 100755 new mode 100644 index d516875d6..bc76a4796 --- a/trunk/src/protocol/srs_http_stack.cpp +++ b/trunk/src/protocol/srs_http_stack.cpp @@ -2989,6 +2989,9 @@ int SrsHttpUri::initialize(string _url) { int ret = ERROR_SUCCESS; + port = 0; + schema = host = path = query = ""; + url = _url; const char* purl = url.c_str(); diff --git a/trunk/src/protocol/srs_protocol_json.cpp b/trunk/src/protocol/srs_protocol_json.cpp index e3b6e02c8..a6782f3b7 100644 --- a/trunk/src/protocol/srs_protocol_json.cpp +++ b/trunk/src/protocol/srs_protocol_json.cpp @@ -630,6 +630,21 @@ SrsJsonAny* SrsJsonObject::ensure_property_integer(string name) return prop; } +SrsJsonAny* SrsJsonObject::ensure_property_number(string name) +{ + SrsJsonAny* prop = get_property(name); + + if (!prop) { + return NULL; + } + + if (!prop->is_number()) { + return NULL; + } + + return prop; +} + SrsJsonAny* SrsJsonObject::ensure_property_boolean(string name) { SrsJsonAny* prop = get_property(name); diff --git a/trunk/src/protocol/srs_protocol_json.hpp b/trunk/src/protocol/srs_protocol_json.hpp index e5bb37c8a..2ad284cff 100644 --- a/trunk/src/protocol/srs_protocol_json.hpp +++ b/trunk/src/protocol/srs_protocol_json.hpp @@ -157,6 +157,7 @@ public: virtual SrsJsonAny* get_property(std::string name); virtual SrsJsonAny* ensure_property_string(std::string name); virtual SrsJsonAny* ensure_property_integer(std::string name); + virtual SrsJsonAny* ensure_property_number(std::string name); virtual SrsJsonAny* ensure_property_boolean(std::string name); virtual SrsJsonAny* ensure_property_object(std::string name); virtual SrsJsonAny* ensure_property_array(std::string name);