mod_cloud_notify/mod_cloud_notify.lua
changeset 5061 c728e82265a7
parent 5057 00e8cc6860cb
child 5219 fd6cb4365438
equal deleted inserted replaced
5060:2583bd7eb5d1 5061:c728e82265a7
    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)