Asterisk - The Open Source Telephony Project GIT-master-b023714
Loading...
Searching...
No Matches
Functions | Variables
res_manager_presencestate.c File Reference
#include "asterisk.h"
#include "asterisk/module.h"
#include "asterisk/manager.h"
#include "asterisk/stasis.h"
#include "asterisk/presencestate.h"
Include dependency graph for res_manager_presencestate.c:

Go to the source code of this file.

Functions

static void __reg_module (void)
 
static void __unreg_module (void)
 
static int action_presencestatelist (struct mansession *s, const struct message *m)
 
struct ast_moduleAST_MODULE_SELF_SYM (void)
 
static int load_module (void)
 
static int unload_module (void)
 

Variables

static struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Manager Presence State Topic Forwarder" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .support_level = AST_MODULE_SUPPORT_CORE, .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEVSTATE_CONSUMER, }
 
static const struct ast_module_infoast_module_info = &__mod_info
 
static struct stasis_forwardtopic_forwarder
 

Function Documentation

◆ __reg_module()

static void __reg_module ( void  )
static

Definition at line 155 of file res_manager_presencestate.c.

◆ __unreg_module()

static void __unreg_module ( void  )
static

Definition at line 155 of file res_manager_presencestate.c.

◆ action_presencestatelist()

static int action_presencestatelist ( struct mansession s,
const struct message m 
)
static

Definition at line 79 of file res_manager_presencestate.c.

80{
81 RAII_VAR(struct ao2_container *, presence_states, NULL, ao2_cleanup);
82 const char *action_id = astman_get_header(m, "ActionID");
83 struct stasis_message *msg;
84 struct ao2_iterator it_states;
85 int count = 0;
86
89 if (!presence_states) {
90 astman_send_error(s, m, "Memory Allocation Failure");
91 return 0;
92 }
93
94 astman_send_listack(s, m, "Presence State Changes will follow", "start");
95
96 it_states = ao2_iterator_init(presence_states, 0);
97 for (; (msg = ao2_iterator_next(&it_states)); ao2_ref(msg, -1)) {
99
100 if (!blob) {
101 continue;
102 }
103
104 count++;
105
106 astman_append(s, "Event: %s\r\n", blob->manager_event);
107 if (!ast_strlen_zero(action_id)) {
108 astman_append(s, "ActionID: %s\r\n", action_id);
109 }
110 astman_append(s, "%s\r\n", blob->extra_fields);
111 ao2_ref(blob, -1);
112 }
113 ao2_iterator_destroy(&it_states);
114
115 astman_send_list_complete_start(s, m, "PresenceStateListComplete", count);
117
118 return 0;
119}
#define ao2_iterator_next(iter)
Definition astobj2.h:1911
#define ao2_cleanup(obj)
Definition astobj2.h:1934
struct ao2_iterator ao2_iterator_init(struct ao2_container *c, int flags) attribute_warn_unused_result
Create an iterator for a container.
#define ao2_ref(o, delta)
Reference/unreference an object and return the old refcount.
Definition astobj2.h:459
void ao2_iterator_destroy(struct ao2_iterator *iter)
Destroy a container iterator.
void astman_send_listack(struct mansession *s, const struct message *m, char *msg, char *listflag)
Send ack in manager transaction to begin a list.
Definition manager.c:2024
void astman_send_error(struct mansession *s, const struct message *m, char *error)
Send error in manager transaction.
Definition manager.c:1982
void astman_send_list_complete_start(struct mansession *s, const struct message *m, const char *event_name, int count)
Start the list complete event.
Definition manager.c:2060
const char * astman_get_header(const struct message *m, char *var)
Get header from manager transaction.
Definition manager.c:1643
void astman_send_list_complete_end(struct mansession *s)
End the list complete event.
Definition manager.c:2068
void astman_append(struct mansession *s, const char *fmt,...)
Definition manager.c:1903
struct stasis_cache * ast_presence_state_cache(void)
Backend cache for ast_presence_state_topic_cached()
struct stasis_message_type * ast_presence_state_message_type(void)
Get presence state message type.
#define NULL
Definition resample.c:96
struct ast_manager_event_blob * stasis_message_to_ami(struct stasis_message *msg)
Build the AMI representation of the message.
struct ao2_container * stasis_cache_dump(struct stasis_cache *cache, struct stasis_message_type *type)
Dump cached items to a subscription for the ast_eid_default entity.
static force_inline int attribute_pure ast_strlen_zero(const char *s)
Definition strings.h:65
Generic container type.
When we need to walk through a container, we use an ao2_iterator to keep track of the current positio...
Definition astobj2.h:1821
Struct containing info for an AMI event to send out.
Definition manager.h:503
const ast_string_field extra_fields
Definition manager.h:508
const char * manager_event
Definition manager.h:505
#define RAII_VAR(vartype, varname, initval, dtor)
Declare a variable that will call a destructor function when it goes out of scope.
Definition utils.h:978

References ao2_cleanup, ao2_iterator_destroy(), ao2_iterator_init(), ao2_iterator_next, ao2_ref, ast_presence_state_cache(), ast_presence_state_message_type(), ast_strlen_zero(), astman_append(), astman_get_header(), astman_send_error(), astman_send_list_complete_end(), astman_send_list_complete_start(), astman_send_listack(), ast_manager_event_blob::extra_fields, ast_manager_event_blob::manager_event, NULL, RAII_VAR, stasis_cache_dump(), and stasis_message_to_ami().

Referenced by load_module().

◆ AST_MODULE_SELF_SYM()

struct ast_module * AST_MODULE_SELF_SYM ( void  )

Definition at line 155 of file res_manager_presencestate.c.

◆ load_module()

static int load_module ( void  )
static

Definition at line 128 of file res_manager_presencestate.c.

129{
131
133 if (!manager_topic) {
135 }
137 if (!topic_forwarder) {
139 }
140
145 }
146
148}
struct stasis_topic * ast_manager_get_topic(void)
Get the Stasis Message Bus API topic for AMI.
Definition manager.c:450
static struct stasis_topic * manager_topic
A stasis_topic that all topics AMI cares about will be forwarded to.
Definition manager.c:182
#define EVENT_FLAG_REPORTING
Definition manager.h:84
#define ast_manager_register_xml(action, authority, func)
Register a manager callback using XML documentation to describe the manager.
Definition manager.h:192
#define EVENT_FLAG_CALL
Definition manager.h:76
@ AST_MODULE_LOAD_SUCCESS
Definition module.h:70
@ AST_MODULE_LOAD_DECLINE
Module has failed to load, may be in an inconsistent state.
Definition module.h:78
struct stasis_topic * ast_presence_state_topic_all(void)
Get presence state topic.
static int action_presencestatelist(struct mansession *s, const struct message *m)
static struct stasis_forward * topic_forwarder
struct stasis_forward * stasis_forward_cancel(struct stasis_forward *forward)
Definition stasis.c:1615
struct stasis_forward * stasis_forward_all(struct stasis_topic *from_topic, struct stasis_topic *to_topic)
Create a subscription which forwards all messages from one topic to another.
Definition stasis.c:1645

References action_presencestatelist(), ast_manager_get_topic(), ast_manager_register_xml, AST_MODULE_LOAD_DECLINE, AST_MODULE_LOAD_SUCCESS, ast_presence_state_topic_all(), EVENT_FLAG_CALL, EVENT_FLAG_REPORTING, manager_topic, stasis_forward_all(), stasis_forward_cancel(), and topic_forwarder.

◆ unload_module()

static int unload_module ( void  )
static

Definition at line 121 of file res_manager_presencestate.c.

122{
123 ast_manager_unregister("PresenceStateList");
125 return 0;
126}
int ast_manager_unregister(const char *action)
Unregister a registered manager command.
Definition manager.c:7698

References ast_manager_unregister(), stasis_forward_cancel(), and topic_forwarder.

Variable Documentation

◆ __mod_info

struct ast_module_info __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Manager Presence State Topic Forwarder" , .key = ASTERISK_GPL_KEY , .buildopt_sum = AST_BUILDOPT_SUM, .support_level = AST_MODULE_SUPPORT_CORE, .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEVSTATE_CONSUMER, }
static

Definition at line 155 of file res_manager_presencestate.c.

◆ ast_module_info

const struct ast_module_info* ast_module_info = &__mod_info
static

Definition at line 155 of file res_manager_presencestate.c.

◆ topic_forwarder

struct stasis_forward* topic_forwarder
static

Definition at line 77 of file res_manager_presencestate.c.

Referenced by load_module(), and unload_module().