9 |
9 |
10 |
10 |
11 local tonumber, tostring = tonumber, tostring; |
11 local tonumber, tostring = tonumber, tostring; |
12 local ipairs, pairs, print, next= ipairs, pairs, print, next; |
12 local ipairs, pairs, print, next= ipairs, pairs, print, next; |
13 local collectgarbage = collectgarbage; |
13 local collectgarbage = collectgarbage; |
14 local m_random = import("math", "random"); |
|
15 local format = import("string", "format"); |
14 local format = import("string", "format"); |
16 |
15 |
17 local hosts = hosts; |
16 local hosts = hosts; |
18 local full_sessions = full_sessions; |
17 local full_sessions = full_sessions; |
19 local bare_sessions = bare_sessions; |
18 local bare_sessions = bare_sessions; |
166 function streamopened(session, attr) |
165 function streamopened(session, attr) |
167 local send = session.send; |
166 local send = session.send; |
168 session.host = attr.to or error("Client failed to specify destination hostname"); |
167 session.host = attr.to or error("Client failed to specify destination hostname"); |
169 session.host = nameprep(session.host); |
168 session.host = nameprep(session.host); |
170 session.version = tonumber(attr.version) or 0; |
169 session.version = tonumber(attr.version) or 0; |
171 session.streamid = m_random(1000000, 99999999); |
170 session.streamid = uuid_generate(); |
172 (session.log or session)("debug", "Client sent opening <stream:stream> to %s", session.host); |
171 (session.log or session)("debug", "Client sent opening <stream:stream> to %s", session.host); |
173 |
172 |
174 send("<?xml version='1.0'?>"); |
173 send("<?xml version='1.0'?>"); |
175 send(format("<stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='%s' from='%s' version='1.0' xml:lang='en'>", session.streamid, session.host)); |
174 send(format("<stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='%s' from='%s' version='1.0' xml:lang='en'>", session.streamid, session.host)); |
176 |
175 |