plugins/proxy65.lua

changeset 395
e86144a4eaa1
parent 392
cdea6a28369e
child 457
73d4eb93657b
equal deleted inserted replaced
394:c2e959b60c13 395:e86144a4eaa1
1 local events = require "util.events"; 1 local verse = require "verse";
2 local uuid = require "util.uuid"; 2 local uuid = require "util.uuid";
3 local sha1 = require "util.hashes".sha1; 3 local sha1 = require "util.hashes".sha1;
4 4
5 local proxy65_mt = {}; 5 local proxy65_mt = {};
6 proxy65_mt.__index = proxy65_mt; 6 proxy65_mt.__index = proxy65_mt;
107 local type, condition, text = reply:get_error(); 107 local type, condition, text = reply:get_error();
108 conn:event("connection-failed", { conn = conn, type = type, condition = condition, text = text }); 108 conn:event("connection-failed", { conn = conn, type = type, condition = condition, text = text });
109 else 109 else
110 -- Target connected to streamhost, connect ourselves 110 -- Target connected to streamhost, connect ourselves
111 local streamhost_used = reply.tags[1]:get_child("streamhost-used"); 111 local streamhost_used = reply.tags[1]:get_child("streamhost-used");
112 if not streamhost_used then 112 -- if not streamhost_used then
113 --FIXME: Emit error 113 --FIXME: Emit error
114 end 114 -- end
115 conn.streamhost_jid = streamhost_used.attr.jid; 115 conn.streamhost_jid = streamhost_used.attr.jid;
116 local host, port; 116 local host, port;
117 for _, proxy in ipairs(proxies or self.proxies) do 117 for _, proxy in ipairs(proxies or self.proxies) do
118 if proxy.jid == conn.streamhost_jid then 118 if proxy.jid == conn.streamhost_jid then
119 host, port = proxy.host, proxy.port; 119 host, port = proxy.host, proxy.port;
120 break; 120 break;
121 end 121 end
122 end 122 end
123 if not (host and port) then 123 -- if not (host and port) then
124 --FIXME: Emit error 124 --FIXME: Emit error
125 end 125 -- end
126 126
127 conn:connect(host, port); 127 conn:connect(host, port);
128 128
129 local function handle_proxy_connected() 129 local function handle_proxy_connected()
130 conn:unhook("connected", handle_proxy_connected); 130 conn:unhook("connected", handle_proxy_connected);
131 -- Both of us connected, tell proxy to activate connection 131 -- Both of us connected, tell proxy to activate connection
132 local request = verse.iq{to = conn.streamhost_jid, type="set"} 132 local activate_request = verse.iq{to = conn.streamhost_jid, type="set"}
133 :tag("query", { xmlns = xmlns_bytestreams, sid = conn.bytestream_sid }) 133 :tag("query", { xmlns = xmlns_bytestreams, sid = conn.bytestream_sid })
134 :tag("activate"):text(target_jid); 134 :tag("activate"):text(target_jid);
135 self.stream:send_iq(request, function (reply) 135 self.stream:send_iq(activate_request, function (activated)
136 if reply.attr.type == "result" then 136 if activated.attr.type == "result" then
137 -- Connection activated, ready to use 137 -- Connection activated, ready to use
138 conn:event("connected", conn); 138 conn:event("connected", conn);
139 else 139 -- else --FIXME: Emit error
140 --FIXME: Emit error
141 end 140 end
142 end); 141 end);
143 return true; 142 return true;
144 end 143 end
145 conn:hook("connected", handle_proxy_connected, 100); 144 conn:hook("connected", handle_proxy_connected, 100);

mercurial