From 844718c99baa6ab5b0508fe4dd7c161949c54ca6 Mon Sep 17 00:00:00 2001 From: winlin Date: Thu, 28 Nov 2013 23:43:52 +0800 Subject: [PATCH] refine the forwarder --- trunk/src/core/srs_core_forward.cpp | 12 +++++------ trunk/src/core/srs_core_forward.hpp | 6 +++++- trunk/src/core/srs_core_rtmp.cpp | 33 +++++++++++++++++++++++++++++ trunk/src/core/srs_core_rtmp.hpp | 5 +++++ trunk/src/core/srs_core_source.cpp | 2 +- 5 files changed, 50 insertions(+), 8 deletions(-) diff --git a/trunk/src/core/srs_core_forward.cpp b/trunk/src/core/srs_core_forward.cpp index d585b2c04..9be2ee5d1 100644 --- a/trunk/src/core/srs_core_forward.cpp +++ b/trunk/src/core/srs_core_forward.cpp @@ -32,34 +32,34 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. SrsForwarder::SrsForwarder() { client = new SrsRtmpClient(); - port = 1935; tid = NULL; loop = false; } SrsForwarder::~SrsForwarder() { - srs_freep(client); - if (tid) { loop = false; st_thread_interrupt(tid); st_thread_join(tid, NULL); tid = NULL; } + + srs_freep(client); } int SrsForwarder::on_publish(std::string vhost, std::string app, std::string stream, std::string forward_server) { int ret = ERROR_SUCCESS; - tc_url = "rtmp://"; + std::string tc_url = "rtmp://"; tc_url += vhost; tc_url += "/"; tc_url += app; - stream_name = stream; - server = forward_server; + std::string stream_name = stream; + std::string server = forward_server; + int port = 1935; size_t pos = forward_server.find(":"); if (pos != std::string::npos) { diff --git a/trunk/src/core/srs_core_forward.hpp b/trunk/src/core/srs_core_forward.hpp index f6ef78c7d..1def8d821 100644 --- a/trunk/src/core/srs_core_forward.hpp +++ b/trunk/src/core/srs_core_forward.hpp @@ -31,6 +31,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include +#include + class SrsSharedPtrMessage; class SrsOnMetaDataPacket; class SrsRtmpClient; @@ -45,9 +47,11 @@ private: std::string stream_name; std::string server; int port; - SrsRtmpClient* client; +private: st_thread_t tid; bool loop; +private: + SrsRtmpClient* client; public: SrsForwarder(); virtual ~SrsForwarder(); diff --git a/trunk/src/core/srs_core_rtmp.cpp b/trunk/src/core/srs_core_rtmp.cpp index fa46e0f22..2057998e7 100644 --- a/trunk/src/core/srs_core_rtmp.cpp +++ b/trunk/src/core/srs_core_rtmp.cpp @@ -23,6 +23,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include +#include +#include +#include +#include + #include #include #include @@ -181,6 +186,34 @@ SrsRtmpClient::~SrsRtmpClient() } } +int SrsRtmpClient::connect_to(std::string server, int port) +{ + int ret = ERROR_SUCCESS; + return ret; +} + +std::string SrsRtmpClient::parse_server(std::string host){ + if(inet_addr(host.c_str()) != INADDR_NONE){ + return host; + } + + hostent* answer = gethostbyname(host.c_str()); + if(answer == NULL){ + srs_error("dns resolve host %s error.", host.c_str()); + return ""; + } + + char ipv4[16]; + memset(ipv4, 0, sizeof(ipv4)); + for(int i = 0; i < answer->h_length; i++){ + inet_ntop(AF_INET, answer->h_addr_list[i], ipv4, sizeof(ipv4)); + srs_info("dns resolve host %s to %s.", host.c_str(), ipv4); + break; + } + + return ipv4; +} + SrsRtmp::SrsRtmp(st_netfd_t client_stfd) { protocol = new SrsProtocol(client_stfd); diff --git a/trunk/src/core/srs_core_rtmp.hpp b/trunk/src/core/srs_core_rtmp.hpp index accddb9e3..90c5498f1 100644 --- a/trunk/src/core/srs_core_rtmp.hpp +++ b/trunk/src/core/srs_core_rtmp.hpp @@ -40,6 +40,8 @@ class SrsCommonMessage; class SrsCreateStreamPacket; class SrsFMLEStartPacket; class SrsPublishPacket; +class SrsSharedPtrMessage; +class SrsOnMetaDataPacket; /** * the original request from client. @@ -102,6 +104,9 @@ private: public: SrsRtmpClient(); virtual ~SrsRtmpClient(); +private: + virtual int connect_to(std::string server, int port); + std::string parse_server(std::string host); }; /** diff --git a/trunk/src/core/srs_core_source.cpp b/trunk/src/core/srs_core_source.cpp index e62b32a13..26b772174 100644 --- a/trunk/src/core/srs_core_source.cpp +++ b/trunk/src/core/srs_core_source.cpp @@ -618,7 +618,7 @@ int SrsSource::on_publish(std::string vhost, std::string app, std::string stream // create forwarders SrsConfDirective* conf = config->get_forward(vhost); - for (int i = 0; conf && i < conf->args.size(); i++) { + for (int i = 0; conf && i < (int)conf->args.size(); i++) { std::string forward_server = conf->args.at(i); SrsForwarder* forwarder = new SrsForwarder();