surok.lua/surok.lua

79 lines
1.3 KiB
Lua
Raw Permalink Normal View History

2016-10-24 11:11:27 +03:00
local dns = require "org.conman.dns"
2016-10-24 16:47:35 +03:00
function dns_encode()
if ngx.var.app == nil then
ngx.exit(ngx.HTTP_SERVER_ERROR)
end
if ngx.var.group == nil then
ngx.exit(ngx.HTTP_SERVER_ERROR)
end
if ngx.var.resolvedomain == nil then
ngx.exit(ngx.HTTP_SERVER_ERROR)
end
domain = ''
if ngx.var.portname == nil then
domain = '_' ..
ngx.var.app .. '.' ..
ngx.var.group .. '._tcp.' ..
2016-10-24 17:03:28 +03:00
ngx.var.resolvedomain .. '.'
2016-10-24 16:47:35 +03:00
else
domain = '_' .. ngx.var.portname .. '.' ..
ngx.var.app .. '.' ..
ngx.var.group .. '._tcp.' ..
2016-10-24 17:03:28 +03:00
ngx.var.resolvedomain .. '.'
2016-10-24 16:47:35 +03:00
end
e,err = dns.encode {
id = math.random(),
query = true,
rd = true,
opcode = 'query',
question = {
name = domain,
type = 'SRV',
class = 'in'
}
}
if e == nil then
print('error: ', err)
ngx.exit(ngx.HTTP_SERVER_ERROR)
end
return e
2016-10-24 11:11:27 +03:00
end
2016-10-24 16:47:35 +03:00
function do_query(e)
if ngx.var.dns == nil then
ngx.exit(ngx.HTTP_SERVER_ERROR)
end
r,err = dns.query(ngx.var.dns,e)
if r == nil then
ngx.print(err)
ngx.exit(ngx.HTTP_SERVER_ERROR)
end
return r
2016-10-24 11:11:27 +03:00
end
2016-10-24 16:47:35 +03:00
function dns_decode(r)
d = dns.decode(r)
return d
2016-10-24 11:11:27 +03:00
end
2016-10-24 16:47:35 +03:00
resolved = do_query(dns_encode())
decoded = dns_decode(resolved)
ngx.var.upstr = decoded.answers[1].target .. ':' .. decoded.answers[1].port