Skip to content

Commit 84d2f05

Browse files
authored
Merge pull request #525 from matsumotory/524
2 parents 35e819b + 9a0f82b commit 84d2f05

File tree

3 files changed

+28
-65
lines changed

3 files changed

+28
-65
lines changed

.github/workflows/test.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ jobs:
1515
strategy:
1616
matrix:
1717
NGINX_VERSION:
18-
- 1.25.2
19-
- 1.24.0
18+
- 1.27.2
19+
- 1.26.2
2020
BUILD_DYNAMIC_MODULE:
2121
- ""
2222
- "TRUE"

nginx_version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
NGINX_SRC_MAJOR=1
2-
NGINX_SRC_MINOR=25
2+
NGINX_SRC_MINOR=27
33
NGINX_SRC_PATCH=2
44
NGINX_SRC_VER=nginx-${NGINX_SRC_MAJOR}.${NGINX_SRC_MINOR}.${NGINX_SRC_PATCH}

src/stream/ngx_stream_mruby_core.c

Lines changed: 25 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ static mrb_value ngx_stream_mrb_get_ngx_mruby_name(mrb_state *mrb, mrb_value sel
4141

4242
static mrb_value ngx_stream_mrb_add_listener(mrb_state *mrb, mrb_value self)
4343
{
44-
ngx_stream_core_main_conf_t *cmcf;
4544
ngx_stream_mruby_srv_conf_t *mscf = mrb->ud;
4645
ngx_stream_core_srv_conf_t *cscf = mscf->ctx->cscf;
4746
ngx_conf_t *cf = mscf->ctx->cf;
@@ -53,7 +52,7 @@ static mrb_value ngx_stream_mrb_add_listener(mrb_state *mrb, mrb_value self)
5352
#else
5453
ngx_uint_t i;
5554
#endif
56-
ngx_stream_listen_t *ls, *als;
55+
ngx_stream_listen_opt_t ls;
5756

5857
mrb_get_args(mrb, "H", &listener);
5958
address = mrb_hash_get(mrb, listener, mrb_check_intern_cstr(mrb, "address"));
@@ -74,93 +73,57 @@ static mrb_value ngx_stream_mrb_add_listener(mrb_state *mrb, mrb_value self)
7473
mrb_raise(mrb, E_RUNTIME_ERROR, "ngx_stream_mrb_add_listener ngx_parse_url failed");
7574
}
7675

77-
cmcf = ngx_stream_conf_get_module_main_conf(cf, ngx_stream_core_module);
78-
79-
ls = ngx_array_push(&cmcf->listen);
80-
if (ls == NULL) {
81-
mrb_raise(mrb, E_RUNTIME_ERROR, "ngx_stream_mrb_add_listener ngx_array_push failed");
82-
}
83-
84-
ngx_memzero(ls, sizeof(ngx_stream_listen_t));
85-
86-
#if (nginx_version < 1015010)
87-
ngx_memcpy(&ls->sockaddr.sockaddr, &u.sockaddr, u.socklen);
88-
ls->socklen = u.socklen;
89-
#endif
90-
91-
ls->backlog = NGX_LISTEN_BACKLOG;
92-
93-
#if (nginx_version >= 1013000)
94-
ls->rcvbuf = -1;
95-
ls->sndbuf = -1;
96-
#endif
97-
ls->type = SOCK_STREAM;
98-
ls->wildcard = u.wildcard;
99-
ls->ctx = cf->ctx;
76+
ngx_memzero(&ls, sizeof(ngx_stream_listen_opt_t));
77+
ls.rcvbuf = -1;
78+
ls.sndbuf = -1;
79+
ls.type = SOCK_STREAM;
80+
ls.wildcard = u.wildcard;
10081

10182
#if (NGX_HAVE_INET6)
102-
ls->ipv6only = 1;
83+
ls.ipv6only = 1;
10384
#endif
10485

10586
#if !(NGX_WIN32)
10687
if (mrb_bool(mrb_hash_get(mrb, listener, mrb_check_intern_cstr(mrb, "udp")))) {
107-
ls->type = SOCK_DGRAM;
88+
ls.type = SOCK_DGRAM;
10889
}
10990
#endif
11091

111-
if (ls->type == SOCK_DGRAM) {
92+
if (ls.type == SOCK_DGRAM) {
11293
#if (NGX_STREAM_SSL)
113-
if (ls->ssl) {
94+
if (ls.ssl) {
11495
mrb_raise(mrb, E_RUNTIME_ERROR, "\"ssl\" parameter is incompatible with \"udp\"");
11596
}
11697
#endif
11798

118-
if (ls->so_keepalive) {
99+
if (ls.so_keepalive) {
119100
mrb_raise(mrb, E_RUNTIME_ERROR, "\"so_keepalive\" parameter is incompatible with \"udp\"");
120101
}
121102

122-
if (ls->proxy_protocol) {
103+
if (ls.proxy_protocol) {
123104
mrb_raise(mrb, E_RUNTIME_ERROR, "\"proxy_protocol\" parameter is incompatible with \"udp\"");
124105
}
125106
}
126107

127-
als = cmcf->listen.elts;
128-
129-
#if (nginx_version > 1015009)
130108
for (n = 0; n < u.naddrs; n++) {
131-
ls[n] = ls[0];
132-
ls[n].sockaddr = u.addrs[n].sockaddr;
133-
ls[n].socklen = u.addrs[n].socklen;
134-
ls[n].addr_text = u.addrs[n].name;
135-
ls[n].wildcard = ngx_inet_wildcard(ls[n].sockaddr);
136-
137-
for (i = 0; i < cmcf->listen.nelts - u.naddrs + n; i++) {
138-
if (ls[n].type != als[i].type) {
139-
continue;
140-
}
141-
142-
if (ngx_cmp_sockaddr(als[i].sockaddr, als[i].socklen, ls[n].sockaddr, ls[n].socklen, 1) != NGX_OK) {
143-
continue;
144-
}
145-
146-
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "duplicate \"%V\" address and port pair", &ls[n].addr_text);
147-
mrb_raise(mrb, E_RUNTIME_ERROR, "duplicate address and port pair");
148-
}
149-
}
150-
#else
151-
for (i = 0; i < cmcf->listen.nelts - 1; i++) {
152-
if (ls->type != als[i].type) {
109+
for (i = 0; i < n; i++) {
110+
if (ngx_cmp_sockaddr(u.addrs[n].sockaddr, u.addrs[n].socklen, u.addrs[i].sockaddr, u.addrs[i].socklen, 1) ==
111+
NGX_OK) {
112+
goto next;
113+
}
114+
next:
153115
continue;
154116
}
155117

156-
if (ngx_cmp_sockaddr(&als[i].sockaddr.sockaddr, als[i].socklen, &ls->sockaddr.sockaddr, ls->socklen, 1) != NGX_OK) {
157-
continue;
158-
}
118+
ls.sockaddr = u.addrs[n].sockaddr;
119+
ls.socklen = u.addrs[n].socklen;
120+
ls.addr_text = u.addrs[n].name;
121+
ls.wildcard = ngx_inet_wildcard(ls.sockaddr);
159122

160-
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "duplicate \"%V\" address and port pair", &u.url);
161-
mrb_raise(mrb, E_RUNTIME_ERROR, "duplicate address and port pair");
123+
if (ngx_stream_add_listen(cf, cscf, &ls) != NGX_OK) {
124+
mrb_raise(mrb, E_RUNTIME_ERROR, "can't add strem listener");
125+
}
162126
}
163-
#endif
164127

165128
return mrb_true_value();
166129
}

0 commit comments

Comments
 (0)