Skip to content

Commit 65014a8

Browse files
ytlmzhuizhuhaomeng
authored andcommitted
feature: support lua balancer set proxy bind dynamic
Co-author: lijunlong
1 parent bea8a0c commit 65014a8

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed

src/ngx_stream_lua_balancer.c

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -752,4 +752,74 @@ ngx_stream_lua_ffi_balancer_get_last_failure(ngx_stream_lua_request_t *r,
752752
}
753753

754754

755+
int
756+
ngx_stream_lua_ffi_balancer_bind_to_local_addr(ngx_stream_lua_request_t *r,
757+
const u_char *addr, size_t addr_len, u_char *errbuf, size_t *errbuf_size)
758+
{
759+
u_char *p;
760+
ngx_int_t rc;
761+
ngx_str_t addr_str;
762+
ngx_addr_t *addr_val;
763+
ngx_stream_lua_ctx_t *ctx;
764+
ngx_stream_upstream_t *u;
765+
766+
if (r == NULL) {
767+
p = ngx_snprintf(errbuf, *errbuf_size, "no request found");
768+
*errbuf_size = p - errbuf;
769+
return NGX_ERROR;
770+
}
771+
772+
u = r->session->upstream;
773+
if (u == NULL) {
774+
p = ngx_snprintf(errbuf, *errbuf_size, "no upstream found");
775+
*errbuf_size = p - errbuf;
776+
return NGX_ERROR;
777+
}
778+
779+
ctx = ngx_stream_lua_get_module_ctx(r, ngx_stream_lua_module);
780+
if (ctx == NULL) {
781+
p = ngx_snprintf(errbuf, *errbuf_size, "no ctx found");
782+
*errbuf_size = p - errbuf;
783+
return NGX_ERROR;
784+
}
785+
786+
if ((ctx->context & NGX_STREAM_LUA_CONTEXT_BALANCER) == 0) {
787+
p = ngx_snprintf(errbuf, *errbuf_size,
788+
"API disabled in the current context");
789+
*errbuf_size = p - errbuf;
790+
return NGX_ERROR;
791+
}
792+
793+
addr_val = ngx_pcalloc(r->pool, sizeof(ngx_addr_t));
794+
if (addr_val == NULL) {
795+
p = ngx_snprintf(errbuf, *errbuf_size, "no memory");
796+
*errbuf_size = p - errbuf;
797+
return NGX_ERROR;
798+
}
799+
800+
addr_str.len = addr_len;
801+
addr_str.data = ngx_palloc(r->pool, addr_len);
802+
if (addr_str.data == NULL) {
803+
p = ngx_snprintf(errbuf, *errbuf_size, "no memory");
804+
*errbuf_size = p - errbuf;
805+
return NGX_ERROR;
806+
}
807+
808+
ngx_memcpy(addr_str.data, addr, addr_len);
809+
810+
rc = ngx_parse_addr_port(r->pool, addr_val, addr_str.data, addr_str.len);
811+
if (rc != NGX_OK) {
812+
p = ngx_snprintf(errbuf, *errbuf_size, "parse addr port failed");
813+
*errbuf_size = p - errbuf;
814+
return NGX_ERROR;
815+
}
816+
817+
addr_val->name = addr_str;
818+
819+
u->peer.local = addr_val;
820+
821+
return NGX_OK;
822+
}
823+
824+
755825
/* vi:set ft=c ts=4 sw=4 et fdm=marker: */

0 commit comments

Comments
 (0)