From 36b1ad24ac7061d1d053c1cb870351d694e70f68 Mon Sep 17 00:00:00 2001 From: oej Date: Tue, 4 Apr 2006 18:24:41 +0000 Subject: - Don't return AST_DEVICE_UNKNOWN to devicestate engine, since this will cause a channel walk... - Doxygen fixed for devicestate.c git-svn-id: http://svn.digium.com/svn/asterisk/trunk@17365 f38db490-d61c-443f-a65b-d21fe96a405b --- channels/chan_sip.c | 14 ++++++++------ devicestate.c | 23 ++++++++++++++--------- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 76148cedf..0227773d7 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -11835,12 +11835,16 @@ static int sip_poke_peer(struct sip_peer *peer) For peers with call limit: - not registered AST_DEVICE_UNAVAILABLE - - registered, no call AST_DEVICE_NOT_INUSE - - registered, calls possible AST_DEVICE_INUSE + - registered, no call AST_DEVICE_NOT_INUSE + - registered, active calls AST_DEVICE_INUSE - registered, call limit reached AST_DEVICE_BUSY For peers without call limit: - not registered AST_DEVICE_UNAVAILABLE - - registered AST_DEVICE_UNKNOWN + - registered AST_DEVICE_NOT_INUSE + - fixed IP (!dynamic) AST_DEVICE_NOT_INUSE + + If we return AST_DEVICE_UNKNOWN, the device state engine will try to find + out a state by walking the channel list. */ static int sip_devicestate(void *data) { @@ -11873,10 +11877,8 @@ static int sip_devicestate(void *data) res = AST_DEVICE_BUSY; else if (p->call_limit && p->inUse) res = AST_DEVICE_INUSE; - else if (p->call_limit) - res = AST_DEVICE_NOT_INUSE; else - res = AST_DEVICE_UNKNOWN; + res = AST_DEVICE_NOT_INUSE; } } else { /* there is no address, it's unavailable */ diff --git a/devicestate.c b/devicestate.c index 4131503c8..4bccfa5c3 100644 --- a/devicestate.c +++ b/devicestate.c @@ -42,17 +42,18 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") #include "asterisk/pbx.h" #include "asterisk/options.h" +/*! \brief Device state strings for printing */ static const char *devstatestring[] = { - /* 0 AST_DEVICE_UNKNOWN */ "Unknown", /* Valid, but unknown state */ - /* 1 AST_DEVICE_NOT_INUSE */ "Not in use", /* Not used */ - /* 2 AST_DEVICE IN USE */ "In use", /* In use */ - /* 3 AST_DEVICE_BUSY */ "Busy", /* Busy */ - /* 4 AST_DEVICE_INVALID */ "Invalid", /* Invalid - not known to Asterisk */ - /* 5 AST_DEVICE_UNAVAILABLE */ "Unavailable", /* Unavailable (not registred) */ - /* 6 AST_DEVICE_RINGING */ "Ringing" /* Ring, ring, ring */ + /* 0 AST_DEVICE_UNKNOWN */ "Unknown", /*!< Valid, but unknown state */ + /* 1 AST_DEVICE_NOT_INUSE */ "Not in use", /*!< Not used */ + /* 2 AST_DEVICE IN USE */ "In use", /*!< In use */ + /* 3 AST_DEVICE_BUSY */ "Busy", /*!< Busy */ + /* 4 AST_DEVICE_INVALID */ "Invalid", /*!< Invalid - not known to Asterisk */ + /* 5 AST_DEVICE_UNAVAILABLE */ "Unavailable", /*!< Unavailable (not registred) */ + /* 6 AST_DEVICE_RINGING */ "Ringing" /*!< Ring, ring, ring */ }; -/* ast_devstate_cb: A device state watcher (callback) */ +/*! \brief A device state watcher (callback) */ struct devstate_cb { void *data; ast_devstate_cb_type callback; @@ -77,7 +78,11 @@ const char *devstate2str(int devstate) return devstatestring[devstate]; } -/*! \brief Find out if device is active in a call or not */ +/*! \brief Find out if device is active in a call or not +\note find channels with the device's name in it +This function is only used for channels that does not implement +devicestate natively +*/ int ast_parse_device_state(const char *device) { struct ast_channel *chan; -- cgit v1.2.3