79 lines
1.3 KiB
Lua
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
|