diff options
author | Mark Michelson <mmichelson@digium.com> | 2012-06-04 20:26:12 +0000 |
---|---|---|
committer | Mark Michelson <mmichelson@digium.com> | 2012-06-04 20:26:12 +0000 |
commit | 14a985560ed5830aa3e1b5880890a59a5d0f0c2f (patch) | |
tree | 4d6f57c4358566c5508d79e97560640ce59df5c8 /channels/chan_skinny.c | |
parent | c1bbe79748bb1615ab116fe287b8d5d28a83b330 (diff) |
Merge changes dealing with support for Digium phones.
Presence support has been added. This is accomplished by
allowing for presence hints in addition to device state
hints. A dialplan function called PRESENCE_STATE has been
added to allow for setting and reading presence. Presence
can be transmitted to Digium phones using custom XML
elements in a PIDF presence document.
Voicemail has new APIs that allow for moving, removing,
forwarding, and playing messages. Messages have had a new
unique message ID added to them so that the APIs will work
reliably. The state of a voicemail mailbox can be obtained
using an API that allows one to get a snapshot of the mailbox.
A voicemail Dialplan App called VoiceMailPlayMsg has been
added to be able to play back a specific message.
Configuration hooks have been added. Configuration hooks
allow for a piece of code to be executed when a specific
configuration file is loaded by a specific module. This is
useful for modules that are dependent on the configuration
of other modules.
chan_sip now has a public method that allows for a custom
SIP INFO request to be sent mid-dialog. Digium phones use
this in order to display progress bars when files are played.
Messaging support has been expanded a bit. The main
visible difference is the addition of an AMI action
MessageSend.
Finally, a ParkingLots manager action has been added in order
to get a list of parking lots.
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@368435 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels/chan_skinny.c')
-rw-r--r-- | channels/chan_skinny.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/channels/chan_skinny.c b/channels/chan_skinny.c index 753d7aeba..6923f8fb9 100644 --- a/channels/chan_skinny.c +++ b/channels/chan_skinny.c @@ -1510,7 +1510,7 @@ static struct ast_channel_tech skinny_tech = { .bridge = ast_rtp_instance_bridge, }; -static int skinny_extensionstate_cb(const char *context, const char *exten, enum ast_extension_states state, void *data); +static int skinny_extensionstate_cb(char *context, char *id, struct ast_state_cb_info *info, void *data); static int skinny_transfer(struct skinny_subchannel *sub); static struct skinny_line *skinny_line_alloc(void) @@ -3029,11 +3029,17 @@ static void transmit_capabilitiesreq(struct skinny_device *d) transmit_response(d, req); } -static int skinny_extensionstate_cb(const char *context, const char *exten, enum ast_extension_states state, void *data) +static int skinny_extensionstate_cb(char *context, char *exten, struct ast_state_cb_info *info, void *data) { struct skinny_container *container = data; struct skinny_device *d = NULL; char hint[AST_MAX_EXTENSION]; + int state = info->exten_state; + + /* only interested in device state here */ + if (info->reason != AST_HINT_UPDATE_DEVICE) { + return 0; + } if (container->type == SKINNY_SDCONTAINER) { struct skinny_speeddial *sd = container->data; @@ -5060,10 +5066,13 @@ static void setsubstate(struct skinny_subchannel *sub, int state) AST_LIST_TRAVERSE(&tmpline->sublines, tmpsubline, list) { if (!(subline == tmpsubline)) { if (!strcasecmp(subline->lnname, tmpsubline->lnname)) { + struct ast_state_cb_info info = { + .exten_state = tmpsubline->extenstate, + }; tmpsubline->callid = callnums++; transmit_callstate(tmpsubline->line->device, tmpsubline->line->instance, tmpsubline->callid, SKINNY_OFFHOOK); push_callinfo(tmpsubline, sub); - skinny_extensionstate_cb(NULL, NULL, tmpsubline->extenstate, tmpsubline->container); + skinny_extensionstate_cb(NULL, NULL, &info, tmpsubline->container); } } } |