Sat Apr 26 2014 22:03:05

Asterisk developer's documentation


presencestate.h File Reference

Presence state management. More...

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

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.

Detailed Description

Presence state management.

Definition in file presencestate.h.


Typedef Documentation

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.


Enumeration Type Documentation

Enumerator:
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,
};

Function Documentation

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.

Parameters:
presence_provider,Thepresence provider to retrieve the state from.
subtype,Theoutput paramenter to store the subtype string in. Must be freed if returned
message,Theoutput paramenter to store the message string in. Must be freed if returned
Return values:
presencestate value on success,
-1on 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.

Parameters:
stateCurrent 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.

Parameters:
statethe new presence state
subtypethe new presence subtype
messagethe new presence message
fmtPresence 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.

Return values:
0Success
-1Failure

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.

Parameters:
statethe new presence state
subtypethe new presence subtype
messagethe new presence message
presence_providerPresence 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.

Return values:
0Success
-1Failure

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;
}

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.

Parameters:
presence_provider,Thepresence provider to retrieve the state from.
subtype,Theoutput paramenter to store the subtype string in. Must be freed if returned
message,Theoutput paramenter to store the message string in. Must be freed if returned
Return values:
presencestate value on success,
-1on 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.

Parameters:
labelto use in hint, like label:object
callbackCallback
Return values:
0success
-1failure

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.

Parameters:
labelto use in hint, like label:object
Return values:
-1on failure
0on 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.

Parameters:
valThe text representing the presence state. Valid values are anything that comes after AST_PRESENCE_ in one of the defined values.
Returns:
The AST_PRESENCE_ integer value

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;
}