Asterisk - The Open Source Telephony Project GIT-master-8f1982c
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Macros Modules Pages
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 = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .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:2028
void astman_send_error(struct mansession *s, const struct message *m, char *error)
Send error in manager transaction.
Definition: manager.c:1986
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:2064
const char * astman_get_header(const struct message *m, char *var)
Get header from manager transaction.
Definition: manager.c:1647
void astman_send_list_complete_end(struct mansession *s)
End the list complete event.
Definition: manager.c:2072
void astman_append(struct mansession *s, const char *fmt,...)
Definition: manager.c:1907
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.
Definition: stasis_cache.c:736
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:941

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:454
static struct stasis_topic * manager_topic
A stasis_topic that all topics AMI cares about will be forwarded to.
Definition: manager.c:186
#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:1575
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:1605

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:7697

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 = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .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().