Annotate

plugins/bind.lua @ 99:0f5a8d530fcd

verse.plugins.disco: Add disco plugin originally developed by Hubert Chathi for Riddim, but here adapted for Verse with new APIs added to allow disco'ing the local server and remote entities
author Matthew Wild <mwild1@gmail.com>
date Sat, 21 Aug 2010 14:51:36 +0100
parent 78:f4188eff53a7
child 160:5cbbfe42212e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9
ca225a2d67b4 plugins.bind: Add plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1 local st = require "util.stanza";
ca225a2d67b4 plugins.bind: Add plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2 local xmlns_bind = "urn:ietf:params:xml:ns:xmpp-bind";
ca225a2d67b4 plugins.bind: Add plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3
ca225a2d67b4 plugins.bind: Add plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4 function verse.plugins.bind(stream)
ca225a2d67b4 plugins.bind: Add plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5 local function handle_features(features)
ca225a2d67b4 plugins.bind: Add plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6 if stream.bound then return; end
ca225a2d67b4 plugins.bind: Add plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7 stream:debug("Binding resource...");
40
afd037420977 plugins.bind: Requested JID^Wresource should be in <jid/>^W<resource/> tag (thanks Maranda :) )
Matthew Wild <mwild1@gmail.com>
parents: 39
diff changeset
8 stream:send_iq(st.iq({ type = "set" }):tag("bind", {xmlns=xmlns_bind}):tag("resource"):text(stream.resource),
9
ca225a2d67b4 plugins.bind: Add plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9 function (reply)
ca225a2d67b4 plugins.bind: Add plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10 if reply.attr.type == "result" then
ca225a2d67b4 plugins.bind: Add plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11 local result_jid = reply
ca225a2d67b4 plugins.bind: Add plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
12 :get_child("bind", xmlns_bind)
ca225a2d67b4 plugins.bind: Add plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13 :get_child("jid")
ca225a2d67b4 plugins.bind: Add plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14 :get_text();
ca225a2d67b4 plugins.bind: Add plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15 stream.username, stream.host, stream.resource = jid.split(result_jid);
ca225a2d67b4 plugins.bind: Add plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16 stream.jid, stream.bound = result_jid, true;
78
f4188eff53a7 verse.client, verse.plugins.bind, verse.plugins.session: Rename binding-success and binding-failure to bind-success and bind-failure for consistency
Matthew Wild <mwild1@gmail.com>
parents: 43
diff changeset
17 stream:event("bind-success", full_jid);
9
ca225a2d67b4 plugins.bind: Add plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18 elseif reply.attr.type == "error" then
43
a33036b7e5ab verse.plugins.bind: Fix incorrect variable name causing traceback on unsuccessful bind
Matthew Wild <mwild1@gmail.com>
parents: 40
diff changeset
19 local err = reply:child_with_name("error");
a33036b7e5ab verse.plugins.bind: Fix incorrect variable name causing traceback on unsuccessful bind
Matthew Wild <mwild1@gmail.com>
parents: 40
diff changeset
20 local type, condition, text = reply:get_error();
78
f4188eff53a7 verse.client, verse.plugins.bind, verse.plugins.session: Rename binding-success and binding-failure to bind-success and bind-failure for consistency
Matthew Wild <mwild1@gmail.com>
parents: 43
diff changeset
21 stream:event("bind-failure", { error = condition, text = text, type = type });
9
ca225a2d67b4 plugins.bind: Add plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
22 end
ca225a2d67b4 plugins.bind: Add plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
23 end);
ca225a2d67b4 plugins.bind: Add plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
24 end
ca225a2d67b4 plugins.bind: Add plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
25 stream:hook("stream-features", handle_features, 200);
ca225a2d67b4 plugins.bind: Add plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
26 return true;
ca225a2d67b4 plugins.bind: Add plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
27 end
ca225a2d67b4 plugins.bind: Add plugin
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
28