From ebf113958208567df77a1df98868046dbe0658cf Mon Sep 17 00:00:00 2001 From: winlin Date: Wed, 26 Mar 2014 12:34:35 +0800 Subject: [PATCH] fix the forward loop detect bug. change to 0.9.34 --- trunk/src/app/srs_app_forward.cpp | 18 ++++++++++++++---- trunk/src/core/srs_core.hpp | 2 +- trunk/src/rtmp/srs_protocol_rtmp.cpp | 16 +++++++++------- trunk/src/rtmp/srs_protocol_rtmp.hpp | 4 +++- 4 files changed, 27 insertions(+), 13 deletions(-) diff --git a/trunk/src/app/srs_app_forward.cpp b/trunk/src/app/srs_app_forward.cpp index 6989ac962..a86894204 100644 --- a/trunk/src/app/srs_app_forward.cpp +++ b/trunk/src/app/srs_app_forward.cpp @@ -97,17 +97,27 @@ int SrsForwarder::on_publish(SrsRequest* req, std::string forward_server) tc_url += req->app; // dead loop check - std::string source_ep = req->vhost; + std::string source_ep = "rtmp://"; + source_ep += req->host; source_ep += ":"; source_ep += req->port; - - std::string dest_ep = vhost; + source_ep += "?vhost="; + source_ep += req->vhost; + + std::string dest_ep = "rtmp://"; + if (forward_server == "127.0.0.1") { + dest_ep += req->host; + } else { + dest_ep += forward_server; + } dest_ep += ":"; dest_ep += s_port; + dest_ep += "?vhost="; + dest_ep += vhost; if (source_ep == dest_ep) { ret = ERROR_SYSTEM_FORWARD_LOOP; - srs_warn("farder loop detected. src=%s, dest=%s, ret=%d", + srs_warn("forward loop detected. src=%s, dest=%s, ret=%d", source_ep.c_str(), dest_ep.c_str(), ret); return ret; } diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index 5ea7151c9..8d4b2dee0 100644 --- a/trunk/src/core/srs_core.hpp +++ b/trunk/src/core/srs_core.hpp @@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // current release version #define VERSION_MAJOR "0" #define VERSION_MINOR "9" -#define VERSION_REVISION "33" +#define VERSION_REVISION "34" #define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION // server info. #define RTMP_SIG_SRS_KEY "srs" diff --git a/trunk/src/rtmp/srs_protocol_rtmp.cpp b/trunk/src/rtmp/srs_protocol_rtmp.cpp index c8142c0d1..4003d0305 100644 --- a/trunk/src/rtmp/srs_protocol_rtmp.cpp +++ b/trunk/src/rtmp/srs_protocol_rtmp.cpp @@ -87,6 +87,7 @@ SrsRequest* SrsRequest::copy() cp->app = app; cp->objectEncoding = objectEncoding; cp->pageUrl = pageUrl; + cp->host = host; cp->port = port; cp->schema = schema; cp->stream = stream; @@ -111,19 +112,20 @@ int SrsRequest::discovery_app() } if ((pos = url.find("/")) != std::string::npos) { - vhost = url.substr(0, pos); - url = url.substr(vhost.length() + 1); - srs_verbose("discovery vhost=%s", vhost.c_str()); + host = url.substr(0, pos); + url = url.substr(host.length() + 1); + srs_verbose("discovery host=%s", host.c_str()); } port = RTMP_DEFAULT_PORT; - if ((pos = vhost.find(":")) != std::string::npos) { - port = vhost.substr(pos + 1); - vhost = vhost.substr(0, pos); - srs_verbose("discovery vhost=%s, port=%s", vhost.c_str(), port.c_str()); + if ((pos = host.find(":")) != std::string::npos) { + port = host.substr(pos + 1); + host = host.substr(0, pos); + srs_verbose("discovery host=%s, port=%s", host.c_str(), port.c_str()); } app = url; + vhost = host; srs_vhost_resolve(vhost, app); strip(); diff --git a/trunk/src/rtmp/srs_protocol_rtmp.hpp b/trunk/src/rtmp/srs_protocol_rtmp.hpp index 61c6026c6..6fbfe7b81 100644 --- a/trunk/src/rtmp/srs_protocol_rtmp.hpp +++ b/trunk/src/rtmp/srs_protocol_rtmp.hpp @@ -46,8 +46,9 @@ class SrsPlayPacket; /** * the original request from client. */ -struct SrsRequest +class SrsRequest { +public: /** * tcUrl: rtmp://request_vhost:port/app/stream * support pass vhost in query string, such as: @@ -61,6 +62,7 @@ struct SrsRequest std::string schema; std::string vhost; + std::string host; std::string port; std::string app; std::string stream;