Software /
code /
prosody-modules
Comparison
mod_proxy65/mod_proxy65.lua @ 69:87dfd34dceb2
mod_proxy65: removed unneeded var and session stuff
author | Thilo Cestonaro <thilo@cestona.ro> |
---|---|
date | Sat, 31 Oct 2009 09:26:38 +0100 |
parent | 68:0df3e4d1f1a3 |
child | 70:d3afb1403aa7 |
comparison
equal
deleted
inserted
replaced
68:0df3e4d1f1a3 | 69:87dfd34dceb2 |
---|---|
32 local proxy_port = config_get(host, "core", "proxy65_port") or 5000; | 32 local proxy_port = config_get(host, "core", "proxy65_port") or 5000; |
33 local proxy_interface = config_get(host, "core", "proxy65_interface") or "*"; | 33 local proxy_interface = config_get(host, "core", "proxy65_interface") or "*"; |
34 local proxy_address = config_get(host, "core", "proxy65_address") or (proxy_interface ~= "*" and proxy_interface) or module.host; | 34 local proxy_address = config_get(host, "core", "proxy65_address") or (proxy_interface ~= "*" and proxy_interface) or module.host; |
35 | 35 |
36 local connlistener = { | 36 local connlistener = { |
37 registered = false, default_port = proxy_port, | 37 default_port = proxy_port, |
38 default_interface = proxy_interface, default_mode = "*a" | 38 default_interface = proxy_interface, default_mode = "*a" |
39 }; | 39 }; |
40 | 40 |
41 local function bin2hex(bin) | 41 local function bin2hex(bin) |
42 return bin:gsub(".", function (c) return ("%02x"):format(c:byte()); end) | 42 return bin:gsub(".", function (c) return ("%02x"):format(c:byte()); end) |
43 end | 43 end |
44 | 44 |
45 function new_session(conn) | |
46 local w = function(s) conn.write(s:gsub("\n", "\r\n")); end; | |
47 local session = { conn = conn; | |
48 send = function (t) w(tostring(t)); end; | |
49 disconnect = function () conn.close(); end; | |
50 }; | |
51 return session; | |
52 end | |
53 | |
54 function connlistener.listener(conn, data) | 45 function connlistener.listener(conn, data) |
55 local session = sessions[conn]; | 46 local session = sessions[conn] or { alreadySeen = false, sha = nil }; |
56 | 47 |
57 if session == nil and data ~= nil and data:sub(1):byte() == 0x05 and data:len() > 2 then | 48 if session.alreadySeen == false and data ~= nil and data:sub(1):byte() == 0x05 and data:len() > 2 then |
58 local nmethods = data:sub(2):byte(); | 49 local nmethods = data:sub(2):byte(); |
59 local methods = data:sub(3); | 50 local methods = data:sub(3); |
60 local supported = false; | 51 local supported = false; |
61 for i=1, nmethods, 1 do | 52 for i=1, nmethods, 1 do |
62 if(methods:sub(i):byte() == 0x00) then -- 0x00 == method: NO AUTH | 53 if(methods:sub(i):byte() == 0x00) then -- 0x00 == method: NO AUTH |
64 break; | 55 break; |
65 end | 56 end |
66 end | 57 end |
67 if(supported) then | 58 if(supported) then |
68 module:log("debug", "new session found ... ") | 59 module:log("debug", "new session found ... ") |
69 session = new_session(conn); | 60 session.alreadySeen = true; |
70 sessions[conn] = session; | 61 sessions[conn] = session; |
71 session.send(string.char(5, 0)); | 62 conn.write(string.char(5, 0)); |
72 end | 63 end |
73 return; | 64 return; |
74 end | 65 end |
75 if session ~= nil then | 66 if session.alreadySeen == true then |
76 if session.sha ~= nil and transfers[session.sha] ~= nil then | 67 if session.sha ~= nil and transfers[session.sha] ~= nil then |
77 local sha = session.sha; | 68 local sha = session.sha; |
78 if transfers[sha].activated == true and transfers[sha].initiator == conn and transfers[sha].target ~= nil then | 69 if transfers[sha].activated == true and transfers[sha].initiator == conn and transfers[sha].target ~= nil then |
79 transfers[sha].target.write(data); | 70 transfers[sha].target.write(data); |
80 return; | 71 return; |
99 elseif transfers[sha].target ~= nil then | 90 elseif transfers[sha].target ~= nil then |
100 transfers[sha].initiator = conn; | 91 transfers[sha].initiator = conn; |
101 session.sha = sha; | 92 session.sha = sha; |
102 module:log("debug", "initiator connected ... "); | 93 module:log("debug", "initiator connected ... "); |
103 end | 94 end |
104 session.send(string.char(5, 0, 0, 3, sha:len()) .. sha .. string.char(0, 0)); -- VER, REP, RSV, ATYP, BND.ADDR (sha), BND.PORT (2 Byte) | 95 conn.write(string.char(5, 0, 0, 3, sha:len()) .. sha .. string.char(0, 0)); -- VER, REP, RSV, ATYP, BND.ADDR (sha), BND.PORT (2 Byte) |
105 end | 96 end |
106 end | 97 end |
107 end | 98 end |
108 | 99 |
109 function connlistener.disconnect(conn, err) | 100 function connlistener.disconnect(conn, err) |