This graph shows which files directly or indirectly include this file:

Go to the source code of this file.
Defines | |
| #define | AST_DEVICE_BUSY 3 |
| #define | AST_DEVICE_INUSE 2 |
| #define | AST_DEVICE_INVALID 4 |
| #define | AST_DEVICE_NOT_INUSE 1 |
| #define | AST_DEVICE_RINGING 6 |
| #define | AST_DEVICE_UNAVAILABLE 5 |
| #define | AST_DEVICE_UNKNOWN 0 |
Typedefs | |
| typedef int(* | ast_devstate_cb_type )(const char *dev, int state, void *data) |
Functions | |
| 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) |
| 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) |
| 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.
|
|
Device is busy Definition at line 37 of file devicestate.h. Referenced by agent_devicestate(), ast_extension_state2(), sip_devicestate(), and update_dial_status(). |
|
|
Device is in use Definition at line 35 of file devicestate.h. Referenced by agent_devicestate(), ast_extension_state2(), ast_parse_device_state(), and sip_devicestate(). |
|
|
Device is invalid Definition at line 39 of file devicestate.h. Referenced by agent_devicestate(), ast_device_state(), ast_extension_state2(), get_member_status(), iax2_devicestate(), queue_function_qac(), sip_devicestate(), and update_dial_status(). |
|
|
Device is not used Definition at line 33 of file devicestate.h. Referenced by ast_device_state(), ast_extension_state2(), and sip_devicestate(). |
|
|
Device is ringing Definition at line 43 of file devicestate.h. Referenced by ast_extension_state2(), and ast_parse_device_state(). |
|
|
Device is unavailable Definition at line 41 of file devicestate.h. Referenced by agent_devicestate(), ast_extension_state2(), get_member_status(), iax2_devicestate(), queue_function_qac(), sip_devicestate(), transmit_state_notify(), and update_dial_status(). |
|
|
Device is valid but channel didn't know state Definition at line 31 of file devicestate.h. Referenced by agent_devicestate(), ast_device_state(), ast_parse_device_state(), iax2_devicestate(), sip_devicestate(), and update_dial_status(). |
|
|
Definition at line 45 of file devicestate.h. |
|
|
Asks a channel for device state.
Definition at line 104 of file devicestate.c. References AST_DEVICE_INVALID, AST_DEVICE_NOT_INUSE, AST_DEVICE_UNKNOWN, ast_get_channel_tech(), ast_parse_device_state(), ast_strdupa, ast_channel_tech::devicestate, strsep(), and ast_channel::tech. Referenced by ast_extension_state2(), chanavail_exec(), create_queue_member(), do_state_change(), reload_queues(), and transmit_state_notify(). 00105 {
00106 char *buf;
00107 char *tech;
00108 char *number;
00109 const struct ast_channel_tech *chan_tech;
00110 int res = 0;
00111
00112 buf = ast_strdupa(device);
00113 tech = strsep(&buf, "/");
00114 number = buf;
00115 if (!number)
00116 return AST_DEVICE_INVALID;
00117
00118 chan_tech = ast_get_channel_tech(tech);
00119 if (!chan_tech)
00120 return AST_DEVICE_INVALID;
00121
00122 if (!chan_tech->devicestate) /* Does the channel driver support device state notification? */
00123 return ast_parse_device_state(device); /* No, try the generic function */
00124 else {
00125 res = chan_tech->devicestate(number); /* Ask the channel driver for device state */
00126 if (res == AST_DEVICE_UNKNOWN) {
00127 res = ast_parse_device_state(device);
00128 /* at this point we know the device exists, but the channel driver
00129 could not give us a state; if there is no channel state available,
00130 it must be 'not in use'
00131 */
00132 if (res == AST_DEVICE_UNKNOWN)
00133 res = AST_DEVICE_NOT_INUSE;
00134 return res;
00135 } else
00136 return res;
00137 }
00138 }
|
|
||||||||||||
|
Tells Asterisk the State for Device is changed.
|
|
|
Tells Asterisk the State for Device is changed.
Definition at line 227 of file devicestate.c. References __ast_device_state_changed_literal(), and ast_strdupa. Referenced by ast_channel_free(), and ast_setstate(). 00228 {
00229 char *buf;
00230 buf = ast_strdupa(dev);
00231 return __ast_device_state_changed_literal(buf);
00232 }
|
|
|
Definition at line 272 of file devicestate.c. References ast_cond_init(), ast_log(), ast_pthread_create, change_pending, change_thread, do_devstate_changes(), and LOG_ERROR. Referenced by main(). 00273 {
00274 ast_cond_init(&change_pending, NULL);
00275 if (ast_pthread_create(&change_thread, NULL, do_devstate_changes, NULL) < 0) {
00276 ast_log(LOG_ERROR, "Unable to start device state change thread.\n");
00277 return -1;
00278 }
00279
00280 return 0;
00281 }
|
|
||||||||||||
|
Registers a device state change callback.
Definition at line 141 of file devicestate.c. References AST_LIST_INSERT_HEAD, AST_LIST_LOCK, AST_LIST_UNLOCK, calloc, and list. Referenced by load_module(). 00142 {
00143 struct devstate_cb *devcb;
00144
00145 if (!callback)
00146 return -1;
00147
00148 devcb = calloc(1, sizeof(*devcb));
00149 if (!devcb)
00150 return -1;
00151
00152 devcb->data = data;
00153 devcb->callback = callback;
00154
00155 AST_LIST_LOCK(&devstate_cbs);
00156 AST_LIST_INSERT_HEAD(&devstate_cbs, devcb, list);
00157 AST_LIST_UNLOCK(&devstate_cbs);
00158
00159 return 0;
00160 }
|
|
||||||||||||
|
Definition at line 163 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, free, and list. Referenced by unload_module(). 00164 {
00165 struct devstate_cb *devcb;
00166
00167 AST_LIST_LOCK(&devstate_cbs);
00168 AST_LIST_TRAVERSE_SAFE_BEGIN(&devstate_cbs, devcb, list) {
00169 if ((devcb->callback == callback) && (devcb->data == data)) {
00170 AST_LIST_REMOVE_CURRENT(&devstate_cbs, list);
00171 free(devcb);
00172 break;
00173 }
00174 }
00175 AST_LIST_TRAVERSE_SAFE_END;
00176 AST_LIST_UNLOCK(&devstate_cbs);
00177 }
|
|
|
Search the Channels by Name.
Definition at line 80 of file devicestate.c. References ast_channel::_state, AST_CHANNEL_NAME, AST_DEVICE_INUSE, AST_DEVICE_RINGING, AST_DEVICE_UNKNOWN, ast_get_channel_by_name_prefix_locked(), ast_mutex_unlock(), AST_STATE_RINGING, ast_channel::lock, and match(). Referenced by ast_device_state(). 00081 {
00082 struct ast_channel *chan;
00083 char match[AST_CHANNEL_NAME];
00084 int res;
00085
00086 ast_copy_string(match, device, sizeof(match)-1);
00087 strcat(match, "-");
00088 chan = ast_get_channel_by_name_prefix_locked(match, strlen(match));
00089
00090 if (!chan)
00091 return AST_DEVICE_UNKNOWN;
00092
00093 if (chan->_state == AST_STATE_RINGING)
00094 res = AST_DEVICE_RINGING;
00095 else
00096 res = AST_DEVICE_INUSE;
00097
00098 ast_mutex_unlock(&chan->lock);
00099
00100 return res;
00101 }
|
|
|
Convert device state to text string for output.
Definition at line 74 of file devicestate.c. References devstatestring. Referenced by __queues_show(), changethread(), and do_state_change(). 00075 {
00076 return devstatestring[devstate];
00077 }
|
1.4.2