summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Michelson <mmichelson@digium.com>2014-05-07 21:58:37 +0000
committerMark Michelson <mmichelson@digium.com>2014-05-07 21:58:37 +0000
commit68066907e141757112cec3ef06711ee38fd88855 (patch)
tree31ae264470d7a46c56c0e4d020d6a4defde2bd75
parenta92f0a9e83b6301ec2cbe754cf4fcfadf9079011 (diff)
Ensure that presence state is decoded properly on Asterisk startup.
The CustomPresence provider callback will automatically base64 decode stored data if the 'e' option was present when the state was set. However, since the provider callback was bypassed on Asterisk startup, encoded presence subtypes and messages were being sent instead. This fix makes it so the provider callback is always used when providing presence state updates. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@413469 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r--funcs/func_presencestate.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/funcs/func_presencestate.c b/funcs/func_presencestate.c
index 26b311d0e..df8909f37 100644
--- a/funcs/func_presencestate.c
+++ b/funcs/func_presencestate.c
@@ -263,6 +263,7 @@ static enum ast_presence_state custom_presence_callback(const char *data, char *
if ((strchr(_options, 'e'))) {
char tmp[1301];
+
if (ast_strlen_zero(_subtype)) {
*subtype = NULL;
} else {
@@ -848,20 +849,16 @@ static int load_module(void)
db_entry = db_tree = ast_db_gettree(astdb_family, NULL);
for (; db_entry; db_entry = db_entry->next) {
const char *dev_name = strrchr(db_entry->key, '/') + 1;
- char state_info[1301];
enum ast_presence_state state;
char *message;
char *subtype;
- char *options;
if (dev_name <= (const char *) 1) {
continue;
}
- ast_copy_string(state_info, db_entry->data, sizeof(state_info));
- if (parse_data(state_info, &state, &subtype, &message, &options)) {
- ast_log(LOG_WARNING, "Invalid CustomPresence entry %s encountered\n", db_entry->data);
- continue;
- }
+ state = custom_presence_callback(dev_name, &subtype, &message);
ast_presence_state_changed(state, subtype, message, "CustomPresence:%s", dev_name);
+ ast_free(subtype);
+ ast_free(message);
}
ast_db_freetree(db_tree);
db_tree = NULL;