Match and fire handler callbacks for incoming stanzas

Wed, 03 Feb 2010 21:02:21 +0000

author
Matthew Wild <mwild1@gmail.com>
date
Wed, 03 Feb 2010 21:02:21 +0000
changeset 7
394b0c8cad04
parent 6
ec839631a35f
child 8
ca881dab2577

Match and fire handler callbacks for incoming stanzas

xmpp.js file | annotate | diff | comparison | revisions
--- a/xmpp.js	Wed Feb 03 21:01:20 2010 +0000
+++ b/xmpp.js	Wed Feb 03 21:02:21 2010 +0000
@@ -217,6 +217,31 @@
 			}
 		}
 		this.debug("STANZA: "+stanza.toString());
+		
+		// Match and call handlers
+		var removeHandlers = [];
+		for(var i=0;i<this.handlers.length;i++)
+		{
+			var handler = this.handlers[i];
+			if(
+				(!handler.name || handler.name == stanza.name) &&
+				(!handler.xmlns || (handler.xmlns == stanza.attr.xmlns
+					|| (stanza.tags[0] && handler.xmlns == stanza.tags[0].attr.xmlns))) &&
+				(!handler.type || handler.type == stanza.attr.type) &&
+				(!handler.id || handler.id == stanza.attr.id) &&
+				(!handler.from || (handler.from == (handler.matchBare?xmpp.getBareJID(stanza.attr.from):stanza.attr.from))) &&
+				(!handler.to || (handler.to == (handler.matchBare?xmpp.getBareJID(stanza.attr.to):stanza.attr.to)))
+			)
+			{
+				var ret = handler.callback(stanza);
+				if(ret == false)
+					removeHandlers.push(i);
+			}
+		}
+		
+		var adjust = 0;
+		for(var i=0;i<removeHandlers.length;i++)
+			this.handlers.splice(removeHandlers[i]-(adjust++), 1);
 	},
 	
 	_stream_closed: function ()

mercurial