-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviewboard.asterisk.org/r/3482/
-----------------------------------------------------------

Review request for Asterisk Developers.


Bugs: ASTERISK-23671
    https://issues.asterisk.org/jira/browse/ASTERISK-23671


Repository: Asterisk


Description
-------

The 'e' option for the PRESENCE_STATE() function is not very well defined. 
Specifically, when using the function in write mode, it is unclear whether 
consumers of presence state events should expect to receive base64-encoded 
values or not. Further, the behavior is not consistent within the module. When 
the initial presence state is written, base64-encoded values are written to 
stasis and consumers receive these encoded values. However, if the 
ast_presence_state() function is called to retrieve the current presence 
values, decoded values are returned.

With this patch, if the subtype and message given in the PRESENCE_STATE() 
function are base64-encoded, these values are decoded before being sent to 
stasis. This way, consumers of presence state will always be guaranteed to get 
decoded values.

So with this patch, you can do the following:

exten => 
blah,1,Set(PRESENCE_STATE(CustomPresence:blah)=away,bHVuY2g=,Q2xlbSdzIENsYW1z,e)
 ; Sends consumers state=away, subtype="lunch", message="Clem's Clams". Stores 
base64 in astdb
exten => blah,n,Set(subtype=${PRESENCE_STATE(CustomPresence:blah,subtype)}) ; 
Sets subtype to "lunch"
exten => blah,n,Set(message=${PRESENCE_STATE(CustomPresence:blah,message)}) ; 
Sets message to "Clem's Clams"

If you actually want to be sending Base64-encoded data to consumers, then omit 
the e option.

exten => 
blah,1,Set(PRESENCE_STATE(CustomPresence:blah)=away,bHVuY2g=,Q2xlbSdzIENsYW1z) 
; Sends consumers state=away, subtype="bHVuY2g=", message=Q2xlbSdzIENsYW1z. 
Stores base64 in astdb
exten => blah,n,Set(subtype=${PRESENCE_STATE(CustomPresence:blah,subtype)}) ; 
Sets subtype to "bHVuY2g="
exten => blah,n,Set(message=${PRESENCE_STATE(CustomPresence:blah,message)}) ; 
Sets message to "Q2xlbSdzIENsYW1z"
exten => 
blah,n,Set(subtype=${BASE64_DECODE(${PRESENCE_STATE(CustomPresence:blah,subtype)})})
 ; Sets subtype to "lunch"
exten => 
blah,n,Set(message=${BASE64_DECODe(${PRESENCE_STATE(CustomPresence:blah,message)})})
 ; Sets message to "Clem's Clams"

To me, this behavior seems at the very least more consistent than what was 
being done before. I'm certainly willing to hear objections, though.


Diffs
-----

  /trunk/funcs/func_presencestate.c 412583 

Diff: https://reviewboard.asterisk.org/r/3482/diff/


Testing
-------

I have added a unit test that ensures this behaves as expected. In doing so, I 
realized it was nearly identical to the previous test_presence_state_change 
test, so I refactored the code to be reusable and to plug some memory leaks and 
stasis subscription leaks.


Thanks,

Mark Michelson

-- 
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

asterisk-dev mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/asterisk-dev

Reply via email to