various devicestate fixes (issue #5081, take two)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@6496 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
parent
90521d3f60
commit
5e2f0a65d0
23
channel.c
23
channel.c
|
@ -2808,12 +2808,15 @@ void ast_set_callerid(struct ast_channel *chan, const char *callerid, const char
|
|||
|
||||
int ast_setstate(struct ast_channel *chan, int state)
|
||||
{
|
||||
if (chan->_state != state) {
|
||||
int oldstate = chan->_state;
|
||||
|
||||
if (oldstate == state)
|
||||
return 0;
|
||||
|
||||
chan->_state = state;
|
||||
if (oldstate == AST_STATE_DOWN) {
|
||||
ast_device_state_changed(chan->name);
|
||||
manager_event(EVENT_FLAG_CALL, "Newchannel",
|
||||
manager_event(EVENT_FLAG_CALL,
|
||||
(oldstate == AST_STATE_DOWN) ? "Newchannel" : "Newstate",
|
||||
"Channel: %s\r\n"
|
||||
"State: %s\r\n"
|
||||
"CallerID: %s\r\n"
|
||||
|
@ -2823,19 +2826,7 @@ int ast_setstate(struct ast_channel *chan, int state)
|
|||
chan->cid.cid_num ? chan->cid.cid_num : "<unknown>",
|
||||
chan->cid.cid_name ? chan->cid.cid_name : "<unknown>",
|
||||
chan->uniqueid);
|
||||
} else {
|
||||
manager_event(EVENT_FLAG_CALL, "Newstate",
|
||||
"Channel: %s\r\n"
|
||||
"State: %s\r\n"
|
||||
"CallerID: %s\r\n"
|
||||
"CallerIDName: %s\r\n"
|
||||
"Uniqueid: %s\r\n",
|
||||
chan->name, ast_state2str(chan->_state),
|
||||
chan->cid.cid_num ? chan->cid.cid_num : "<unknown>",
|
||||
chan->cid.cid_name ? chan->cid.cid_name : "<unknown>",
|
||||
chan->uniqueid);
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -9114,9 +9114,8 @@ static int iax2_devicestate(void *data)
|
|||
/* Peer is registered, or have default IP address
|
||||
and a valid registration */
|
||||
if (p->historicms == 0 || p->historicms <= p->maxms)
|
||||
res = AST_DEVICE_NOT_INUSE;
|
||||
else
|
||||
res = AST_DEVICE_UNKNOWN; /* Not reachable */
|
||||
/* let the core figure out whether it is in use or not */
|
||||
res = AST_DEVICE_UNKNOWN;
|
||||
}
|
||||
} else {
|
||||
if (option_debug > 2)
|
||||
|
|
|
@ -109,9 +109,16 @@ int ast_device_state(const char *device)
|
|||
return ast_parse_device_state(device); /* No, try the generic function */
|
||||
else {
|
||||
res = chan_tech->devicestate(number); /* Ask the channel driver for device state */
|
||||
if (res == AST_DEVICE_UNKNOWN) {
|
||||
res = ast_parse_device_state(device);
|
||||
/* at this point we know the device exists, but the channel driver
|
||||
could not give us a state; if there is no channel state available,
|
||||
it must be 'not in use'
|
||||
*/
|
||||
if (res == AST_DEVICE_UNKNOWN)
|
||||
return ast_parse_device_state(device);
|
||||
else
|
||||
res = AST_DEVICE_NOT_INUSE;
|
||||
return res;
|
||||
} else
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
|
Reference in New Issue