diff options
Diffstat (limited to 'src/xmpp_util.erl')
-rw-r--r-- | src/xmpp_util.erl | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/src/xmpp_util.erl b/src/xmpp_util.erl index a07dae78b..57440b50e 100644 --- a/src/xmpp_util.erl +++ b/src/xmpp_util.erl @@ -42,16 +42,20 @@ add_delay_info(Stz, From, Time, Desc) -> -spec unwrap_carbon(stanza()) -> xmpp_element(). unwrap_carbon(#message{} = Msg) -> - case xmpp:get_subtag(Msg, #carbons_sent{}) of - #carbons_sent{forwarded = #forwarded{sub_els = [El]}} -> - El; - _ -> - case xmpp:get_subtag(Msg, #carbons_received{}) of - #carbons_received{forwarded = #forwarded{sub_els = [El]}} -> - El; - _ -> - Msg - end + try + case xmpp:get_subtag(Msg, #carbons_sent{}) of + #carbons_sent{forwarded = #forwarded{xml_els = [El]}} -> + xmpp:decode(El, ?NS_CLIENT, [ignore_els]); + _ -> + case xmpp:get_subtag(Msg, #carbons_received{}) of + #carbons_received{forwarded = #forwarded{xml_els = [El]}} -> + xmpp:decode(El, ?NS_CLIENT, [ignore_els]); + _ -> + Msg + end + end + catch _:{xmpp_codec, _} -> + Msg end; unwrap_carbon(Stanza) -> Stanza. |