Software / code / prosody
Comparison
util/error.lua @ 11092:bd13aa89262d
util.error: Collect Application-Specific Conditions from stanza errors
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sat, 26 Sep 2020 18:15:49 +0200 |
| parent | 11091:4b4b5188492f |
| child | 11094:03fdf41fd948 |
comparison
equal
deleted
inserted
replaced
| 11091:4b4b5188492f | 11092:bd13aa89262d |
|---|---|
| 90 | 90 |
| 91 return ok, new_err, ...; | 91 return ok, new_err, ...; |
| 92 end | 92 end |
| 93 | 93 |
| 94 local function from_stanza(stanza, context) | 94 local function from_stanza(stanza, context) |
| 95 local error_type, condition, text = stanza:get_error(); | 95 local error_type, condition, text, extra_tag = stanza:get_error(); |
| 96 local error_tag = stanza:get_child("error"); | 96 local error_tag = stanza:get_child("error"); |
| 97 context = context or {}; | 97 context = context or {}; |
| 98 context.stanza = stanza; | 98 context.stanza = stanza; |
| 99 context.by = error_tag.attr.by or stanza.attr.from; | 99 context.by = error_tag.attr.by or stanza.attr.from; |
| 100 | 100 |
| 101 return setmetatable({ | 101 return setmetatable({ |
| 102 type = error_type or "cancel"; | 102 type = error_type or "cancel"; |
| 103 condition = condition or "undefined-condition"; | 103 condition = condition or "undefined-condition"; |
| 104 text = text; | 104 text = text; |
| 105 extra = condition == "gone" and { | 105 extra = (extra_tag or condition == "gone") and { |
| 106 uri = error_tag:get_child_text("gone", "urn:ietf:params:xml:ns:xmpp-stanzas"); | 106 uri = error_tag:get_child_text("gone", "urn:ietf:params:xml:ns:xmpp-stanzas"); |
| 107 tag = extra_tag; | |
| 107 } or nil; | 108 } or nil; |
| 108 | 109 |
| 109 context = context; | 110 context = context; |
| 110 | 111 |
| 111 }, error_mt); | 112 }, error_mt); |