From 307245415bb31578f63ef58481ad8d655e52a6ce Mon Sep 17 00:00:00 2001 From: Roman Arutyunyan Date: Sun, 29 Dec 2013 18:32:04 +0400 Subject: [PATCH 1/2] envivo fix; it does not finalize connect() arrays properly --- ngx_rtmp_amf.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/ngx_rtmp_amf.c b/ngx_rtmp_amf.c index 11fffad..4e65878 100644 --- a/ngx_rtmp_amf.c +++ b/ngx_rtmp_amf.c @@ -229,9 +229,14 @@ ngx_rtmp_amf_read_object(ngx_rtmp_amf_ctx_t *ctx, ngx_rtmp_amf_elt_t *elts, return NGX_ERROR; } - if (ngx_rtmp_amf_get(ctx, &type, 1) != NGX_OK - || type != NGX_RTMP_AMF_END) - { + rc = ngx_rtmp_amf_get(ctx, &type, 1); + + /* Envivo encoder does not finalize objects properly */ + if (rc == NGX_DONE) { + return NGX_OK; + } + + if (rc != NGX_OK || type != NGX_RTMP_AMF_END) { return NGX_ERROR; } From 57a96ac2bc1812188aa81237ad582ca115f4391f Mon Sep 17 00:00:00 2001 From: Roman Arutyunyan Date: Wed, 1 Jan 2014 13:13:16 +0400 Subject: [PATCH 2/2] improved Envivio fix: now key length can be unfinalized with object --- ngx_rtmp_amf.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/ngx_rtmp_amf.c b/ngx_rtmp_amf.c index 4e65878..f133d0e 100644 --- a/ngx_rtmp_amf.c +++ b/ngx_rtmp_amf.c @@ -197,8 +197,15 @@ ngx_rtmp_amf_read_object(ngx_rtmp_amf_ctx_t *ctx, ngx_rtmp_amf_elt_t *elts, } #endif /* read key */ - if (ngx_rtmp_amf_get(ctx, buf, 2) != NGX_OK) + switch (ngx_rtmp_amf_get(ctx, buf, 2)) { + case NGX_DONE: + /* Envivio sends unfinalized arrays */ + return NGX_OK; + case NGX_OK: + break; + default: return NGX_ERROR; + } ngx_rtmp_amf_reverse_copy(&len, buf, 2); @@ -229,14 +236,9 @@ ngx_rtmp_amf_read_object(ngx_rtmp_amf_ctx_t *ctx, ngx_rtmp_amf_elt_t *elts, return NGX_ERROR; } - rc = ngx_rtmp_amf_get(ctx, &type, 1); - - /* Envivo encoder does not finalize objects properly */ - if (rc == NGX_DONE) { - return NGX_OK; - } - - if (rc != NGX_OK || type != NGX_RTMP_AMF_END) { + if (ngx_rtmp_amf_get(ctx, &type, 1) != NGX_OK + || type != NGX_RTMP_AMF_END) + { return NGX_ERROR; }