]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Ensure that presence state is decoded properly on Asterisk startup.
authorMark Michelson <mmichelson@digium.com>
Wed, 7 May 2014 21:58:37 +0000 (21:58 +0000)
committerMark Michelson <mmichelson@digium.com>
Wed, 7 May 2014 21:58:37 +0000 (21:58 +0000)
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

funcs/func_presencestate.c

index 26b311d0e194cc821f8a69ae1b891a9183e16dae..df8909f3716e5e275407070e435820986c440d64 100644 (file)
@@ -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;