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