plugins/jingle_s5b.lua

changeset 140
97bf22d6ff96
parent 101
9c5362d393f0
child 288
22544dcf0579
equal deleted inserted replaced
139:ccb8ecde8b09 140:97bf22d6ff96
139 end 139 end
140 140
141 if #streamhost_array > 0 then 141 if #streamhost_array > 0 then
142 self.connecting_peer_candidates = true; 142 self.connecting_peer_candidates = true;
143 local function onconnect(streamhost, conn) 143 local function onconnect(streamhost, conn)
144 self.jingle:send_command("transport-info", verse.stanza("transport", { xmlns = xmlns_s5b, sid = self.s5b_sid }) 144 self.jingle:send_command("transport-info", verse.stanza("content", { creator = self.creator, name = self.name })
145 :tag("candidate-used", { cid = streamhost.cid })); 145 :tag("transport", { xmlns = xmlns_s5b, sid = self.s5b_sid })
146 :tag("candidate-used", { cid = streamhost.cid }));
146 self.onconnect_callback = callback; 147 self.onconnect_callback = callback;
147 self.conn = conn; 148 self.conn = conn;
148 end 149 end
149 local auth_token = sha1(self.s5b_sid..self.peer..stream.jid, true); 150 local auth_token = sha1(self.s5b_sid..self.peer..stream.jid, true);
150 connect_to_usable_streamhost(onconnect, streamhost_array, auth_token); 151 connect_to_usable_streamhost(onconnect, streamhost_array, auth_token);
154 end 155 end
155 end 156 end
156 157
157 function s5b:info_received(jingle_tag) 158 function s5b:info_received(jingle_tag)
158 stream:warn("Info received"); 159 stream:warn("Info received");
159 local transport_tag = jingle_tag:child_with_name("content"):child_with_name("transport"); 160 local content_tag = jingle_tag:child_with_name("content");
161 local transport_tag = content_tag:child_with_name("transport");
160 if transport_tag:get_child("candidate-used") and not self.connecting_peer_candidates then 162 if transport_tag:get_child("candidate-used") and not self.connecting_peer_candidates then
161 local candidate_used = transport_tag:child_with_name("candidate-used"); 163 local candidate_used = transport_tag:child_with_name("candidate-used");
162 if candidate_used then 164 if candidate_used then
163 -- Connect straight away to candidate used, we weren't trying any anyway 165 -- Connect straight away to candidate used, we weren't trying any anyway
164 local function onconnect(streamhost, conn) 166 local function onconnect(streamhost, conn)
167 self.jingle.stream:send_iq(verse.iq({ to = streamhost.jid, type = "set" }) 169 self.jingle.stream:send_iq(verse.iq({ to = streamhost.jid, type = "set" })
168 :tag("query", { xmlns = xmlns_bytestreams, sid = self.s5b_sid }) 170 :tag("query", { xmlns = xmlns_bytestreams, sid = self.s5b_sid })
169 :tag("activate"):text(self.jingle.peer), function (result) 171 :tag("activate"):text(self.jingle.peer), function (result)
170 172
171 if result.attr.type == "result" then 173 if result.attr.type == "result" then
172 self.jingle:send_command("transport-info", verse.stanza("transport", { xmlns = xmlns_s5b, sid = self.s5b_sid }) 174 self.jingle:send_command("transport-info", verse.stanza("content", content_tag.attr)
173 :tag("activated", { cid = candidate_used.attr.cid })); 175 :tag("transport", { xmlns = xmlns_s5b, sid = self.s5b_sid })
176 :tag("activated", { cid = candidate_used.attr.cid }));
174 self.conn = conn; 177 self.conn = conn;
175 self.onconnect_callback(conn); 178 self.onconnect_callback(conn);
176 else 179 else
177 self.jingle.stream:error("Failed to activate bytestream"); 180 self.jingle.stream:error("Failed to activate bytestream");
178 end 181 end

mercurial