Use a stanza for c2s stream features instead of an array of strings. Removes a FIXME.
authorMatthew Wild <mwild1@gmail.com>
Thu, 20 Nov 2008 01:33:25 +0000
changeset 357 17bcecb06420
parent 356 8ff322b550a3
child 358 ffb1a720f5ae
Use a stanza for c2s stream features instead of an array of strings. Removes a FIXME.
core/sessionmanager.lua
plugins/mod_saslauth.lua
plugins/mod_tls.lua
plugins/mod_vcard.lua
--- a/core/sessionmanager.lua	Thu Nov 20 01:32:24 2008 +0000
+++ b/core/sessionmanager.lua	Thu Nov 20 01:33:25 2008 +0000
@@ -121,18 +121,12 @@
 						end
 						
 						
-						local features = {};
+						local features = st.stanza("stream:features");
 						modulemanager.fire_event("stream-features", session, features);
 						
-						-- FIXME: Need to send() this all at once
-						send("<stream:features>");
+						send(features);
 						
-						for _, feature in ipairs(features) do
-							send(tostring(feature));
-						end
- 
-        			                send("</stream:features>");
-						log("info", "Stream opened successfully");
+						(session.log or log)("info", "Sent reply <stream:stream> to client");
 						session.notopen = nil;
 end
 
--- a/plugins/mod_saslauth.lua	Thu Nov 20 01:32:24 2008 +0000
+++ b/plugins/mod_saslauth.lua	Thu Nov 20 01:33:25 2008 +0000
@@ -83,19 +83,21 @@
 add_handler("c2s_unauthed", "abort", xmlns_sasl, sasl_handler);
 add_handler("c2s_unauthed", "response", xmlns_sasl, sasl_handler);
 
+local mechanisms_attr = { xmlns='urn:ietf:params:xml:ns:xmpp-sasl' };
+local bind_attr = { xmlns='urn:ietf:params:xml:ns:xmpp-bind' };
+local xmpp_session_attr = { xmlns='urn:ietf:params:xml:ns:xmpp-session' };
 add_event_hook("stream-features", 
 					function (session, features)												
 						if not session.username then
-							t_insert(features, "<mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>");
+							features:tag("mechanisms", mechanisms_attr);
 							-- TODO: Provide PLAIN only if TLS is active, this is a SHOULD from the introduction of RFC 4616. This behavior could be overridden via configuration but will issuing a warning or so.
-								t_insert(features, "<mechanism>PLAIN</mechanism>");
-								t_insert(features, "<mechanism>DIGEST-MD5</mechanism>");
-							t_insert(features, "</mechanisms>");
+								features:tag("mechanism"):text("PLAIN"):up();
+								features:tag("mechanism"):text("DIGEST-MD5"):up();
+							features:up();
 						else
-							t_insert(features, "<bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'><required/></bind>");
-							t_insert(features, "<session xmlns='urn:ietf:params:xml:ns:xmpp-session'/>");
+							features:tag("bind", bind_attr):tag("required"):up():up();
+							features:tag("session", xmpp_session_attr):up();
 						end
-						--send [[<register xmlns="http://jabber.org/features/iq-register"/> ]]
 					end);
 					
 add_iq_handler("c2s", "urn:ietf:params:xml:ns:xmpp-bind", 
--- a/plugins/mod_tls.lua	Thu Nov 20 01:32:24 2008 +0000
+++ b/plugins/mod_tls.lua	Thu Nov 20 01:33:25 2008 +0000
@@ -24,9 +24,10 @@
 			end
 		end);
 		
+local starttls_attr = { xmlns = xmlns_starttls };
 add_event_hook("stream-features", 
 					function (session, features)												
 						if session.conn.starttls then
-							t_insert(features, "<starttls xmlns='"..xmlns_starttls.."'/>");
+							features:tag("starttls", starttls_attr):up();
 						end
 					end);
--- a/plugins/mod_vcard.lua	Thu Nov 20 01:32:24 2008 +0000
+++ b/plugins/mod_vcard.lua	Thu Nov 20 01:33:25 2008 +0000
@@ -43,9 +43,10 @@
 			end
 		end);
 
+local feature_vcard_attr = { var='vcard-temp' };
 add_event_hook("stream-features", 
 					function (session, features)												
 						if session.type == "c2s" then
-							t_insert(features, "<feature var='vcard-temp'/>");
+							features:tag("feature", feature_vcard_attr):up();
 						end
 					end);