Software /
code /
verse
Comparison
plugins/jingle.lua @ 197:7e98cf2c1d8d
plugins.*: Use verse.stanza() & co instead of require util.stanza
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Thu, 17 Mar 2011 18:33:52 +0100 |
parent | 140:97bf22d6ff96 |
child | 211:837cd09fcf01 |
comparison
equal
deleted
inserted
replaced
196:eb9d69d3f0b5 | 197:7e98cf2c1d8d |
---|---|
1 local sha1 = require "util.sha1".sha1; | 1 local sha1 = require "util.sha1".sha1; |
2 local st = require "util.stanza"; | |
3 local timer = require "util.timer"; | 2 local timer = require "util.timer"; |
4 local uuid_generate = require "util.uuid".generate; | 3 local uuid_generate = require "util.uuid".generate; |
5 | 4 |
6 local xmlns_jingle = "urn:xmpp:jingle:1"; | 5 local xmlns_jingle = "urn:xmpp:jingle:1"; |
7 local xmlns_jingle_errors = "urn:xmpp:jingle:errors:1"; | 6 local xmlns_jingle_errors = "urn:xmpp:jingle:errors:1"; |
50 return true; | 49 return true; |
51 end | 50 end |
52 -- No existing Jingle object handled this action, our turn... | 51 -- No existing Jingle object handled this action, our turn... |
53 if action ~= "session-initiate" then | 52 if action ~= "session-initiate" then |
54 -- Trying to send a command to a session we don't know | 53 -- Trying to send a command to a session we don't know |
55 local reply = st.error_reply(stanza, "cancel", "item-not-found") | 54 local reply = verse.error_reply(stanza, "cancel", "item-not-found") |
56 :tag("unknown-session", { xmlns = xmlns_jingle_errors }):up(); | 55 :tag("unknown-session", { xmlns = xmlns_jingle_errors }):up(); |
57 stream:send(reply); | 56 stream:send(reply); |
58 return; | 57 return; |
59 end | 58 end |
60 | 59 |
95 end | 94 end |
96 end | 95 end |
97 end | 96 end |
98 if not content then | 97 if not content then |
99 -- FIXME: Fail, no content | 98 -- FIXME: Fail, no content |
100 stream:send(st.error_reply(stanza, "cancel", "feature-not-implemented", "The specified content is not supported")); | 99 stream:send(verse.error_reply(stanza, "cancel", "feature-not-implemented", "The specified content is not supported")); |
101 return; | 100 return; |
102 end | 101 end |
103 | 102 |
104 if not transport then | 103 if not transport then |
105 -- FIXME: Refuse session, no transport | 104 -- FIXME: Refuse session, no transport |
106 stream:send(st.error_reply(stanza, "cancel", "feature-not-implemented", "The specified transport is not supported")); | 105 stream:send(verse.error_reply(stanza, "cancel", "feature-not-implemented", "The specified transport is not supported")); |
107 return; | 106 return; |
108 end | 107 end |
109 | 108 |
110 stream:send(st.reply(stanza)); | 109 stream:send(verse.reply(stanza)); |
111 | 110 |
112 jingle.content_tag = content_tag; | 111 jingle.content_tag = content_tag; |
113 jingle.creator, jingle.name = content_tag.attr.creator, content_tag.attr.name; | 112 jingle.creator, jingle.name = content_tag.attr.creator, content_tag.attr.name; |
114 jingle.content, jingle.transport = content, transport; | 113 jingle.content, jingle.transport = content, transport; |
115 | 114 |
150 end | 149 end |
151 return true; | 150 return true; |
152 end | 151 end |
153 | 152 |
154 function jingle_mt:send_command(command, element, callback) | 153 function jingle_mt:send_command(command, element, callback) |
155 local stanza = st.iq({ to = self.peer, type = "set" }) | 154 local stanza = verse.iq({ to = self.peer, type = "set" }) |
156 :tag("jingle", { | 155 :tag("jingle", { |
157 xmlns = xmlns_jingle, | 156 xmlns = xmlns_jingle, |
158 sid = self.sid, | 157 sid = self.sid, |
159 action = command, | 158 action = command, |
160 initiator = self.role == "initiator" and self.stream.jid or nil, | 159 initiator = self.role == "initiator" and self.stream.jid or nil, |
166 self.stream:send_iq(stanza, callback); | 165 self.stream:send_iq(stanza, callback); |
167 end | 166 end |
168 end | 167 end |
169 | 168 |
170 function jingle_mt:accept(options) | 169 function jingle_mt:accept(options) |
171 local accept_stanza = st.iq({ to = self.peer, type = "set" }) | 170 local accept_stanza = verse.iq({ to = self.peer, type = "set" }) |
172 :tag("jingle", { | 171 :tag("jingle", { |
173 xmlns = xmlns_jingle, | 172 xmlns = xmlns_jingle, |
174 sid = self.sid, | 173 sid = self.sid, |
175 action = "session-accept", | 174 action = "session-accept", |
176 responder = stream.jid, | 175 responder = stream.jid, |
202 stream:hook("iq/"..xmlns_jingle, handle_incoming_jingle); | 201 stream:hook("iq/"..xmlns_jingle, handle_incoming_jingle); |
203 return true; | 202 return true; |
204 end | 203 end |
205 | 204 |
206 function jingle_mt:offer(name, content) | 205 function jingle_mt:offer(name, content) |
207 local session_initiate = st.iq({ to = self.peer, type = "set" }) | 206 local session_initiate = verse.iq({ to = self.peer, type = "set" }) |
208 :tag("jingle", { xmlns = xmlns_jingle, action = "session-initiate", | 207 :tag("jingle", { xmlns = xmlns_jingle, action = "session-initiate", |
209 initiator = self.stream.jid, sid = self.sid }); | 208 initiator = self.stream.jid, sid = self.sid }); |
210 | 209 |
211 -- Content tag | 210 -- Content tag |
212 session_initiate:tag("content", { creator = self.role, name = name }); | 211 session_initiate:tag("content", { creator = self.role, name = name }); |