Skip to content
Snippets Groups Projects
app_queue.c 331 KiB
Newer Older
  • Learn to ignore specific revisions
  • 	STASIS_MESSAGE_TYPE_INIT(queue_caller_leave_type);
    	STASIS_MESSAGE_TYPE_INIT(queue_caller_abandon_type);
    
    	STASIS_MESSAGE_TYPE_INIT(queue_member_status_type);
    	STASIS_MESSAGE_TYPE_INIT(queue_member_added_type);
    	STASIS_MESSAGE_TYPE_INIT(queue_member_removed_type);
    	STASIS_MESSAGE_TYPE_INIT(queue_member_pause_type);
    	STASIS_MESSAGE_TYPE_INIT(queue_member_penalty_type);
    	STASIS_MESSAGE_TYPE_INIT(queue_member_ringinuse_type);
    
    	STASIS_MESSAGE_TYPE_INIT(queue_agent_called_type);
    	STASIS_MESSAGE_TYPE_INIT(queue_agent_connect_type);
    	STASIS_MESSAGE_TYPE_INIT(queue_agent_complete_type);
    	STASIS_MESSAGE_TYPE_INIT(queue_agent_dump_type);
    	STASIS_MESSAGE_TYPE_INIT(queue_agent_ringnoanswer_type);
    
    	stasis_message_router_add(message_router,
    				  queue_caller_join_type(),
    				  queue_channel_manager_event,
    				  "QueueCallerJoin");
    
    	stasis_message_router_add(message_router,
    				  queue_caller_leave_type(),
    				  queue_channel_manager_event,
    				  "QueueCallerLeave");
    
    	stasis_message_router_add(message_router,
    				  queue_caller_abandon_type(),
    				  queue_channel_manager_event,
    				  "QueueCallerAbandon");
    
    	stasis_message_router_add(message_router,
    				  queue_member_status_type(),
    				  queue_member_manager_event,
    				  "QueueMemberStatus");
    
    	stasis_message_router_add(message_router,
    				  queue_member_added_type(),
    				  queue_member_manager_event,
    				  "QueueMemberAdded");
    
    	stasis_message_router_add(message_router,
    				  queue_member_removed_type(),
    				  queue_member_manager_event,
    				  "QueueMemberRemoved");
    
    	stasis_message_router_add(message_router,
    				  queue_member_pause_type(),
    				  queue_member_manager_event,
    				  "QueueMemberPause");
    
    	stasis_message_router_add(message_router,
    				  queue_member_penalty_type(),
    				  queue_member_manager_event,
    				  "QueueMemberPenalty");
    
    	stasis_message_router_add(message_router,
    				  queue_member_ringinuse_type(),
    				  queue_member_manager_event,
    				  "QueueMemberRinginuse");
    
    	stasis_message_router_add(message_router,
    				  queue_agent_called_type(),
    				  queue_multi_channel_manager_event,
    				  "AgentCalled");
    
    	stasis_message_router_add(message_router,
    				  queue_agent_connect_type(),
    				  queue_multi_channel_manager_event,
    				  "AgentConnect");
    
    	stasis_message_router_add(message_router,
    				  queue_agent_complete_type(),
    				  queue_multi_channel_manager_event,
    				  "AgentComplete");
    
    	stasis_message_router_add(message_router,
    				  queue_agent_dump_type(),
    				  queue_multi_channel_manager_event,
    				  "AgentDump");
    
    	stasis_message_router_add(message_router,
    				  queue_agent_ringnoanswer_type(),
    				  queue_multi_channel_manager_event,
    				  "AgentRingNoAnswer");
    
    
    	ast_extension_state_add(NULL, NULL, extension_state_cb, NULL);
    
    
    	return res ? AST_MODULE_LOAD_DECLINE : 0;
    
    	struct ast_flags mask = {AST_FLAGS_ALL & ~QUEUE_RESET_STATS,};
    
    	reload_handler(1, &mask, NULL);
    
    /* \brief Find a member by looking up queuename and interface.
     * \return Returns a member or NULL if member not found.
    */
    static struct member *find_member_by_queuename_and_interface(const char *queuename, const char *interface)
    {
    	struct member *mem = NULL;
    	struct call_queue *q;
    
    
    	if ((q = find_load_queue_rt_friendly(queuename))) {
    
    		ao2_lock(q);
    		mem = ao2_find(q->members, interface, OBJ_KEY);
    		ao2_unlock(q);
    		queue_t_unref(q, "Expiring temporary reference.");
    	}
    	return mem;
    }
    
    
    AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "True Call Queueing",
    
    		.load = load_module,
    		.unload = unload_module,
    		.reload = reload,
    
    		.load_pri = AST_MODPRI_DEVSTATE_CONSUMER,
    
    		.nonoptreq = "res_monitor",