正在显示
10 个修改的文件
包含
78 行增加
和
100 行删除
| @@ -35,6 +35,7 @@ using namespace std; | @@ -35,6 +35,7 @@ using namespace std; | ||
| 35 | #include <srs_app_config.hpp> | 35 | #include <srs_app_config.hpp> |
| 36 | #include <srs_core_autofree.hpp> | 36 | #include <srs_core_autofree.hpp> |
| 37 | #include <srs_kernel_utility.hpp> | 37 | #include <srs_kernel_utility.hpp> |
| 38 | +#include <srs_app_utility.hpp> | ||
| 38 | 39 | ||
| 39 | SrsBandwidth::SrsBandwidth() | 40 | SrsBandwidth::SrsBandwidth() |
| 40 | { | 41 | { |
| @@ -86,13 +87,8 @@ int SrsBandwidth::bandwidth_test(SrsRequest* _req, st_netfd_t stfd, SrsRtmpServe | @@ -86,13 +87,8 @@ int SrsBandwidth::bandwidth_test(SrsRequest* _req, st_netfd_t stfd, SrsRtmpServe | ||
| 86 | // accept and do bandwidth check. | 87 | // accept and do bandwidth check. |
| 87 | last_check_time = time_now; | 88 | last_check_time = time_now; |
| 88 | 89 | ||
| 89 | - char* local_ip = 0; | ||
| 90 | - if ((ret = get_local_ip(stfd, local_ip)) != ERROR_SUCCESS) { | ||
| 91 | - srs_error("get local ip failed. ret = %d", ret); | ||
| 92 | - return ret; | ||
| 93 | - } | ||
| 94 | - | ||
| 95 | - if ((ret = rtmp->response_connect_app(req, local_ip)) != ERROR_SUCCESS) { | 90 | + std::string local_ip = srs_get_local_ip(st_netfd_fileno(stfd)); |
| 91 | + if ((ret = rtmp->response_connect_app(req, local_ip.c_str())) != ERROR_SUCCESS) { | ||
| 96 | srs_error("response connect app failed. ret=%d", ret); | 92 | srs_error("response connect app failed. ret=%d", ret); |
| 97 | return ret; | 93 | return ret; |
| 98 | } | 94 | } |
| @@ -100,40 +96,6 @@ int SrsBandwidth::bandwidth_test(SrsRequest* _req, st_netfd_t stfd, SrsRtmpServe | @@ -100,40 +96,6 @@ int SrsBandwidth::bandwidth_test(SrsRequest* _req, st_netfd_t stfd, SrsRtmpServe | ||
| 100 | return do_bandwidth_check(); | 96 | return do_bandwidth_check(); |
| 101 | } | 97 | } |
| 102 | 98 | ||
| 103 | -int SrsBandwidth::get_local_ip(st_netfd_t stfd, char *&local_ip) | ||
| 104 | -{ | ||
| 105 | - int ret = ERROR_SUCCESS; | ||
| 106 | - | ||
| 107 | - int fd = st_netfd_fileno(stfd); | ||
| 108 | - | ||
| 109 | - // discovery client information | ||
| 110 | - sockaddr_in addr; | ||
| 111 | - socklen_t addrlen = sizeof(addr); | ||
| 112 | - if (getsockname(fd, (sockaddr*)&addr, &addrlen) == -1) { | ||
| 113 | - ret = ERROR_SOCKET_GET_LOCAL_IP; | ||
| 114 | - srs_error("discovery local ip information failed. ret=%d", ret); | ||
| 115 | - return ret; | ||
| 116 | - } | ||
| 117 | - srs_verbose("get local ip success."); | ||
| 118 | - | ||
| 119 | - // ip v4 or v6 | ||
| 120 | - char buf[INET6_ADDRSTRLEN]; | ||
| 121 | - memset(buf, 0, sizeof(buf)); | ||
| 122 | - | ||
| 123 | - if ((inet_ntop(addr.sin_family, &addr.sin_addr, buf, sizeof(buf))) == NULL) { | ||
| 124 | - ret = ERROR_SOCKET_GET_LOCAL_IP; | ||
| 125 | - srs_error("convert local ip information failed. ret=%d", ret); | ||
| 126 | - return ret; | ||
| 127 | - } | ||
| 128 | - | ||
| 129 | - local_ip = new char[strlen(buf) + 1]; | ||
| 130 | - strcpy(local_ip, buf); | ||
| 131 | - | ||
| 132 | - srs_verbose("get local ip of client ip=%s, fd=%d", buf, fd); | ||
| 133 | - | ||
| 134 | - return ret; | ||
| 135 | -} | ||
| 136 | - | ||
| 137 | int SrsBandwidth::do_bandwidth_check() | 99 | int SrsBandwidth::do_bandwidth_check() |
| 138 | { | 100 | { |
| 139 | int ret = ERROR_SUCCESS; | 101 | int ret = ERROR_SUCCESS; |
| @@ -84,7 +84,6 @@ public: | @@ -84,7 +84,6 @@ public: | ||
| 84 | */ | 84 | */ |
| 85 | virtual int bandwidth_test(SrsRequest* _req, st_netfd_t stfd, SrsRtmpServer* _rtmp); | 85 | virtual int bandwidth_test(SrsRequest* _req, st_netfd_t stfd, SrsRtmpServer* _rtmp); |
| 86 | private: | 86 | private: |
| 87 | - virtual int get_local_ip(st_netfd_t stfd, char *&local_ip); | ||
| 88 | /** | 87 | /** |
| 89 | * used to process band width check from client. | 88 | * used to process band width check from client. |
| 90 | */ | 89 | */ |
| @@ -28,10 +28,10 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -28,10 +28,10 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
| 28 | #include <srs_kernel_log.hpp> | 28 | #include <srs_kernel_log.hpp> |
| 29 | #include <srs_kernel_error.hpp> | 29 | #include <srs_kernel_error.hpp> |
| 30 | #include <srs_app_server.hpp> | 30 | #include <srs_app_server.hpp> |
| 31 | +#include <srs_app_utility.hpp> | ||
| 31 | 32 | ||
| 32 | SrsConnection::SrsConnection(SrsServer* srs_server, st_netfd_t client_stfd) | 33 | SrsConnection::SrsConnection(SrsServer* srs_server, st_netfd_t client_stfd) |
| 33 | { | 34 | { |
| 34 | - ip = NULL; | ||
| 35 | server = srs_server; | 35 | server = srs_server; |
| 36 | stfd = client_stfd; | 36 | stfd = client_stfd; |
| 37 | connection_id = 0; | 37 | connection_id = 0; |
| @@ -58,6 +58,7 @@ int SrsConnection::cycle() | @@ -58,6 +58,7 @@ int SrsConnection::cycle() | ||
| 58 | 58 | ||
| 59 | _srs_context->generate_id(); | 59 | _srs_context->generate_id(); |
| 60 | connection_id = _srs_context->get_id(); | 60 | connection_id = _srs_context->get_id(); |
| 61 | + ip = srs_get_peer_ip(st_netfd_fileno(stfd)); | ||
| 61 | 62 | ||
| 62 | ret = do_cycle(); | 63 | ret = do_cycle(); |
| 63 | 64 | ||
| @@ -92,41 +93,5 @@ void SrsConnection::stop() | @@ -92,41 +93,5 @@ void SrsConnection::stop() | ||
| 92 | { | 93 | { |
| 93 | srs_close_stfd(stfd); | 94 | srs_close_stfd(stfd); |
| 94 | srs_freep(pthread); | 95 | srs_freep(pthread); |
| 95 | - srs_freep(ip); | ||
| 96 | -} | ||
| 97 | - | ||
| 98 | -int SrsConnection::get_peer_ip() | ||
| 99 | -{ | ||
| 100 | - int ret = ERROR_SUCCESS; | ||
| 101 | - | ||
| 102 | - int fd = st_netfd_fileno(stfd); | ||
| 103 | - | ||
| 104 | - // discovery client information | ||
| 105 | - sockaddr_in addr; | ||
| 106 | - socklen_t addrlen = sizeof(addr); | ||
| 107 | - if (getpeername(fd, (sockaddr*)&addr, &addrlen) == -1) { | ||
| 108 | - ret = ERROR_SOCKET_GET_PEER_NAME; | ||
| 109 | - srs_error("discovery client information failed. ret=%d", ret); | ||
| 110 | - return ret; | ||
| 111 | - } | ||
| 112 | - srs_verbose("get peer name success."); | ||
| 113 | - | ||
| 114 | - // ip v4 or v6 | ||
| 115 | - char buf[INET6_ADDRSTRLEN]; | ||
| 116 | - memset(buf, 0, sizeof(buf)); | ||
| 117 | - | ||
| 118 | - if ((inet_ntop(addr.sin_family, &addr.sin_addr, buf, sizeof(buf))) == NULL) { | ||
| 119 | - ret = ERROR_SOCKET_GET_PEER_IP; | ||
| 120 | - srs_error("convert client information failed. ret=%d", ret); | ||
| 121 | - return ret; | ||
| 122 | - } | ||
| 123 | - srs_verbose("get peer ip of client ip=%s, fd=%d", buf, fd); | ||
| 124 | - | ||
| 125 | - ip = new char[strlen(buf) + 1]; | ||
| 126 | - strcpy(ip, buf); | ||
| 127 | - | ||
| 128 | - srs_verbose("get peer ip success. ip=%s, fd=%d", ip, fd); | ||
| 129 | - | ||
| 130 | - return ret; | ||
| 131 | } | 96 | } |
| 132 | 97 |
| @@ -30,6 +30,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -30,6 +30,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
| 30 | 30 | ||
| 31 | #include <srs_core.hpp> | 31 | #include <srs_core.hpp> |
| 32 | 32 | ||
| 33 | +#include <string> | ||
| 34 | + | ||
| 33 | #include <srs_app_st.hpp> | 35 | #include <srs_app_st.hpp> |
| 34 | #include <srs_app_thread.hpp> | 36 | #include <srs_app_thread.hpp> |
| 35 | 37 | ||
| @@ -39,10 +41,10 @@ class SrsConnection : public ISrsThreadHandler | @@ -39,10 +41,10 @@ class SrsConnection : public ISrsThreadHandler | ||
| 39 | private: | 41 | private: |
| 40 | SrsThread* pthread; | 42 | SrsThread* pthread; |
| 41 | protected: | 43 | protected: |
| 42 | - char* ip; | ||
| 43 | SrsServer* server; | 44 | SrsServer* server; |
| 44 | st_netfd_t stfd; | 45 | st_netfd_t stfd; |
| 45 | int connection_id; | 46 | int connection_id; |
| 47 | + std::string ip; | ||
| 46 | public: | 48 | public: |
| 47 | SrsConnection(SrsServer* srs_server, st_netfd_t client_stfd); | 49 | SrsConnection(SrsServer* srs_server, st_netfd_t client_stfd); |
| 48 | virtual ~SrsConnection(); | 50 | virtual ~SrsConnection(); |
| @@ -53,8 +55,6 @@ public: | @@ -53,8 +55,6 @@ public: | ||
| 53 | protected: | 55 | protected: |
| 54 | virtual int do_cycle() = 0; | 56 | virtual int do_cycle() = 0; |
| 55 | virtual void stop(); | 57 | virtual void stop(); |
| 56 | -protected: | ||
| 57 | - virtual int get_peer_ip(); | ||
| 58 | }; | 58 | }; |
| 59 | 59 | ||
| 60 | #endif | 60 | #endif |
| @@ -686,11 +686,7 @@ int SrsHttpApi::do_cycle() | @@ -686,11 +686,7 @@ int SrsHttpApi::do_cycle() | ||
| 686 | { | 686 | { |
| 687 | int ret = ERROR_SUCCESS; | 687 | int ret = ERROR_SUCCESS; |
| 688 | 688 | ||
| 689 | - if ((ret = get_peer_ip()) != ERROR_SUCCESS) { | ||
| 690 | - srs_error("get peer ip failed. ret=%d", ret); | ||
| 691 | - return ret; | ||
| 692 | - } | ||
| 693 | - srs_trace("api get peer ip success. ip=%s", ip); | 689 | + srs_trace("api get peer ip success. ip=%s", ip.c_str()); |
| 694 | 690 | ||
| 695 | // initialize parser | 691 | // initialize parser |
| 696 | if ((ret = parser->initialize(HTTP_REQUEST)) != ERROR_SUCCESS) { | 692 | if ((ret = parser->initialize(HTTP_REQUEST)) != ERROR_SUCCESS) { |
| @@ -514,11 +514,7 @@ int SrsHttpConn::do_cycle() | @@ -514,11 +514,7 @@ int SrsHttpConn::do_cycle() | ||
| 514 | { | 514 | { |
| 515 | int ret = ERROR_SUCCESS; | 515 | int ret = ERROR_SUCCESS; |
| 516 | 516 | ||
| 517 | - if ((ret = get_peer_ip()) != ERROR_SUCCESS) { | ||
| 518 | - srs_error("get peer ip failed. ret=%d", ret); | ||
| 519 | - return ret; | ||
| 520 | - } | ||
| 521 | - srs_trace("http get peer ip success. ip=%s", ip); | 517 | + srs_trace("http get peer ip success. ip=%s", ip.c_str()); |
| 522 | 518 | ||
| 523 | // initialize parser | 519 | // initialize parser |
| 524 | if ((ret = parser->initialize(HTTP_REQUEST)) != ERROR_SUCCESS) { | 520 | if ((ret = parser->initialize(HTTP_REQUEST)) != ERROR_SUCCESS) { |
| @@ -44,6 +44,7 @@ using namespace std; | @@ -44,6 +44,7 @@ using namespace std; | ||
| 44 | #include <srs_app_http_hooks.hpp> | 44 | #include <srs_app_http_hooks.hpp> |
| 45 | #include <srs_app_edge.hpp> | 45 | #include <srs_app_edge.hpp> |
| 46 | #include <srs_app_kbps.hpp> | 46 | #include <srs_app_kbps.hpp> |
| 47 | +#include <srs_app_utility.hpp> | ||
| 47 | 48 | ||
| 48 | // when stream is busy, for example, streaming is already | 49 | // when stream is busy, for example, streaming is already |
| 49 | // publishing, when a new client to request to publish, | 50 | // publishing, when a new client to request to publish, |
| @@ -98,11 +99,7 @@ int SrsRtmpConn::do_cycle() | @@ -98,11 +99,7 @@ int SrsRtmpConn::do_cycle() | ||
| 98 | { | 99 | { |
| 99 | int ret = ERROR_SUCCESS; | 100 | int ret = ERROR_SUCCESS; |
| 100 | 101 | ||
| 101 | - if ((ret = get_peer_ip()) != ERROR_SUCCESS) { | ||
| 102 | - srs_error("get peer ip failed. ret=%d", ret); | ||
| 103 | - return ret; | ||
| 104 | - } | ||
| 105 | - srs_trace("serve client, peer ip=%s", ip); | 102 | + srs_trace("serve client, peer ip=%s", ip.c_str()); |
| 106 | 103 | ||
| 107 | rtmp->set_recv_timeout(SRS_RECV_TIMEOUT_US); | 104 | rtmp->set_recv_timeout(SRS_RECV_TIMEOUT_US); |
| 108 | rtmp->set_send_timeout(SRS_SEND_TIMEOUT_US); | 105 | rtmp->set_send_timeout(SRS_SEND_TIMEOUT_US); |
| @@ -193,7 +190,8 @@ int SrsRtmpConn::service_cycle() | @@ -193,7 +190,8 @@ int SrsRtmpConn::service_cycle() | ||
| 193 | return bandwidth->bandwidth_test(req, stfd, rtmp); | 190 | return bandwidth->bandwidth_test(req, stfd, rtmp); |
| 194 | } | 191 | } |
| 195 | 192 | ||
| 196 | - if ((ret = rtmp->response_connect_app(req)) != ERROR_SUCCESS) { | 193 | + std::string local_ip = srs_get_local_ip(st_netfd_fileno(stfd)); |
| 194 | + if ((ret = rtmp->response_connect_app(req, local_ip.c_str())) != ERROR_SUCCESS) { | ||
| 197 | srs_error("response connect app failed. ret=%d", ret); | 195 | srs_error("response connect app failed. ret=%d", ret); |
| 198 | return ret; | 196 | return ret; |
| 199 | } | 197 | } |
| @@ -299,7 +297,7 @@ int SrsRtmpConn::stream_service_cycle() | @@ -299,7 +297,7 @@ int SrsRtmpConn::stream_service_cycle() | ||
| 299 | 297 | ||
| 300 | bool enabled_cache = _srs_config->get_gop_cache(req->vhost); | 298 | bool enabled_cache = _srs_config->get_gop_cache(req->vhost); |
| 301 | srs_trace("source found, ip=%s, url=%s, enabled_cache=%d, edge=%d", | 299 | srs_trace("source found, ip=%s, url=%s, enabled_cache=%d, edge=%d", |
| 302 | - ip, req->get_stream_url().c_str(), enabled_cache, vhost_is_edge); | 300 | + ip.c_str(), req->get_stream_url().c_str(), enabled_cache, vhost_is_edge); |
| 303 | source->set_cache(enabled_cache); | 301 | source->set_cache(enabled_cache); |
| 304 | 302 | ||
| 305 | switch (type) { | 303 | switch (type) { |
| @@ -33,6 +33,7 @@ using namespace std; | @@ -33,6 +33,7 @@ using namespace std; | ||
| 33 | #include <srs_kernel_log.hpp> | 33 | #include <srs_kernel_log.hpp> |
| 34 | #include <srs_app_config.hpp> | 34 | #include <srs_app_config.hpp> |
| 35 | #include <srs_kernel_utility.hpp> | 35 | #include <srs_kernel_utility.hpp> |
| 36 | +#include <srs_kernel_error.hpp> | ||
| 36 | 37 | ||
| 37 | #define SRS_LOCAL_LOOP_IP "127.0.0.1" | 38 | #define SRS_LOCAL_LOOP_IP "127.0.0.1" |
| 38 | 39 | ||
| @@ -494,3 +495,58 @@ vector<string>& srs_get_local_ipv4_ips() | @@ -494,3 +495,58 @@ vector<string>& srs_get_local_ipv4_ips() | ||
| 494 | 495 | ||
| 495 | return _srs_system_ipv4_ips; | 496 | return _srs_system_ipv4_ips; |
| 496 | } | 497 | } |
| 498 | + | ||
| 499 | +string srs_get_local_ip(int fd) | ||
| 500 | +{ | ||
| 501 | + std::string ip; | ||
| 502 | + | ||
| 503 | + // discovery client information | ||
| 504 | + sockaddr_in addr; | ||
| 505 | + socklen_t addrlen = sizeof(addr); | ||
| 506 | + if (getsockname(fd, (sockaddr*)&addr, &addrlen) == -1) { | ||
| 507 | + return ip; | ||
| 508 | + } | ||
| 509 | + srs_verbose("get local ip success."); | ||
| 510 | + | ||
| 511 | + // ip v4 or v6 | ||
| 512 | + char buf[INET6_ADDRSTRLEN]; | ||
| 513 | + memset(buf, 0, sizeof(buf)); | ||
| 514 | + | ||
| 515 | + if ((inet_ntop(addr.sin_family, &addr.sin_addr, buf, sizeof(buf))) == NULL) { | ||
| 516 | + return ip; | ||
| 517 | + } | ||
| 518 | + | ||
| 519 | + ip = buf; | ||
| 520 | + | ||
| 521 | + srs_verbose("get local ip of client ip=%s, fd=%d", buf, fd); | ||
| 522 | + | ||
| 523 | + return ip; | ||
| 524 | +} | ||
| 525 | + | ||
| 526 | +string srs_get_peer_ip(int fd) | ||
| 527 | +{ | ||
| 528 | + std::string ip; | ||
| 529 | + | ||
| 530 | + // discovery client information | ||
| 531 | + sockaddr_in addr; | ||
| 532 | + socklen_t addrlen = sizeof(addr); | ||
| 533 | + if (getpeername(fd, (sockaddr*)&addr, &addrlen) == -1) { | ||
| 534 | + return ip; | ||
| 535 | + } | ||
| 536 | + srs_verbose("get peer name success."); | ||
| 537 | + | ||
| 538 | + // ip v4 or v6 | ||
| 539 | + char buf[INET6_ADDRSTRLEN]; | ||
| 540 | + memset(buf, 0, sizeof(buf)); | ||
| 541 | + | ||
| 542 | + if ((inet_ntop(addr.sin_family, &addr.sin_addr, buf, sizeof(buf))) == NULL) { | ||
| 543 | + return ip; | ||
| 544 | + } | ||
| 545 | + srs_verbose("get peer ip of client ip=%s, fd=%d", buf, fd); | ||
| 546 | + | ||
| 547 | + ip = buf; | ||
| 548 | + | ||
| 549 | + srs_verbose("get peer ip success. ip=%s, fd=%d", ip, fd); | ||
| 550 | + | ||
| 551 | + return ip; | ||
| 552 | +} |
| @@ -353,4 +353,10 @@ extern void srs_update_platform_info(); | @@ -353,4 +353,10 @@ extern void srs_update_platform_info(); | ||
| 353 | extern void srs_retrieve_local_ipv4_ips(); | 353 | extern void srs_retrieve_local_ipv4_ips(); |
| 354 | extern std::vector<std::string>& srs_get_local_ipv4_ips(); | 354 | extern std::vector<std::string>& srs_get_local_ipv4_ips(); |
| 355 | 355 | ||
| 356 | +// get local or peer ip. | ||
| 357 | +// where local ip is the server ip which client connected. | ||
| 358 | +std::string srs_get_local_ip(int fd); | ||
| 359 | +// where peer ip is the client public ip which connected to server. | ||
| 360 | +std::string srs_get_peer_ip(int fd); | ||
| 361 | + | ||
| 356 | #endif | 362 | #endif |
| @@ -51,7 +51,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -51,7 +51,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
| 51 | #define ERROR_SOCKET_WRITE 209 | 51 | #define ERROR_SOCKET_WRITE 209 |
| 52 | #define ERROR_SOCKET_WAIT 210 | 52 | #define ERROR_SOCKET_WAIT 210 |
| 53 | #define ERROR_SOCKET_TIMEOUT 211 | 53 | #define ERROR_SOCKET_TIMEOUT 211 |
| 54 | -#define ERROR_SOCKET_GET_LOCAL_IP 212 | 54 | +//#define ERROR_SOCKET_GET_LOCAL_IP 212 |
| 55 | 55 | ||
| 56 | #define ERROR_RTMP_PLAIN_REQUIRED 300 | 56 | #define ERROR_RTMP_PLAIN_REQUIRED 300 |
| 57 | #define ERROR_RTMP_CHUNK_START 301 | 57 | #define ERROR_RTMP_CHUNK_START 301 |
-
请 注册 或 登录 后发表评论