![]() |
Home page |
Mailing list |
Docs
Asterisk developer's documentation :: Codename Pineapple
devicestate.h File Reference
Definition in file devicestate.h.
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. | |
|
|
Device is busy Definition at line 36 of file devicestate.h. Referenced by agent_devicestate(), ast_extension_state2(), and sip_devicestate(). |
|
|
Device is in use Definition at line 35 of file devicestate.h. Referenced by agent_devicestate(), ast_extension_state2(), ast_parse_device_state(), metermaidstate(), and sip_devicestate(). |
|
|
Device is invalid Definition at line 37 of file devicestate.h. Referenced by agent_devicestate(), ast_device_state(), ast_extension_state2(), getproviderstate(), iax2_devicestate(), local_devicestate(), metermaidstate(), mgcp_devicestate(), and sip_devicestate(). |
|
|
Device is not used Definition at line 34 of file devicestate.h. Referenced by ast_device_state(), ast_extension_state2(), metermaidstate(), and sip_devicestate(). |
|
|
Device is on hold Definition at line 41 of file devicestate.h. Referenced by ast_extension_state2(), and sip_devicestate(). |
|
|
Device is ringing Definition at line 39 of file devicestate.h. Referenced by ast_extension_state2(), ast_parse_device_state(), and sip_devicestate(). |
|
|
Device is ringing *and* in use Definition at line 40 of file devicestate.h. Referenced by ast_extension_state2(), and sip_devicestate(). |
|
|
Device is unavailable Definition at line 38 of file devicestate.h. Referenced by agent_devicestate(), ast_extension_state2(), iax2_devicestate(), sip_devicestate(), and transmit_state_notify(). |
|
|
@{ 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(), local_devicestate(), mgcp_devicestate(), and sip_devicestate(). |
|
|
Devicestate watcher call back.
Definition at line 45 of file devicestate.h. |
|
|
Devicestate provider call back.
Definition at line 48 of file devicestate.h. |
|
|
Asks a channel for 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(), do_state_change(), 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 if (!(number = buf)) { 00230 if (!(provider = strsep(&tech, ":"))) 00231 return AST_DEVICE_INVALID; 00232 /* We have a provider */ 00233 number = tech; 00234 tech = NULL; 00235 } 00236 00237 if (provider) { 00238 if (option_debug > 2) 00239 ast_log(LOG_DEBUG, "Checking if I can find provider for \"%s\" - number: %s\n", provider, number); 00240 return getproviderstate(provider, number); 00241 } 00242 00243 if (option_debug > 3) 00244 ast_log(LOG_DEBUG, "No provider found, checking channel drivers for %s - %s\n", tech, number); 00245 00246 if (!(chan_tech = ast_get_channel_tech(tech))) 00247 return AST_DEVICE_INVALID; 00248 00249 if (!(chan_tech->devicestate)) /* Does the channel driver support device state notification? */ 00250 return ast_parse_device_state(device); /* No, try the generic function */ 00251 00252 res = chan_tech->devicestate(number); 00253 00254 if (res != AST_DEVICE_UNKNOWN) 00255 return res; 00256 00257 res = ast_parse_device_state(device); 00258 00259 if (res == AST_DEVICE_UNKNOWN) 00260 return AST_DEVICE_NOT_INUSE; 00261 00262 return res; 00263 }
|
|
||||||||||||
|
Tells Asterisk the State for Device is changed.
|
|
|
Tells Asterisk the State for Device is changed.
Definition at line 404 of file devicestate.c. References __ast_device_state_changed_literal(), and ast_strdupa. Referenced by ast_channel_free(), and ast_setstate(). 00405 { 00406 char *buf; 00407 buf = ast_strdupa(dev); 00408 return __ast_device_state_changed_literal(buf); 00409 }
|
|
|
Initialize the device state engine in separate thread.
Definition at line 449 of file devicestate.c. References ast_cond_init(), ast_log(), ast_pthread_create_background, change_pending, change_thread, do_devstate_changes(), and LOG_ERROR. 00450 { 00451 ast_cond_init(&change_pending, NULL); 00452 if (ast_pthread_create_background(&change_thread, NULL, do_devstate_changes, NULL) < 0) { 00453 ast_log(LOG_ERROR, "Unable to start device state change thread.\n"); 00454 return -1; 00455 } 00456 00457 return 0; 00458 }
|
|
||||||||||||
|
Registers a device state change callback.
Definition at line 322 of file devicestate.c. References ast_calloc, AST_RWLIST_INSERT_HEAD, AST_RWLIST_UNLOCK, and AST_RWLIST_WRLOCK. 00323 { 00324 struct devstate_cb *devcb; 00325 00326 if (!callback || !(devcb = ast_calloc(1, sizeof(*devcb)))) 00327 return -1; 00328 00329 devcb->data = data; 00330 devcb->callback = callback; 00331 00332 AST_RWLIST_WRLOCK(&devstate_cbs); 00333 AST_RWLIST_INSERT_HEAD(&devstate_cbs, devcb, list); 00334 AST_RWLIST_UNLOCK(&devstate_cbs); 00335 00336 return 0; 00337 }
|
|
||||||||||||
|
Unregisters a device state change callback.
Definition at line 340 of file devicestate.c. References AST_RWLIST_REMOVE_CURRENT, AST_RWLIST_TRAVERSE_SAFE_BEGIN, AST_RWLIST_TRAVERSE_SAFE_END, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, devstate_cb::callback, devstate_cb::data, and free. 00341 { 00342 struct devstate_cb *devcb; 00343 00344 AST_RWLIST_WRLOCK(&devstate_cbs); 00345 AST_RWLIST_TRAVERSE_SAFE_BEGIN(&devstate_cbs, devcb, list) { 00346 if ((devcb->callback == callback) && (devcb->data == data)) { 00347 AST_RWLIST_REMOVE_CURRENT(&devstate_cbs, list); 00348 free(devcb); 00349 break; 00350 } 00351 } 00352 AST_RWLIST_TRAVERSE_SAFE_END; 00353 AST_RWLIST_UNLOCK(&devstate_cbs); 00354 }
|
|
||||||||||||
|
Add device state provider.
Definition at line 266 of file devicestate.c. References ast_calloc, AST_RWLIST_INSERT_HEAD, AST_RWLIST_UNLOCK, and AST_RWLIST_WRLOCK. Referenced by load_module(). 00267 { 00268 struct devstate_prov *devprov; 00269 00270 if (!callback || !(devprov = ast_calloc(1, sizeof(*devprov)))) 00271 return -1; 00272 00273 devprov->callback = callback; 00274 ast_copy_string(devprov->label, label, sizeof(devprov->label)); 00275 00276 AST_RWLIST_WRLOCK(&devstate_provs); 00277 AST_RWLIST_INSERT_HEAD(&devstate_provs, devprov, list); 00278 AST_RWLIST_UNLOCK(&devstate_provs); 00279 00280 return 0; 00281 }
|
|
|
Remove device state provider.
Definition at line 284 of file devicestate.c. References AST_RWLIST_REMOVE_CURRENT, AST_RWLIST_TRAVERSE_SAFE_BEGIN, AST_RWLIST_TRAVERSE_SAFE_END, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, free, and devstate_prov::label. Referenced by unload_module(). 00285 { 00286 struct devstate_prov *devcb; 00287 00288 AST_RWLIST_WRLOCK(&devstate_provs); 00289 AST_RWLIST_TRAVERSE_SAFE_BEGIN(&devstate_provs, devcb, list) { 00290 if (!strcasecmp(devcb->label, label)) { 00291 AST_RWLIST_REMOVE_CURRENT(&devstate_provs, list); 00292 free(devcb); 00293 break; 00294 } 00295 } 00296 AST_RWLIST_TRAVERSE_SAFE_END; 00297 AST_RWLIST_UNLOCK(&devstate_provs); 00298 }
|
|
|
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 }
|
|
|
Convert device state to text string for output.
Definition at line 182 of file devicestate.c. Referenced by do_state_change(). 00183 { 00184 return devstatestring[devstate]; 00185 }
|