/** Create RTSP server */ RTSP_DECLARE(rtsp_server_t*) rtsp_server_create( const char *listen_ip, apr_port_t listen_port, apr_size_t max_connection_count, void *obj, const rtsp_server_vtable_t *handler, apr_pool_t *pool) { apt_task_vtable_t *vtable; apt_task_msg_pool_t *msg_pool; rtsp_server_t *server; if(!listen_ip) { return NULL; } apt_log(APT_LOG_MARK,APT_PRIO_DEBUG,"Create RTSP Server %s:%hu [%"APR_SIZE_T_FMT"]", listen_ip, listen_port, max_connection_count); server = apr_palloc(pool,sizeof(rtsp_server_t)); server->pool = pool; server->obj = obj; server->vtable = handler; server->listen_sock = NULL; server->sockaddr = NULL; apr_sockaddr_info_get(&server->sockaddr,listen_ip,APR_INET,listen_port,0,pool); if(!server->sockaddr) { return NULL; } msg_pool = apt_task_msg_pool_create_dynamic(sizeof(task_msg_data_t),pool); server->task = apt_poller_task_create( max_connection_count + 1, rtsp_server_poller_signal_process, server, msg_pool, pool); if(!server->task) { return NULL; } vtable = apt_poller_task_vtable_get(server->task); if(vtable) { vtable->destroy = rtsp_server_on_destroy; vtable->process_msg = rtsp_server_task_msg_process; } server->sub_pool = apt_subpool_create(pool); server->connection_list = NULL; rtsp_server_listening_socket_create(server); return server; }
/** Create RTSP client */ RTSP_DECLARE(rtsp_client_t*) rtsp_client_create( const char *id, apr_size_t max_connection_count, apr_size_t request_timeout, void *obj, const rtsp_client_vtable_t *handler, apr_pool_t *pool) { apt_task_t *task; apt_task_vtable_t *vtable; apt_task_msg_pool_t *msg_pool; rtsp_client_t *client; apt_log(RTSP_LOG_MARK,APT_PRIO_NOTICE,"Create RTSP Client [%s] [%"APR_SIZE_T_FMT"]", id, max_connection_count); client = apr_palloc(pool,sizeof(rtsp_client_t)); client->pool = pool; client->obj = obj; client->vtable = handler; msg_pool = apt_task_msg_pool_create_dynamic(sizeof(task_msg_data_t),pool); client->task = apt_poller_task_create( max_connection_count, rtsp_client_poller_signal_process, client, msg_pool, pool); if(!client->task) { return NULL; } task = apt_poller_task_base_get(client->task); if(task) { apt_task_name_set(task,id); } vtable = apt_poller_task_vtable_get(client->task); if(vtable) { vtable->process_msg = rtsp_client_task_msg_process; } APR_RING_INIT(&client->connection_list, rtsp_client_connection_t, link); client->request_timeout = (apr_uint32_t)request_timeout; return client; }
/** Create connection agent. */ MRCP_DECLARE(mrcp_connection_agent_t*) mrcp_client_connection_agent_create( const char *id, apr_size_t max_connection_count, apt_bool_t offer_new_connection, apr_pool_t *pool) { apt_task_t *task; apt_task_vtable_t *vtable; apt_task_msg_pool_t *msg_pool; mrcp_connection_agent_t *agent; apt_log(APT_LOG_MARK,APT_PRIO_NOTICE,"Create MRCPv2 Agent [%s] [%"APR_SIZE_T_FMT"]", id, max_connection_count); agent = apr_palloc(pool,sizeof(mrcp_connection_agent_t)); agent->pool = pool; agent->request_timeout = 0; agent->offer_new_connection = offer_new_connection; agent->rx_buffer_size = MRCP_STREAM_BUFFER_SIZE; agent->tx_buffer_size = MRCP_STREAM_BUFFER_SIZE; msg_pool = apt_task_msg_pool_create_dynamic(sizeof(connection_task_msg_t),pool); agent->task = apt_poller_task_create( max_connection_count, mrcp_client_poller_signal_process, agent, msg_pool, pool); if(!agent->task) { return NULL; } task = apt_poller_task_base_get(agent->task); if(task) { apt_task_name_set(task,id); } vtable = apt_poller_task_vtable_get(agent->task); if(vtable) { vtable->process_msg = mrcp_client_agent_msg_process; } APR_RING_INIT(&agent->connection_list, mrcp_connection_t, link); return agent; }
/** Create RTSP server */ RTSP_DECLARE(rtsp_server_t*) rtsp_server_create( const char *id, const char *listen_ip, apr_port_t listen_port, apr_size_t max_connection_count, void *obj, const rtsp_server_vtable_t *handler, apr_pool_t *pool) { apt_task_t *task; apt_task_vtable_t *vtable; apt_task_msg_pool_t *msg_pool; rtsp_server_t *server; if(!listen_ip) { return NULL; } apt_log(RTSP_LOG_MARK,APT_PRIO_NOTICE,"Create RTSP Server [%s] %s:%hu [%"APR_SIZE_T_FMT"]", id, listen_ip, listen_port, max_connection_count); server = apr_palloc(pool,sizeof(rtsp_server_t)); server->pool = pool; server->obj = obj; server->vtable = handler; server->listen_sock = NULL; server->sockaddr = NULL; apr_sockaddr_info_get(&server->sockaddr,listen_ip,APR_INET,listen_port,0,pool); if(!server->sockaddr) { return NULL; } msg_pool = apt_task_msg_pool_create_dynamic(sizeof(task_msg_data_t),pool); server->task = apt_poller_task_create( max_connection_count + 1, rtsp_server_poller_signal_process, server, msg_pool, pool); if(!server->task) { return NULL; } task = apt_poller_task_base_get(server->task); if(task) { apt_task_name_set(task,id); } vtable = apt_poller_task_vtable_get(server->task); if(vtable) { vtable->destroy = rtsp_server_on_destroy; vtable->process_msg = rtsp_server_task_msg_process; } APR_RING_INIT(&server->connection_list, rtsp_server_connection_t, link); if(rtsp_server_listening_socket_create(server) != TRUE) { apt_log(RTSP_LOG_MARK,APT_PRIO_WARNING,"Failed to Create Listening Socket [%s] %s:%hu", id, listen_ip, listen_port); } return server; }
/** Create connection agent */ MRCP_DECLARE(mrcp_connection_agent_t*) mrcp_server_connection_agent_create( const char *id, const char *listen_ip, apr_port_t listen_port, apr_size_t max_connection_count, apt_bool_t force_new_connection, apr_pool_t *pool) { apt_task_t *task; apt_task_vtable_t *vtable; apt_task_msg_pool_t *msg_pool; mrcp_connection_agent_t *agent; if(!listen_ip) { return NULL; } apt_log(APT_LOG_MARK,APT_PRIO_NOTICE,"Create MRCPv2 Agent [%s] %s:%hu [%"APR_SIZE_T_FMT"]", id,listen_ip,listen_port,max_connection_count); agent = apr_palloc(pool,sizeof(mrcp_connection_agent_t)); agent->pool = pool; agent->sockaddr = NULL; agent->listen_sock = NULL; agent->force_new_connection = force_new_connection; agent->rx_buffer_size = MRCP_STREAM_BUFFER_SIZE; agent->tx_buffer_size = MRCP_STREAM_BUFFER_SIZE; apr_sockaddr_info_get(&agent->sockaddr,listen_ip,APR_INET,listen_port,0,pool); if(!agent->sockaddr) { return NULL; } msg_pool = apt_task_msg_pool_create_dynamic(sizeof(connection_task_msg_t),pool); agent->task = apt_poller_task_create( max_connection_count + 1, mrcp_server_poller_signal_process, agent, msg_pool, pool); if(!agent->task) { return NULL; } task = apt_poller_task_base_get(agent->task); if(task) { apt_task_name_set(task,id); } vtable = apt_poller_task_vtable_get(agent->task); if(vtable) { vtable->destroy = mrcp_server_agent_on_destroy; vtable->process_msg = mrcp_server_agent_msg_process; } APR_RING_INIT(&agent->connection_list, mrcp_connection_t, link); agent->pending_channel_table = apr_hash_make(pool); if(mrcp_server_agent_listening_socket_create(agent) != TRUE) { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"Failed to Create Listening Socket [%s] %s:%hu", id, listen_ip, listen_port); } return agent; }
/** Create connection agent */ MRCP_DECLARE(mrcp_connection_agent_t*) mrcp_server_connection_agent_create( const char *listen_ip, apr_port_t listen_port, apr_size_t max_connection_count, apt_bool_t force_new_connection, apr_pool_t *pool) { apt_task_t *task; apt_task_vtable_t *vtable; apt_task_msg_pool_t *msg_pool; mrcp_connection_agent_t *agent; if(!listen_ip) { return NULL; } apt_log(APT_LOG_MARK,APT_PRIO_NOTICE,"Create "MRCPV2_CONNECTION_TASK_NAME" %s:%hu [%"APR_SIZE_T_FMT"]", listen_ip,listen_port,max_connection_count); agent = apr_palloc(pool,sizeof(mrcp_connection_agent_t)); agent->pool = pool; agent->sockaddr = NULL; agent->listen_sock = NULL; agent->force_new_connection = force_new_connection; agent->rx_buffer_size = MRCP_STREAM_BUFFER_SIZE; agent->tx_buffer_size = MRCP_STREAM_BUFFER_SIZE; apr_sockaddr_info_get(&agent->sockaddr,listen_ip,APR_INET,listen_port,0,agent->pool); if(!agent->sockaddr) { return NULL; } msg_pool = apt_task_msg_pool_create_dynamic(sizeof(connection_task_msg_t),pool); agent->task = apt_poller_task_create( max_connection_count + 1, mrcp_server_poller_signal_process, agent, msg_pool, pool); if(!agent->task) { return NULL; } task = apt_poller_task_base_get(agent->task); if(task) { apt_task_name_set(task,MRCPV2_CONNECTION_TASK_NAME); } vtable = apt_poller_task_vtable_get(agent->task); if(vtable) { vtable->destroy = mrcp_server_agent_on_destroy; vtable->process_msg = mrcp_server_agent_msg_process; } agent->connection_list = NULL; agent->null_connection = NULL; if(mrcp_server_agent_listening_socket_create(agent) == TRUE) { /* add listening socket to pollset */ apt_pollset_t *pollset = apt_poller_task_pollset_get(agent->task); memset(&agent->listen_sock_pfd,0,sizeof(apr_pollfd_t)); agent->listen_sock_pfd.desc_type = APR_POLL_SOCKET; agent->listen_sock_pfd.reqevents = APR_POLLIN; agent->listen_sock_pfd.desc.s = agent->listen_sock; agent->listen_sock_pfd.client_data = agent->listen_sock; if(apt_pollset_add(pollset, &agent->listen_sock_pfd) != TRUE) { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"Failed to Add Listening Socket to Pollset"); mrcp_server_agent_listening_socket_destroy(agent); } } else { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"Failed to Create Listening Socket"); } return agent; }