Annotate

plugins/jingle_ibb.lua @ 498:50d0bd035bb7

util.sasl.oauthbearer: Don't send authzid It's not needed and not recommended in XMPP unless we want to act as someone other than who we authenticate as. We find out the JID during resource binding.
author Kim Alvefur <zash@zash.se>
date Fri, 23 Jun 2023 12:09:49 +0200
parent 490:6b2f31da9610
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
250
a5ac643a7fd6 added local verse var to all plugins
mva <mva@mva.name>
parents: 219
diff changeset
1 local verse = require "verse";
490
6b2f31da9610 Update for new Prosody module namespace
Kim Alvefur <zash@zash.se>
parents: 469
diff changeset
2 local base64 = require "prosody.util.encodings".base64;
6b2f31da9610 Update for new Prosody module namespace
Kim Alvefur <zash@zash.se>
parents: 469
diff changeset
3 local new_id = require "prosody.util.id".short;
250
a5ac643a7fd6 added local verse var to all plugins
mva <mva@mva.name>
parents: 219
diff changeset
4
219
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
5 local xmlns_jingle_ibb = "urn:xmpp:jingle:transports:ibb:1";
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
6 local xmlns_ibb = "http://jabber.org/protocol/ibb";
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
7 assert(base64.encode("This is a test.") == "VGhpcyBpcyBhIHRlc3Qu", "Base64 encoding failed");
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
8 assert(base64.decode("VGhpcyBpcyBhIHRlc3Qu") == "This is a test.", "Base64 decoding failed");
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
9
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10 local ibb_conn = {};
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11 local ibb_conn_mt = { __index = ibb_conn };
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12
284
c78d1780f1d2 plugins.jingle_ibb: new_ibb() doesn't need to be global
Kim Alvefur <zash@zash.se>
parents: 250
diff changeset
13 local function new_ibb(stream)
219
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14 local conn = setmetatable({ stream = stream }, ibb_conn_mt)
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15 conn = verse.eventable(conn);
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16 return conn;
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19 function ibb_conn:initiate(peer, sid, stanza)
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 self.block = 2048; -- ignored for now
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21 self.stanza = stanza or 'iq';
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
22 self.peer = peer;
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23 self.sid = sid or tostring(self):match("%x+$");
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 self.iseq = 0;
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 self.oseq = 0;
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26 local feeder = function(stanza)
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27 return self:feed(stanza)
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
28 end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29 self.feeder = feeder;
428
bde804b01f28 Fix typos (thanks Link Mauve and codespell)
Kim Alvefur <zash@zash.se>
parents: 284
diff changeset
30 print("Hooking incoming IQs");
219
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 local stream = self.stream;
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32 stream:hook("iq/".. xmlns_ibb, feeder)
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
33 if stanza == "message" then
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34 stream:hook("message", feeder)
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
35 end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
38 function ibb_conn:open(callback)
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
39 self.stream:send_iq(verse.iq{ to = self.peer, type = "set" }
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
40 :tag("open", {
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
41 xmlns = xmlns_ibb,
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
42 ["block-size"] = self.block,
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
43 sid = self.sid,
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
44 stanza = self.stanza
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
45 })
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
46 , function(reply)
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
47 if callback then
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
48 if reply.attr.type ~= "error" then
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
49 callback(true)
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
50 else
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
51 callback(false, reply:get_error())
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
52 end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
53 end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
54 end);
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
55 end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
56
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
57 function ibb_conn:send(data)
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
58 local stanza = self.stanza;
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
59 local st;
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
60 if stanza == "iq" then
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
61 st = verse.iq{ type = "set", to = self.peer }
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
62 elseif stanza == "message" then
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
63 st = verse.message{ to = self.peer }
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
64 end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
65
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
66 local seq = self.oseq;
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
67 self.oseq = seq + 1;
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
68
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
69 st:tag("data", { xmlns = xmlns_ibb, sid = self.sid, seq = seq })
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
70 :text(base64.encode(data));
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
71
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
72 if stanza == "iq" then
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
73 self.stream:send_iq(st, function(reply)
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
74 self:event(reply.attr.type == "result" and "drained" or "error");
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
75 end)
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
76 else
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
77 stream:send(st)
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
78 self:event("drained");
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
79 end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
80 end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
81
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
82 function ibb_conn:feed(stanza)
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
83 if stanza.attr.from ~= self.peer then return end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
84 local child = stanza[1];
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
85 if child.attr.sid ~= self.sid then return end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
86 local ok;
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
87 if child.name == "open" then
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
88 self:event("connected");
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
89 self.stream:send(verse.reply(stanza))
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
90 return true
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
91 elseif child.name == "data" then
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
92 local bdata = stanza:get_child_text("data", xmlns_ibb);
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
93 local seq = tonumber(child.attr.seq);
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
94 local expected_seq = self.iseq;
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
95 if bdata and seq then
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
96 if seq ~= expected_seq then
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
97 self.stream:send(verse.error_reply(stanza, "cancel", "not-acceptable", "Wrong sequence. Packet lost?"))
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
98 self:close();
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
99 self:event("error");
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
100 return true;
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
101 end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
102 self.iseq = seq + 1;
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
103 local data = base64.decode(bdata);
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
104 if self.stanza == "iq" then
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
105 self.stream:send(verse.reply(stanza))
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
106 end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
107 self:event("incoming-raw", data);
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
108 return true;
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
109 end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
110 elseif child.name == "close" then
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
111 self.stream:send(verse.reply(stanza))
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
112 self:close();
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
113 return true
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
114 end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
115 end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
116
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
117 --[[ FIXME some day
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
118 function ibb_conn:receive(patt)
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
119 -- is this even used?
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
120 print("ibb_conn:receive("..tostring(patt)..")");
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
121 assert(patt == "*a" or tonumber(patt));
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
122 local data = t_concat(self.ibuffer):sub(self.pos, tonumber(patt) or nil);
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
123 self.pos = self.pos + #data;
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
124 return data
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
125 end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
126
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
127 function ibb_conn:dirty()
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
128 print("ibb_conn:dirty()");
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
129 return false -- ????
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
130 end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
131 function ibb_conn:getfd()
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
132 return 0
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
133 end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
134 function ibb_conn:settimeout(n)
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
135 -- ignore?
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
136 end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
137 -]]
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
138
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
139 function ibb_conn:close()
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
140 self.stream:unhook("iq/".. xmlns_ibb, self.feeder)
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
141 self:event("disconnected");
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
142 end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
143
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
144 function verse.plugins.jingle_ibb(stream)
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
145 stream:hook("ready", function ()
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
146 stream:add_disco_feature(xmlns_jingle_ibb);
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
147 end, 10);
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
148
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
149 local ibb = {};
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
150
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
151 function ibb:_setup()
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
152 local conn = new_ibb(self.stream);
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
153 conn.sid = self.sid or conn.sid;
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
154 conn.stanza = self.stanza or conn.stanza;
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
155 conn.block = self.block or conn.block;
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
156 conn:initiate(self.peer, self.sid, self.stanza);
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
157 self.conn = conn;
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
158 end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
159 function ibb:generate_initiate()
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
160 print("ibb:generate_initiate() as ".. self.role);
457
73d4eb93657b Update to use util.id for random ids instead of counters (thanks Zash)
Matthew Wild <mwild1@gmail.com>
parents: 428
diff changeset
161 local sid = new_id();
219
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
162 self.sid = sid;
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
163 self.stanza = 'iq';
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
164 self.block = 2048;
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
165 local transport = verse.stanza("transport", { xmlns = xmlns_jingle_ibb,
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
166 sid = self.sid, stanza = self.stanza, ["block-size"] = self.block });
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
167 return transport;
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
168 end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
169 function ibb:generate_accept(initiate_transport)
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
170 print("ibb:generate_accept() as ".. self.role);
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
171 local attr = initiate_transport.attr;
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
172 self.sid = attr.sid or self.sid;
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
173 self.stanza = attr.stanza or self.stanza;
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
174 self.block = attr["block-size"] or self.block;
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
175 self:_setup();
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
176 return initiate_transport;
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
177 end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
178 function ibb:connect(callback)
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
179 if not self.conn then
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
180 self:_setup();
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
181 end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
182 local conn = self.conn;
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
183 print("ibb:connect() as ".. self.role);
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
184 if self.role == "initiator" then
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
185 conn:open(function(ok, ...)
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
186 assert(ok, table.concat({...}, ", "));
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
187 callback(conn);
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
188 end);
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
189 else
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
190 callback(conn);
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
191 end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
192 end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
193 function ibb:info_received(jingle_tag)
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
194 print("ibb:info_received()");
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
195 -- TODO, what exactly?
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
196 end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
197 function ibb:disconnect()
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
198 if self.conn then
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
199 self.conn:close()
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
200 end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
201 end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
202 function ibb:handle_accepted(jingle_tag) end
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
203
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
204 local ibb_mt = { __index = ibb };
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
205 stream:hook("jingle/transport/"..xmlns_jingle_ibb, function (jingle)
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
206 return setmetatable({
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
207 role = jingle.role,
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
208 peer = jingle.peer,
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
209 stream = jingle.stream,
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
210 jingle = jingle,
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
211 }, ibb_mt);
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
212 end);
ce8ed17710cb plugins.jingle_ibb: In-Band Bytestreams, initial commit.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
213 end