[asterisk-commits] mmichelson: branch group/CCSS r223294 - /team/group/CCSS/main/ccss.c
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Fri Oct 9 14:19:02 CDT 2009
Author: mmichelson
Date: Fri Oct 9 14:18:58 2009
New Revision: 223294
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=223294
Log:
Move agent and monitor registration functions to
same area, just after config functions.
Modified:
team/group/CCSS/main/ccss.c
Modified: team/group/CCSS/main/ccss.c
URL: http://svnview.digium.com/svn/asterisk/team/group/CCSS/main/ccss.c?view=diff&rev=223294&r1=223293&r2=223294
==============================================================================
--- team/group/CCSS/main/ccss.c (original)
+++ team/group/CCSS/main/ccss.c Fri Oct 9 14:18:58 2009
@@ -72,22 +72,6 @@
char cc_callback_macro[AST_MAX_EXTENSION];
};
-AST_RWLIST_HEAD_STATIC(cc_monitor_backends, cc_monitor_backend);
-AST_RWLIST_HEAD_STATIC(cc_agent_backends, cc_agent_backend);
-
-struct cc_monitor_backend {
- AST_LIST_ENTRY(cc_monitor_backend) next;
- const struct ast_cc_monitor_callbacks *callbacks;
-};
-
-struct cc_agent_backend {
- AST_LIST_ENTRY(cc_agent_backend) next;
- const struct ast_cc_agent_callbacks *callbacks;
-};
-
-#define cc_ref(obj, debug) ({ao2_t_ref((obj), +1, (debug)); (obj);})
-#define cc_unref(obj, debug) ({ao2_t_ref((obj), -1, (debug)); NULL;})
-
/* XXX I'm making these defaults up right now with no real regard for
* what they *should* be. This can be revisited.
*/
@@ -397,6 +381,108 @@
ast_copy_string(config->cc_callback_macro, value, sizeof(config->cc_callback_macro));
}
}
+
+struct cc_monitor_backend {
+ AST_LIST_ENTRY(cc_monitor_backend) next;
+ const struct ast_cc_monitor_callbacks *callbacks;
+};
+
+AST_RWLIST_HEAD_STATIC(cc_monitor_backends, cc_monitor_backend);
+
+int ast_cc_monitor_register(const struct ast_cc_monitor_callbacks *callbacks)
+{
+ struct cc_monitor_backend *backend = ast_calloc(1, sizeof(*backend));
+
+ if (!backend) {
+ return -1;
+ }
+
+ backend->callbacks = callbacks;
+
+ AST_RWLIST_WRLOCK(&cc_monitor_backends);
+ AST_RWLIST_INSERT_TAIL(&cc_monitor_backends, backend, next);
+ AST_RWLIST_UNLOCK(&cc_monitor_backends);
+ return 0;
+}
+
+static const struct ast_cc_monitor_callbacks *find_monitor_callbacks(const char * const type)
+{
+ struct cc_monitor_backend *backend;
+ const struct ast_cc_monitor_callbacks *callbacks = NULL;
+
+ AST_RWLIST_RDLOCK(&cc_monitor_backends);
+ AST_RWLIST_TRAVERSE(&cc_monitor_backends, backend, next) {
+ if (!strcmp(backend->callbacks->type, type)) {
+ ast_log(LOG_NOTICE, "Returning backend %s\n", backend->callbacks->type);
+ callbacks = backend->callbacks;
+ break;
+ }
+ }
+ AST_RWLIST_UNLOCK(&cc_monitor_backends);
+ return callbacks;
+}
+
+struct cc_agent_backend {
+ AST_LIST_ENTRY(cc_agent_backend) next;
+ const struct ast_cc_agent_callbacks *callbacks;
+};
+
+AST_RWLIST_HEAD_STATIC(cc_agent_backends, cc_agent_backend);
+
+int ast_cc_agent_register(const struct ast_cc_agent_callbacks *callbacks)
+{
+ struct cc_agent_backend *backend = ast_calloc(1, sizeof(*backend));
+
+ if (!backend) {
+ return -1;
+ }
+
+ backend->callbacks = callbacks;
+ AST_RWLIST_WRLOCK(&cc_agent_backends);
+ AST_RWLIST_INSERT_TAIL(&cc_agent_backends, backend, next);
+ AST_RWLIST_UNLOCK(&cc_agent_backends);
+ return 0;
+}
+
+static const struct ast_cc_agent_callbacks *find_agent_callbacks(struct ast_channel *chan)
+{
+ struct cc_agent_backend *backend;
+ const struct ast_cc_agent_callbacks *callbacks = NULL;
+ enum ast_cc_agent_policies agent_policy;
+ const char *type;
+
+ agent_policy = ast_get_cc_agent_policy(ast_channel_get_cc_config_params(chan));
+
+ if (agent_policy == AST_CC_AGENT_GENERIC) {
+ type = "generic";
+ } else if (agent_policy == AST_CC_AGENT_NATIVE) {
+ char chan_name[AST_CHANNEL_NAME];
+ char *slash;
+ ast_copy_string(chan_name, chan->name, sizeof(chan_name));
+ if ((slash = strchr(chan_name, '/'))) {
+ *slash = '\0';
+ }
+ type = chan_name;
+ } else {
+ ast_log(LOG_NOTICE, "Not returning agent callbacks since this channel is configured not to have a CC agent\n");
+ return NULL;
+ }
+
+ AST_RWLIST_RDLOCK(&cc_agent_backends);
+ AST_RWLIST_TRAVERSE(&cc_agent_backends, backend, next) {
+ if (!strcmp(backend->callbacks->type, type)) {
+ ast_log(LOG_NOTICE, "Returning backend %s\n", backend->callbacks->type);
+ callbacks = backend->callbacks;
+ break;
+ }
+ }
+ AST_RWLIST_UNLOCK(&cc_agent_backends);
+ return callbacks;
+}
+
+
+#define cc_ref(obj, debug) ({ao2_t_ref((obj), +1, (debug)); (obj);})
+#define cc_unref(obj, debug) ({ao2_t_ref((obj), -1, (debug)); NULL;})
/* Generic agent callbacks */
static int cc_generic_agent_init(struct ast_cc_agent *agent, struct ast_channel *chan);
@@ -1102,42 +1188,6 @@
ast_assert(callbacks->destructor != NULL);
}
-static const struct ast_cc_agent_callbacks *find_agent_callbacks(struct ast_channel *chan)
-{
- struct cc_agent_backend *backend;
- const struct ast_cc_agent_callbacks *callbacks = NULL;
- enum ast_cc_agent_policies agent_policy;
- const char *type;
-
- agent_policy = ast_get_cc_agent_policy(ast_channel_get_cc_config_params(chan));
-
- if (agent_policy == AST_CC_AGENT_GENERIC) {
- type = "generic";
- } else if (agent_policy == AST_CC_AGENT_NATIVE) {
- char chan_name[AST_CHANNEL_NAME];
- char *slash;
- ast_copy_string(chan_name, chan->name, sizeof(chan_name));
- if ((slash = strchr(chan_name, '/'))) {
- *slash = '\0';
- }
- type = chan_name;
- } else {
- ast_log(LOG_NOTICE, "Not returning agent callbacks since this channel is configured not to have a CC agent\n");
- return NULL;
- }
-
- AST_RWLIST_RDLOCK(&cc_agent_backends);
- AST_RWLIST_TRAVERSE(&cc_agent_backends, backend, next) {
- if (!strcmp(backend->callbacks->type, type)) {
- ast_log(LOG_NOTICE, "Returning backend %s\n", backend->callbacks->type);
- callbacks = backend->callbacks;
- break;
- }
- }
- AST_RWLIST_UNLOCK(&cc_agent_backends);
- return callbacks;
-}
-
static struct ast_cc_agent *cc_agent_init(struct ast_channel *caller_chan,
const char * const caller_name, const int core_id,
struct ast_cc_interface_tree *interface_tree)
@@ -1465,23 +1515,6 @@
}
ast_free(agent_pvt);
-}
-
-static const struct ast_cc_monitor_callbacks *find_monitor_callbacks(const char * const type)
-{
- struct cc_monitor_backend *backend;
- const struct ast_cc_monitor_callbacks *callbacks = NULL;
-
- AST_RWLIST_RDLOCK(&cc_monitor_backends);
- AST_RWLIST_TRAVERSE(&cc_monitor_backends, backend, next) {
- if (!strcmp(backend->callbacks->type, type)) {
- ast_log(LOG_NOTICE, "Returning backend %s\n", backend->callbacks->type);
- callbacks = backend->callbacks;
- break;
- }
- }
- AST_RWLIST_UNLOCK(&cc_monitor_backends);
- return callbacks;
}
static void monitor_destroy(void *data)
@@ -2381,37 +2414,6 @@
return retval;
}
-int ast_cc_monitor_register(const struct ast_cc_monitor_callbacks *callbacks)
-{
- struct cc_monitor_backend *backend = ast_calloc(1, sizeof(*backend));
-
- if (!backend) {
- return -1;
- }
-
- backend->callbacks = callbacks;
-
- AST_RWLIST_WRLOCK(&cc_monitor_backends);
- AST_RWLIST_INSERT_TAIL(&cc_monitor_backends, backend, next);
- AST_RWLIST_UNLOCK(&cc_monitor_backends);
- return 0;
-}
-
-int ast_cc_agent_register(const struct ast_cc_agent_callbacks *callbacks)
-{
- struct cc_agent_backend *backend = ast_calloc(1, sizeof(*backend));
-
- if (!backend) {
- return -1;
- }
-
- backend->callbacks = callbacks;
- AST_RWLIST_WRLOCK(&cc_agent_backends);
- AST_RWLIST_INSERT_TAIL(&cc_agent_backends, backend, next);
- AST_RWLIST_UNLOCK(&cc_agent_backends);
- return 0;
-}
-
int ast_cc_monitor_announce_availability(struct ast_cc_monitor *monitor) {
return ast_taskprocessor_push(cc_core_taskprocessor, cc_devstate_change,
cc_ref(monitor, "Bump reference count until cc_devstate_change executes"));
More information about the asterisk-commits
mailing list