Presence state management. More...

Go to the source code of this file.
Typedefs | |
| typedef enum ast_presence_state(* | ast_presence_state_prov_cb_type )(const char *data, char **subtype, char **message) |
| Presence state provider call back. | |
Enumerations | |
| enum | ast_presence_state { AST_PRESENCE_NOT_SET = 0, AST_PRESENCE_UNAVAILABLE, AST_PRESENCE_AVAILABLE, AST_PRESENCE_AWAY, AST_PRESENCE_XA, AST_PRESENCE_CHAT, AST_PRESENCE_DND, AST_PRESENCE_INVALID } |
Functions | |
| enum ast_presence_state | ast_presence_state (const char *presence_provider, char **subtype, char **message) |
| Asks a presence state provider for the current presence state. | |
| const char * | ast_presence_state2str (enum ast_presence_state state) |
| Convert presence state to text string for output. | |
| int | ast_presence_state_changed (enum ast_presence_state state, const char *subtype, const char *message, const char *fmt,...) |
| Notify the world that a presence provider state changed. | |
| int | ast_presence_state_changed_literal (enum ast_presence_state state, const char *subtype, const char *message, const char *presence_provider) |
| Notify the world that a presence provider state changed. | |
| int | ast_presence_state_engine_init (void) |
| enum ast_presence_state | ast_presence_state_nocache (const char *presence_provider, char **subtype, char **message) |
| Asks a presence state provider for the current presence state, bypassing the event cache. | |
| int | ast_presence_state_prov_add (const char *label, ast_presence_state_prov_cb_type callback) |
| Add presence state provider. | |
| int | ast_presence_state_prov_del (const char *label) |
| Remove presence state provider. | |
| enum ast_presence_state | ast_presence_state_val (const char *val) |
| Convert presence state from text to integer value. | |
Presence state management.
Definition in file presencestate.h.
| typedef enum ast_presence_state(* ast_presence_state_prov_cb_type)(const char *data, char **subtype, char **message) |
Presence state provider call back.
Definition at line 43 of file presencestate.h.
| enum ast_presence_state |
| AST_PRESENCE_NOT_SET | |
| AST_PRESENCE_UNAVAILABLE | |
| AST_PRESENCE_AVAILABLE | |
| AST_PRESENCE_AWAY | |
| AST_PRESENCE_XA | |
| AST_PRESENCE_CHAT | |
| AST_PRESENCE_DND | |
| AST_PRESENCE_INVALID |
Definition at line 26 of file presencestate.h.
{
AST_PRESENCE_NOT_SET = 0,
AST_PRESENCE_UNAVAILABLE,
AST_PRESENCE_AVAILABLE,
AST_PRESENCE_AWAY,
AST_PRESENCE_XA,
AST_PRESENCE_CHAT,
AST_PRESENCE_DND,
/* This is not something that a user can
* set his presence to. Rather, this is returned
* to indicate that presence is in some invalid
* state
*/
AST_PRESENCE_INVALID,
};
| enum ast_presence_state ast_presence_state | ( | const char * | presence_provider, |
| char ** | subtype, | ||
| char ** | message | ||
| ) |
Asks a presence state provider for the current presence state.
| presence_provider,The | presence provider to retrieve the state from. |
| subtype,The | output paramenter to store the subtype string in. Must be freed if returned |
| message,The | output paramenter to store the message string in. Must be freed if returned |
| presence | state value on success, |
| -1 | on failure. |
Definition at line 169 of file presencestate.c.
References ast_presence_state_helper().
{
return ast_presence_state_helper(presence_provider, subtype, message, 1);
}
| const char* ast_presence_state2str | ( | enum ast_presence_state | state | ) |
Convert presence state to text string for output.
| state | Current presence state |
Definition at line 81 of file presencestate.c.
References ARRAY_LEN, and state2string.
Referenced by action_presencestate(), handle_cli_presencestate_list(), hints_data_provider_get(), manager_state_cb(), presence_read(), and state_notify_build_xml().
{
int i;
for (i = 0; i < ARRAY_LEN(state2string); i++) {
if (state == state2string[i].state) {
return state2string[i].string;
}
}
return "";
}
| int ast_presence_state_changed | ( | enum ast_presence_state | state, |
| const char * | subtype, | ||
| const char * | message, | ||
| const char * | fmt, | ||
| ... | |||
| ) |
Notify the world that a presence provider state changed.
| state | the new presence state |
| subtype | the new presence subtype |
| message | the new presence message |
| fmt | Presence entity whose state has changed |
The new state of the entity will be sent off to any subscribers of the presence state. It will also be stored in the internal event cache.
| 0 | Success |
| -1 | Failure |
Definition at line 275 of file presencestate.c.
References AST_MAX_EXTENSION, and ast_presence_state_changed_literal().
Referenced by load_module().
{
char buf[AST_MAX_EXTENSION];
va_list ap;
va_start(ap, fmt);
vsnprintf(buf, sizeof(buf), fmt, ap);
va_end(ap);
return ast_presence_state_changed_literal(state, subtype, message, buf);
}
| int ast_presence_state_changed_literal | ( | enum ast_presence_state | state, |
| const char * | subtype, | ||
| const char * | message, | ||
| const char * | presence_provider | ||
| ) |
Notify the world that a presence provider state changed.
| state | the new presence state |
| subtype | the new presence subtype |
| message | the new presence message |
| presence_provider | Presence entity whose state has changed |
The new state of the entity will be sent off to any subscribers of the presence state. It will also be stored in the internal event cache.
| 0 | Success |
| -1 | Failure |
Definition at line 252 of file presencestate.c.
References ast_calloc, ast_cond_signal, AST_LIST_INSERT_TAIL, AST_LIST_LOCK, AST_LIST_UNLOCK, AST_PRESENCE_NOT_SET, AST_PTHREADT_NULL, change_thread, do_presence_state_change(), state_change::list, presence_state_event(), and state_change::provider.
Referenced by ast_presence_state_changed(), handle_cli_presencestate_change(), and presence_write().
{
struct state_change *change;
if (state != AST_PRESENCE_NOT_SET) {
presence_state_event(presence_provider, state, subtype, message);
} else if ((change_thread == AST_PTHREADT_NULL) ||
!(change = ast_calloc(1, sizeof(*change) + strlen(presence_provider)))) {
do_presence_state_change(presence_provider);
} else {
strcpy(change->provider, presence_provider);
AST_LIST_LOCK(&state_changes);
AST_LIST_INSERT_TAIL(&state_changes, change, list);
ast_cond_signal(&change_pending);
AST_LIST_UNLOCK(&state_changes);
}
return 0;
}
| int ast_presence_state_engine_init | ( | void | ) |
Definition at line 315 of file presencestate.c.
References ast_cond_init, ast_log(), ast_pthread_create_background, change_thread, do_presence_changes(), and LOG_ERROR.
Referenced by main().
{
ast_cond_init(&change_pending, NULL);
if (ast_pthread_create_background(&change_thread, NULL, do_presence_changes, NULL) < 0) {
ast_log(LOG_ERROR, "Unable to start presence state change thread.\n");
return -1;
}
return 0;
}
| enum ast_presence_state ast_presence_state_nocache | ( | const char * | presence_provider, |
| char ** | subtype, | ||
| char ** | message | ||
| ) |
Asks a presence state provider for the current presence state, bypassing the event cache.
Some presence state providers may perform transformations on presence data when it is requested (such as a base64 decode). In such instances, use of the event cache is not suitable and should be bypassed.
| presence_provider,The | presence provider to retrieve the state from. |
| subtype,The | output paramenter to store the subtype string in. Must be freed if returned |
| message,The | output paramenter to store the message string in. Must be freed if returned |
| presence | state value on success, |
| -1 | on failure. |
Definition at line 174 of file presencestate.c.
References ast_presence_state_helper().
Referenced by presence_read().
{
return ast_presence_state_helper(presence_provider, subtype, message, 0);
}
| int ast_presence_state_prov_add | ( | const char * | label, |
| ast_presence_state_prov_cb_type | callback | ||
| ) |
Add presence state provider.
| label | to use in hint, like label:object |
| callback | Callback |
| 0 | success |
| -1 | failure |
Definition at line 179 of file presencestate.c.
References ast_calloc, ast_copy_string(), AST_RWLIST_INSERT_HEAD, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, presence_state_provider::callback, and presence_state_provider::label.
Referenced by load_module().
{
struct presence_state_provider *provider;
if (!callback || !(provider = ast_calloc(1, sizeof(*provider)))) {
return -1;
}
provider->callback = callback;
ast_copy_string(provider->label, label, sizeof(provider->label));
AST_RWLIST_WRLOCK(&presence_state_providers);
AST_RWLIST_INSERT_HEAD(&presence_state_providers, provider, list);
AST_RWLIST_UNLOCK(&presence_state_providers);
return 0;
}
| int ast_presence_state_prov_del | ( | const char * | label | ) |
Remove presence state provider.
| label | to use in hint, like label:object |
| -1 | on failure |
| 0 | on success |
Definition at line 196 of file presencestate.c.
References ast_free, AST_RWLIST_REMOVE_CURRENT, AST_RWLIST_TRAVERSE_SAFE_BEGIN, AST_RWLIST_TRAVERSE_SAFE_END, AST_RWLIST_UNLOCK, AST_RWLIST_WRLOCK, and presence_state_provider::label.
Referenced by unload_module().
{
struct presence_state_provider *provider;
int res = -1;
AST_RWLIST_WRLOCK(&presence_state_providers);
AST_RWLIST_TRAVERSE_SAFE_BEGIN(&presence_state_providers, provider, list) {
if (!strcasecmp(provider->label, label)) {
AST_RWLIST_REMOVE_CURRENT(list);
ast_free(provider);
res = 0;
break;
}
}
AST_RWLIST_TRAVERSE_SAFE_END;
AST_RWLIST_UNLOCK(&presence_state_providers);
return res;
}
| enum ast_presence_state ast_presence_state_val | ( | const char * | val | ) |
Convert presence state from text to integer value.
| val | The text representing the presence state. Valid values are anything that comes after AST_PRESENCE_ in one of the defined values. |
Definition at line 92 of file presencestate.c.
References ARRAY_LEN, AST_PRESENCE_INVALID, and state2string.
Referenced by parse_data().
{
int i;
for (i = 0; i < ARRAY_LEN(state2string); i++) {
if (!strcasecmp(val, state2string[i].string)) {
return state2string[i].state;
}
}
return AST_PRESENCE_INVALID;
}