Skip to content

Commit 242021e

Browse files
committed
fix: support tcp binding ip:port or ip of ipv4 or ipv6
1 parent 950b1fb commit 242021e

File tree

3 files changed

+59
-2
lines changed

3 files changed

+59
-2
lines changed

src/ngx_http_lua_socket_tcp.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -867,7 +867,7 @@ ngx_http_lua_socket_tcp_bind(lua_State *L)
867867

868868
text = (u_char *) luaL_checklstring(L, 2, &len);
869869

870-
local = ngx_http_lua_parse_addr(L, text, len);
870+
local = ngx_http_lua_parse_addr_port(L, text, len);
871871
if (local == NULL) {
872872
lua_pushnil(L);
873873
lua_pushfstring(L, "bad address");
@@ -3430,7 +3430,7 @@ ngx_http_lua_socket_tcp_handler(ngx_event_t *ev)
34303430
static ngx_int_t
34313431
ngx_http_lua_socket_tcp_get_peer(ngx_peer_connection_t *pc, void *data)
34323432
{
3433-
/* empty */
3433+
pc->type = SOCK_STREAM;
34343434
return NGX_OK;
34353435
}
34363436

src/ngx_http_lua_util.c

+55
Original file line numberDiff line numberDiff line change
@@ -4555,4 +4555,59 @@ ngx_http_lua_parse_addr(lua_State *L, u_char *text, size_t len)
45554555
}
45564556

45574557

4558+
ngx_addr_t *
4559+
ngx_http_lua_parse_addr_port(lua_State *L, u_char *text, size_t len)
4560+
{
4561+
u_char *p, *last;
4562+
ngx_int_t port;
4563+
ngx_addr_t *addr;
4564+
size_t plen;
4565+
4566+
addr = ngx_http_lua_parse_addr(L, text, len);
4567+
if (addr != NULL) {
4568+
return addr;
4569+
}
4570+
4571+
last = text + len;
4572+
4573+
#if (NGX_HAVE_INET6)
4574+
if (len && text[0] == '[') {
4575+
p = ngx_strlchr(text, last, ']');
4576+
if (p == NULL || p == last - 1 || *++p != ':') {
4577+
return NULL;
4578+
}
4579+
4580+
text++;
4581+
len -= 2;
4582+
} else
4583+
#endif
4584+
4585+
{
4586+
p = ngx_strlchr(text, last, ':');
4587+
if (p == NULL) {
4588+
return NULL;
4589+
}
4590+
}
4591+
4592+
p++;
4593+
plen = last - p;
4594+
4595+
port = ngx_atoi(p, plen);
4596+
if (port < 1 || port > 65535) {
4597+
return NULL;
4598+
}
4599+
4600+
len -= plen + 1;
4601+
4602+
addr = ngx_http_lua_parse_addr(L, text, len);
4603+
if (addr == NULL) {
4604+
return NULL;
4605+
}
4606+
4607+
ngx_inet_set_port(addr->sockaddr, (in_port_t) port);
4608+
4609+
return addr;
4610+
}
4611+
4612+
45584613
/* vi:set ft=c ts=4 sw=4 et fdm=marker: */

src/ngx_http_lua_util.h

+2
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,8 @@ ngx_int_t ngx_http_lua_decode_base64mime(ngx_str_t *dst, ngx_str_t *src);
265265

266266
ngx_addr_t *ngx_http_lua_parse_addr(lua_State *L, u_char *text, size_t len);
267267

268+
ngx_addr_t *ngx_http_lua_parse_addr_port(lua_State *L, u_char *text, size_t len);
269+
268270
size_t ngx_http_lua_escape_log(u_char *dst, u_char *src, size_t size);
269271

270272

0 commit comments

Comments
 (0)