This graph shows which files directly or indirectly include this file:
Go to the source code of this file.
DeviceStates | |
#define | AST_DEVICE_BUSY 3 |
#define | AST_DEVICE_INUSE 2 |
#define | AST_DEVICE_INVALID 4 |
#define | AST_DEVICE_NOT_INUSE 1 |
#define | AST_DEVICE_ONHOLD 8 |
#define | AST_DEVICE_RINGING 6 |
#define | AST_DEVICE_RINGINUSE 7 |
#define | AST_DEVICE_UNAVAILABLE 5 |
#define | AST_DEVICE_UNKNOWN 0 |
typedef int(*) | ast_devstate_cb_type (const char *dev, int state, void *data) |
Devicestate watcher call back. | |
typedef int(*) | ast_devstate_prov_cb_type (const char *data) |
Devicestate provider call back. | |
int | ast_device_state (const char *device) |
Asks a channel for device state. | |
int | ast_device_state_changed (const char *fmt,...) __attribute__((format(printf |
Tells Asterisk the State for Device is changed. | |
int int | ast_device_state_changed_literal (const char *device) |
Tells Asterisk the State for Device is changed. | |
int | ast_device_state_engine_init (void) |
Initialize the device state engine in separate thread. | |
int | ast_devstate_add (ast_devstate_cb_type callback, void *data) |
Registers a device state change callback. | |
void | ast_devstate_del (ast_devstate_cb_type callback, void *data) |
Unregisters a device state change callback. | |
int | ast_devstate_prov_add (const char *label, ast_devstate_prov_cb_type callback) |
Add device state provider. | |
void | ast_devstate_prov_del (const char *label) |
Remove device state provider. | |
int | ast_parse_device_state (const char *device) |
Search the Channels by Name. | |
const char * | devstate2str (int devstate) |
Convert device state to text string for output. |
Definition in file devicestate.h.
#define AST_DEVICE_BUSY 3 |
Device is busy
Definition at line 36 of file devicestate.h.
Referenced by agent_devicestate(), ast_extension_state2(), and sip_devicestate().
#define AST_DEVICE_INUSE 2 |
Device is in use
Definition at line 35 of file devicestate.h.
Referenced by agent_devicestate(), ast_extension_state2(), ast_parse_device_state(), is_our_turn(), meetmestate(), metermaidstate(), sip_devicestate(), and sla_state().
#define AST_DEVICE_INVALID 4 |
Device is invalid
Definition at line 37 of file devicestate.h.
Referenced by agent_devicestate(), ast_device_state(), ast_extension_state2(), get_member_status(), getproviderstate(), iax2_devicestate(), local_devicestate(), meetmestate(), metermaidstate(), mgcp_devicestate(), queue_function_qac(), sip_devicestate(), and sla_state().
#define AST_DEVICE_NOT_INUSE 1 |
Device is not used
Definition at line 34 of file devicestate.h.
Referenced by ast_device_state(), ast_extension_state2(), is_our_turn(), meetmestate(), metermaidstate(), ring_entry(), sip_devicestate(), sla_state(), and try_calling().
#define AST_DEVICE_ONHOLD 8 |
Device is on hold
Definition at line 41 of file devicestate.h.
Referenced by ast_extension_state2(), sip_devicestate(), and sla_state().
#define AST_DEVICE_RINGING 6 |
Device is ringing
Definition at line 39 of file devicestate.h.
Referenced by ast_extension_state2(), ast_parse_device_state(), sip_devicestate(), and sla_state().
#define AST_DEVICE_RINGINUSE 7 |
Device is ringing *and* in use
Definition at line 40 of file devicestate.h.
Referenced by ast_extension_state2(), and sip_devicestate().
#define AST_DEVICE_UNAVAILABLE 5 |
Device is unavailable
Definition at line 38 of file devicestate.h.
Referenced by agent_devicestate(), ast_extension_state2(), get_member_status(), iax2_devicestate(), queue_function_qac(), sip_devicestate(), and transmit_state_notify().
#define AST_DEVICE_UNKNOWN 0 |
@{ Device is valid but channel didn't know state
Definition at line 33 of file devicestate.h.
Referenced by agent_devicestate(), ast_device_state(), ast_parse_device_state(), iax2_devicestate(), is_our_turn(), local_devicestate(), mgcp_devicestate(), ring_entry(), and sip_devicestate().
typedef int(*) ast_devstate_cb_type(const char *dev, int state, void *data) |
typedef int(*) ast_devstate_prov_cb_type(const char *data) |
int ast_device_state | ( | const char * | device | ) |
Asks a channel for device state.
device | like a dialstring Asks a channel for device state, data is normaly a number from dialstring used by the low level module Trys the channel devicestate callback if not supported search in the active channels list for the device. Returns an AST_DEVICE_??? state -1 on failure |
Channel driver that provides device state
Another provider of device state
Definition at line 216 of file devicestate.c.
References AST_DEVICE_INVALID, AST_DEVICE_NOT_INUSE, AST_DEVICE_UNKNOWN, ast_get_channel_tech(), ast_log(), ast_parse_device_state(), ast_strdupa, ast_channel_tech::devicestate, getproviderstate(), LOG_DEBUG, option_debug, and strsep().
Referenced by ast_extension_state2(), chanavail_exec(), create_queue_member(), do_state_change(), ring_entry(), and transmit_state_notify().
00217 { 00218 char *buf; 00219 char *number; 00220 const struct ast_channel_tech *chan_tech; 00221 int res = 0; 00222 /*! \brief Channel driver that provides device state */ 00223 char *tech; 00224 /*! \brief Another provider of device state */ 00225 char *provider = NULL; 00226 00227 buf = ast_strdupa(device); 00228 tech = strsep(&buf, "/"); 00229 number = buf; 00230 if (!number) { 00231 provider = strsep(&tech, ":"); 00232 if (!provider) 00233 return AST_DEVICE_INVALID; 00234 /* We have a provider */ 00235 number = tech; 00236 tech = NULL; 00237 } 00238 00239 if (provider) { 00240 if(option_debug > 2) 00241 ast_log(LOG_DEBUG, "Checking if I can find provider for \"%s\" - number: %s\n", provider, number); 00242 return getproviderstate(provider, number); 00243 } 00244 if (option_debug > 3) 00245 ast_log(LOG_DEBUG, "No provider found, checking channel drivers for %s - %s\n", tech, number); 00246 00247 chan_tech = ast_get_channel_tech(tech); 00248 if (!chan_tech) 00249 return AST_DEVICE_INVALID; 00250 00251 if (!chan_tech->devicestate) /* Does the channel driver support device state notification? */ 00252 return ast_parse_device_state(device); /* No, try the generic function */ 00253 else { 00254 res = chan_tech->devicestate(number); /* Ask the channel driver for device state */ 00255 if (res == AST_DEVICE_UNKNOWN) { 00256 res = ast_parse_device_state(device); 00257 /* at this point we know the device exists, but the channel driver 00258 could not give us a state; if there is no channel state available, 00259 it must be 'not in use' 00260 */ 00261 if (res == AST_DEVICE_UNKNOWN) 00262 res = AST_DEVICE_NOT_INUSE; 00263 return res; 00264 } else 00265 return res; 00266 } 00267 }
int ast_device_state_changed | ( | const char * | fmt, | |
... | ||||
) |
Tells Asterisk the State for Device is changed.
fmt | devicename like a dialstring with format parameters Asterisk polls the new extensionstates and calls the registered callbacks for the changed extensions Returns 0 on success, -1 on failure |
int int ast_device_state_changed_literal | ( | const char * | device | ) |
Tells Asterisk the State for Device is changed.
device | devicename like a dialstring Asterisk polls the new extensionstates and calls the registered callbacks for the changed extensions Returns 0 on success, -1 on failure |
Definition at line 422 of file devicestate.c.
References __ast_device_state_changed_literal(), and ast_strdupa.
Referenced by ast_channel_free(), ast_setstate(), devstate_cli(), and devstate_exec().
00423 { 00424 char *buf; 00425 buf = ast_strdupa(dev); 00426 return __ast_device_state_changed_literal(buf, 0); 00427 }
int ast_device_state_engine_init | ( | void | ) |
Initialize the device state engine in separate thread.
Definition at line 467 of file devicestate.c.
References ast_cond_init(), ast_log(), ast_pthread_create_background, do_devstate_changes(), and LOG_ERROR.
Referenced by main().
00468 { 00469 ast_cond_init(&change_pending, NULL); 00470 if (ast_pthread_create_background(&change_thread, NULL, do_devstate_changes, NULL) < 0) { 00471 ast_log(LOG_ERROR, "Unable to start device state change thread.\n"); 00472 return -1; 00473 } 00474 00475 return 0; 00476 }
int ast_devstate_add | ( | ast_devstate_cb_type | callback, | |
void * | data | |||
) |
Registers a device state change callback.
callback | Callback | |
data | to pass to callback The callback is called if the state for extension is changed Return -1 on failure, ID on success |
Definition at line 327 of file devicestate.c.
References ast_calloc, AST_LIST_INSERT_HEAD, AST_LIST_LOCK, and AST_LIST_UNLOCK.
Referenced by load_module().
00328 { 00329 struct devstate_cb *devcb; 00330 00331 if (!callback || !(devcb = ast_calloc(1, sizeof(*devcb)))) 00332 return -1; 00333 00334 devcb->data = data; 00335 devcb->callback = callback; 00336 00337 AST_LIST_LOCK(&devstate_cbs); 00338 AST_LIST_INSERT_HEAD(&devstate_cbs, devcb, list); 00339 AST_LIST_UNLOCK(&devstate_cbs); 00340 00341 return 0; 00342 }
void ast_devstate_del | ( | ast_devstate_cb_type | callback, | |
void * | data | |||
) |
Unregisters a device state change callback.
callback | Callback | |
data | to pass to callback The callback is called if the state for extension is changed Return -1 on failure, ID on success |
Definition at line 345 of file devicestate.c.
References AST_LIST_LOCK, AST_LIST_REMOVE_CURRENT, AST_LIST_TRAVERSE_SAFE_BEGIN, AST_LIST_TRAVERSE_SAFE_END, AST_LIST_UNLOCK, devstate_cb::callback, devstate_cb::data, and free.
Referenced by unload_module().
00346 { 00347 struct devstate_cb *devcb; 00348 00349 AST_LIST_LOCK(&devstate_cbs); 00350 AST_LIST_TRAVERSE_SAFE_BEGIN(&devstate_cbs, devcb, list) { 00351 if ((devcb->callback == callback) && (devcb->data == data)) { 00352 AST_LIST_REMOVE_CURRENT(&devstate_cbs, list); 00353 free(devcb); 00354 break; 00355 } 00356 } 00357 AST_LIST_TRAVERSE_SAFE_END; 00358 AST_LIST_UNLOCK(&devstate_cbs); 00359 }
int ast_devstate_prov_add | ( | const char * | label, | |
ast_devstate_prov_cb_type | callback | |||
) |
Add device state provider.
label | to use in hint, like label:object | |
callback | Callback |
-1 | failure | |
0 | success |
Definition at line 270 of file devicestate.c.
References ast_calloc, AST_LIST_INSERT_HEAD, AST_LIST_LOCK, and AST_LIST_UNLOCK.
Referenced by load_module().
00271 { 00272 struct devstate_prov *devprov; 00273 00274 if (!callback || !(devprov = ast_calloc(1, sizeof(*devprov)))) 00275 return -1; 00276 00277 devprov->callback = callback; 00278 ast_copy_string(devprov->label, label, sizeof(devprov->label)); 00279 00280 AST_LIST_LOCK(&devstate_provs); 00281 AST_LIST_INSERT_HEAD(&devstate_provs, devprov, list); 00282 AST_LIST_UNLOCK(&devstate_provs); 00283 00284 return 0; 00285 }
void ast_devstate_prov_del | ( | const char * | label | ) |
Remove device state provider.
label | to use in hint, like label:object |
Definition at line 288 of file devicestate.c.
References AST_LIST_LOCK, AST_LIST_REMOVE_CURRENT, AST_LIST_TRAVERSE_SAFE_BEGIN, AST_LIST_TRAVERSE_SAFE_END, AST_LIST_UNLOCK, free, and devstate_prov::label.
Referenced by unload_module().
00289 { 00290 struct devstate_prov *devcb; 00291 00292 AST_LIST_LOCK(&devstate_provs); 00293 AST_LIST_TRAVERSE_SAFE_BEGIN(&devstate_provs, devcb, list) { 00294 if (!strcasecmp(devcb->label, label)) { 00295 AST_LIST_REMOVE_CURRENT(&devstate_provs, list); 00296 free(devcb); 00297 break; 00298 } 00299 } 00300 AST_LIST_TRAVERSE_SAFE_END; 00301 AST_LIST_UNLOCK(&devstate_provs); 00302 }
int ast_parse_device_state | ( | const char * | device | ) |
Search the Channels by Name.
Definition at line 192 of file devicestate.c.
References ast_channel::_state, AST_CHANNEL_NAME, ast_channel_unlock, AST_DEVICE_INUSE, AST_DEVICE_RINGING, AST_DEVICE_UNKNOWN, ast_get_channel_by_name_prefix_locked(), AST_STATE_RINGING, and match().
Referenced by ast_device_state().
00193 { 00194 struct ast_channel *chan; 00195 char match[AST_CHANNEL_NAME]; 00196 int res; 00197 00198 ast_copy_string(match, device, sizeof(match)-1); 00199 strcat(match, "-"); 00200 chan = ast_get_channel_by_name_prefix_locked(match, strlen(match)); 00201 00202 if (!chan) 00203 return AST_DEVICE_UNKNOWN; 00204 00205 if (chan->_state == AST_STATE_RINGING) 00206 res = AST_DEVICE_RINGING; 00207 else 00208 res = AST_DEVICE_INUSE; 00209 00210 ast_channel_unlock(chan); 00211 00212 return res; 00213 }
const char* devstate2str | ( | int | devstate | ) |
Convert device state to text string for output.
devstate | Current device state |
Definition at line 182 of file devicestate.c.
Referenced by __queues_show(), do_state_change(), and handle_statechange().
00183 { 00184 return devstatestring[devstate]; 00185 }