diff options
author | oej <oej@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-05-19 07:56:56 +0000 |
---|---|---|
committer | oej <oej@f38db490-d61c-443f-a65b-d21fe96a405b> | 2006-05-19 07:56:56 +0000 |
commit | c45866947a950382a87c7953cd0d81aef253ac8f (patch) | |
tree | cef349d4df1df7fdc25f8b691f195a7baf638454 /channels/chan_local.c | |
parent | 6990780859aa908123b3c71a3c6aabab79ed2101 (diff) |
Add simple devicestate for chan_local
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@28484 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/chan_local.c')
-rw-r--r-- | channels/chan_local.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/channels/chan_local.c b/channels/chan_local.c index 02dc32a5e..a366ee0ed 100644 --- a/channels/chan_local.c +++ b/channels/chan_local.c @@ -60,6 +60,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/musiconhold.h" #include "asterisk/manager.h" #include "asterisk/stringfields.h" +#include "asterisk/devicestate.h" static const char tdesc[] = "Local Proxy Channel Driver"; @@ -75,6 +76,7 @@ static int local_write(struct ast_channel *ast, struct ast_frame *f); static int local_indicate(struct ast_channel *ast, int condition, const void *data, size_t datalen); static int local_fixup(struct ast_channel *oldchan, struct ast_channel *newchan); static int local_sendhtml(struct ast_channel *ast, int subclass, const char *data, int datalen); +static int local_devicestate(void *data); /* PBX interface structure for channel registration */ static const struct ast_channel_tech local_tech = { @@ -92,6 +94,7 @@ static const struct ast_channel_tech local_tech = { .indicate = local_indicate, .fixup = local_fixup, .send_html = local_sendhtml, + .devicestate = local_devicestate, }; struct local_pvt { @@ -111,6 +114,28 @@ struct local_pvt { static AST_LIST_HEAD_STATIC(locals, local_pvt); +/*! \brief Adds devicestate to local channels */ +static int local_devicestate(void *data) +{ + char *exten; + char *context; + + int res; + + exten = ast_strdupa(data); + if ((context = strchr(exten, '@'))) { + *context = '\0'; + context = context + 1; + } + if (option_debug > 2) + ast_log(LOG_DEBUG, "Checking if extension %s@%s exists (devicestate)\n", exten, context); + res = ast_exists_extension(NULL, context, exten, 1, NULL); + if (!res) + return AST_DEVICE_NOT_INUSE; + else + return AST_DEVICE_INUSE; +} + static int local_queue_frame(struct local_pvt *p, int isoutbound, struct ast_frame *f, struct ast_channel *us) { struct ast_channel *other; |