aboutsummaryrefslogtreecommitdiff
path: root/src/xmpp_util.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/xmpp_util.erl')
-rw-r--r--src/xmpp_util.erl24
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.