From db5d36174379fbcef944732f7a75b6645c6dc127 Mon Sep 17 00:00:00 2001 From: Roman Arutyunyan Date: Mon, 13 May 2013 09:59:34 +0400 Subject: [PATCH] fixed remote connect in relay module to use the right address --- ngx_rtmp_notify_module.c | 2 +- ngx_rtmp_relay_module.c | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/ngx_rtmp_notify_module.c b/ngx_rtmp_notify_module.c index 50f76d3..27afe5a 100644 --- a/ngx_rtmp_notify_module.c +++ b/ngx_rtmp_notify_module.c @@ -1098,7 +1098,7 @@ ngx_rtmp_notify_play_handle(ngx_rtmp_session_t *s, } ngx_log_error(NGX_LOG_INFO, s->connection->log, 0, - "notify: pull '%s' from '%s'", v->name, name); + "notify: pull '%s' from '%*s'", v->name, rc, name); local_name.data = v->name; local_name.len = ngx_strlen(v->name); diff --git a/ngx_rtmp_relay_module.c b/ngx_rtmp_relay_module.c index 9f6a6cf..9ccbc07 100644 --- a/ngx_rtmp_relay_module.c +++ b/ngx_rtmp_relay_module.c @@ -342,6 +342,7 @@ ngx_rtmp_relay_create_connection(ngx_rtmp_conf_ctx_t *cctx, ngx_str_t* name, ngx_rtmp_session_t *rs; ngx_peer_connection_t *pc; ngx_connection_t *c; + ngx_addr_t *addr; ngx_pool_t *pool; ngx_int_t rc; ngx_str_t v, *uri; @@ -438,18 +439,28 @@ ngx_rtmp_relay_create_connection(ngx_rtmp_conf_ctx_t *cctx, ngx_str_t* name, if (pc == NULL) { goto clear; } + + if (target->url.naddrs == 0) { + ngx_log_error(NGX_LOG_INFO, racf->log, 0, + "relay: no addresses"); + goto clear; + } + + /* use the first address */ + addr = target->url.addrs; + /* copy log to keep shared log unchanged */ rctx->log = *racf->log; pc->log = &rctx->log; pc->get = ngx_rtmp_relay_get_peer; pc->free = ngx_rtmp_relay_free_peer; - pc->name = &target->url.host; - pc->socklen = target->url.socklen; + pc->name = &addr->name; + pc->socklen = addr->socklen; pc->sockaddr = (struct sockaddr *)ngx_palloc(pool, pc->socklen); if (pc->sockaddr == NULL) { goto clear; } - ngx_memcpy(pc->sockaddr, &target->url.sockaddr, pc->socklen); + ngx_memcpy(pc->sockaddr, addr->sockaddr, pc->socklen); rc = ngx_event_connect_peer(pc); if (rc != NGX_OK && rc != NGX_AGAIN ) {