surok.lua/surok.lua
2016-10-24 17:03:28 +03:00

79 lines
1.3 KiB
Lua

local dns = require "org.conman.dns"
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.' ..
ngx.var.resolvedomain .. '.'
else
domain = '_' .. ngx.var.portname .. '.' ..
ngx.var.app .. '.' ..
ngx.var.group .. '._tcp.' ..
ngx.var.resolvedomain .. '.'
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
end
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
end
function dns_decode(r)
d = dns.decode(r)
return d
end
resolved = do_query(dns_encode())
decoded = dns_decode(resolved)
ngx.var.upstr = decoded.answers[1].target .. ':' .. decoded.answers[1].port