mirror of
https://github.com/zotanmew/nginx-rtmp-module.git
synced 2024-05-16 16:51:07 +02:00
implemented amf_create & fixed memory keak
This commit is contained in:
parent
cd3aea8d8c
commit
20a8d06eb6
|
@ -385,7 +385,6 @@ ngx_rtmp_init_event_handlers(ngx_conf_t *cf, ngx_rtmp_core_main_conf_t *cmcf)
|
|||
|
||||
static size_t amf_events[] = {
|
||||
NGX_RTMP_MSG_AMF_META,
|
||||
NGX_RTMP_MSG_AMF_SHARED,
|
||||
NGX_RTMP_MSG_AMF_CMD
|
||||
};
|
||||
|
||||
|
@ -401,6 +400,10 @@ ngx_rtmp_init_event_handlers(ngx_conf_t *cf, ngx_rtmp_core_main_conf_t *cmcf)
|
|||
*eh = ngx_rtmp_amf_message_handler;
|
||||
}
|
||||
|
||||
/* init amf shared object events */
|
||||
eh = ngx_array_push(&cmcf->events[NGX_RTMP_MSG_AMF_SHARED]);
|
||||
*eh = ngx_rtmp_amf_shared_object_handler;
|
||||
|
||||
/* init user protocol events */
|
||||
eh = ngx_array_push(&cmcf->events[NGX_RTMP_MSG_USER]);
|
||||
*eh = ngx_rtmp_user_message_handler;
|
||||
|
|
|
@ -350,6 +350,8 @@ ngx_int_t ngx_rtmp_user_message_handler(ngx_rtmp_session_t *s,
|
|||
ngx_rtmp_header_t *h, ngx_chain_t *in);
|
||||
ngx_int_t ngx_rtmp_amf_message_handler(ngx_rtmp_session_t *s,
|
||||
ngx_rtmp_header_t *h, ngx_chain_t *in);
|
||||
ngx_int_t ngx_rtmp_amf_shared_object_handler(ngx_rtmp_session_t *s,
|
||||
ngx_rtmp_header_t *h, ngx_chain_t *in);
|
||||
|
||||
|
||||
/* Shared output buffers */
|
||||
|
@ -408,6 +410,8 @@ ngx_int_t ngx_rtmp_send_user_unknown(ngx_rtmp_session_t *s,
|
|||
uint32_t timestamp);
|
||||
|
||||
/* AMF sender/receiver */
|
||||
ngx_chain_t * ngx_rtmp_create_amf_message(ngx_rtmp_session_t *s,
|
||||
ngx_rtmp_header_t *h, ngx_rtmp_amf_elt_t *elts, size_t nelts);
|
||||
ngx_int_t ngx_rtmp_send_amf(ngx_rtmp_session_t *s, ngx_rtmp_header_t *h,
|
||||
ngx_rtmp_amf_elt_t *elts, size_t nelts);
|
||||
ngx_int_t ngx_rtmp_receive_amf(ngx_rtmp_session_t *s, ngx_chain_t *in,
|
||||
|
|
|
@ -207,8 +207,8 @@ ngx_rtmp_alloc_amf_buf(void *arg)
|
|||
|
||||
|
||||
/* AMF sender */
|
||||
ngx_int_t
|
||||
ngx_rtmp_send_amf(ngx_rtmp_session_t *s, ngx_rtmp_header_t *h,
|
||||
ngx_chain_t *
|
||||
ngx_rtmp_create_amf_message(ngx_rtmp_session_t *s, ngx_rtmp_header_t *h,
|
||||
ngx_rtmp_amf_elt_t *elts, size_t nelts)
|
||||
{
|
||||
ngx_rtmp_amf_ctx_t act;
|
||||
|
@ -225,14 +225,35 @@ ngx_rtmp_send_amf(ngx_rtmp_session_t *s, ngx_rtmp_header_t *h,
|
|||
if (act.first) {
|
||||
ngx_rtmp_free_shared_bufs(cscf, act.first);
|
||||
}
|
||||
return NGX_ERROR;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (act.first) {
|
||||
ngx_rtmp_prepare_message(s, h, NULL, act.first);
|
||||
return ngx_rtmp_send_message(s, act.first, 0);
|
||||
}
|
||||
|
||||
return NGX_OK;
|
||||
return act.first;
|
||||
}
|
||||
|
||||
ngx_int_t ngx_rtmp_send_amf(ngx_rtmp_session_t *s, ngx_rtmp_header_t *h,
|
||||
ngx_rtmp_amf_elt_t *elts, size_t nelts)
|
||||
{
|
||||
ngx_chain_t *cl;
|
||||
ngx_int_t rc;
|
||||
ngx_rtmp_core_srv_conf_t *cscf;
|
||||
|
||||
cscf = ngx_rtmp_get_module_srv_conf(s, ngx_rtmp_core_module);
|
||||
|
||||
cl = ngx_rtmp_create_amf_message(s, h, elts, nelts);
|
||||
|
||||
if (cl == NULL) {
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
rc = ngx_rtmp_send_message(s, cl, 0);
|
||||
|
||||
ngx_rtmp_free_shared_bufs(cscf, cl);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue