From a0fe6e5ea46629140d7425a6006f70f4607f783a Mon Sep 17 00:00:00 2001 From: Roman Arutyunyan Date: Thu, 5 Apr 2012 14:59:15 +0400 Subject: [PATCH] added typeless amf names support --- ngx_rtmp_receive.c | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/ngx_rtmp_receive.c b/ngx_rtmp_receive.c index 20ca2a4..5be23ad 100644 --- a/ngx_rtmp_receive.c +++ b/ngx_rtmp_receive.c @@ -156,11 +156,11 @@ ngx_rtmp_user_message_handler(ngx_rtmp_session_t *s, } -ngx_int_t -ngx_rtmp_amf_message_handler(ngx_rtmp_session_t *s, - ngx_rtmp_header_t *h, ngx_chain_t *in) +static ngx_int_t +ngx_rtmp_amf_message_basic_handler(ngx_rtmp_session_t *s, + ngx_rtmp_header_t *h, ngx_chain_t *in, ngx_int_t name_typeless) { - ngx_rtmp_amf_ctx_t act; + ngx_rtmp_amf_ctx_t act; ngx_connection_t *c; ngx_rtmp_core_main_conf_t *cmcf; ngx_array_t *ch; @@ -169,13 +169,21 @@ ngx_rtmp_amf_message_handler(ngx_rtmp_session_t *s, static u_char func[128]; - static ngx_rtmp_amf_elt_t elts[] = { + static ngx_rtmp_amf_elt_t elts[] = { { NGX_RTMP_AMF_STRING, ngx_null_string, func, sizeof(func) }, }; + /* AMF command names come with string type, but shared object names + * come without type */ + if (name_typeless) { + elts[0].type |= NGX_RTMP_AMF_TYPELESS; + } else { + elts[0].type &= ~NGX_RTMP_AMF_TYPELESS; + } + c = s->connection; cmcf = ngx_rtmp_get_module_main_conf(s, ngx_rtmp_core_module); @@ -219,6 +227,22 @@ ngx_rtmp_amf_message_handler(ngx_rtmp_session_t *s, } +ngx_int_t +ngx_rtmp_amf_message_handler(ngx_rtmp_session_t *s, + ngx_rtmp_header_t *h, ngx_chain_t *in) +{ + return ngx_rtmp_amf_message_basic_handler(s, h, in, 0); +} + + +ngx_int_t +ngx_rtmp_amf_shared_object_handler(ngx_rtmp_session_t *s, + ngx_rtmp_header_t *h, ngx_chain_t *in) +{ + return ngx_rtmp_amf_message_basic_handler(s, h, in, 1); +} + + ngx_int_t ngx_rtmp_receive_amf(ngx_rtmp_session_t *s, ngx_chain_t *in, ngx_rtmp_amf_elt_t *elts, size_t nelts)