77 function handle_push_error(event) |
77 function handle_push_error(event) |
78 local stanza = event.stanza; |
78 local stanza = event.stanza; |
79 local error_type, condition, error_text = stanza:get_error(); |
79 local error_type, condition, error_text = stanza:get_error(); |
80 local node = id2node[stanza.attr.id]; |
80 local node = id2node[stanza.attr.id]; |
81 local identifier = id2identifier[stanza.attr.id]; |
81 local identifier = id2identifier[stanza.attr.id]; |
82 if node == nil then return false; end -- unknown stanza? Ignore for now! |
82 if node == nil then |
|
83 module:log("warn", "Received push error with unrecognised id: %s", stanza.attr.id); |
|
84 return false; -- unknown stanza? Ignore for now! |
|
85 end |
83 local from = stanza.attr.from; |
86 local from = stanza.attr.from; |
84 local user_push_services = push_store:get(node); |
87 local user_push_services = push_store:get(node); |
85 local changed = false; |
88 local found, changed = false, false; |
86 |
89 |
87 for push_identifier, _ in pairs(user_push_services) do |
90 for push_identifier, _ in pairs(user_push_services) do |
88 if push_identifier == identifier then |
91 if push_identifier == identifier then |
|
92 found = true; |
89 if user_push_services[push_identifier] and user_push_services[push_identifier].jid == from and error_type ~= "wait" then |
93 if user_push_services[push_identifier] and user_push_services[push_identifier].jid == from and error_type ~= "wait" then |
90 push_errors[push_identifier] = push_errors[push_identifier] + 1; |
94 push_errors[push_identifier] = push_errors[push_identifier] + 1; |
91 module:log("info", "Got error <%s:%s:%s> for identifier '%s': " |
95 module:log("info", "Got error <%s:%s:%s> for identifier '%s': " |
92 .."error count for this identifier is now at %s", error_type, condition, error_text or "", push_identifier, |
96 .."error count for this identifier is now at %s", error_type, condition, error_text or "", push_identifier, |
93 tostring(push_errors[push_identifier])); |
97 tostring(push_errors[push_identifier])); |
120 id2identifier[stanza.attr.id] = nil; |
124 id2identifier[stanza.attr.id] = nil; |
121 end |
125 end |
122 elseif user_push_services[push_identifier] and user_push_services[push_identifier].jid == from and error_type == "wait" then |
126 elseif user_push_services[push_identifier] and user_push_services[push_identifier].jid == from and error_type == "wait" then |
123 module:log("debug", "Got error <%s:%s:%s> for identifier '%s': " |
127 module:log("debug", "Got error <%s:%s:%s> for identifier '%s': " |
124 .."NOT increasing error count for this identifier", error_type, condition, error_text or "", push_identifier); |
128 .."NOT increasing error count for this identifier", error_type, condition, error_text or "", push_identifier); |
|
129 else |
|
130 module:log("debug", "Unhandled push error <%s:%s:%s> from %s for identifier '%s'", |
|
131 error_type, condition, error_text or "", from, push_identifier |
|
132 ); |
125 end |
133 end |
126 end |
134 end |
127 end |
135 end |
128 if changed then |
136 if changed then |
129 push_store:flush_to_disk(node); |
137 push_store:flush_to_disk(node); |
|
138 elseif not found then |
|
139 module:log("warn", "Unable to find matching registration for push error <%s:%s:%s> from %s", error_type, condition, error_text or "", from); |
130 end |
140 end |
131 return true; |
141 return true; |
132 end |
142 end |
133 |
143 |
134 function handle_push_success(event) |
144 function handle_push_success(event) |