comparison src/stream/ngx_stream_core_module.c @ 8999:91ad1abfb285 quic

Merged with the default branch.
author Sergey Kandaurov <pluknet@nginx.com>
date Thu, 15 Dec 2022 19:40:44 +0400
parents 630ecd703805 4cc2bfeff46c
children af5adec171b4
comparison
equal deleted inserted replaced
8991:b87a0dbc1150 8999:91ad1abfb285
576 ngx_stream_core_srv_conf_t *cscf = conf; 576 ngx_stream_core_srv_conf_t *cscf = conf;
577 577
578 ngx_str_t *value, size; 578 ngx_str_t *value, size;
579 ngx_url_t u; 579 ngx_url_t u;
580 ngx_uint_t i, n, backlog; 580 ngx_uint_t i, n, backlog;
581 ngx_stream_listen_t *ls, *als; 581 ngx_stream_listen_t *ls, *als, *nls;
582 ngx_stream_core_main_conf_t *cmcf; 582 ngx_stream_core_main_conf_t *cmcf;
583 583
584 cscf->listen = 1; 584 cscf->listen = 1;
585 585
586 value = cf->args->elts; 586 value = cf->args->elts;
600 return NGX_CONF_ERROR; 600 return NGX_CONF_ERROR;
601 } 601 }
602 602
603 cmcf = ngx_stream_conf_get_module_main_conf(cf, ngx_stream_core_module); 603 cmcf = ngx_stream_conf_get_module_main_conf(cf, ngx_stream_core_module);
604 604
605 ls = ngx_array_push_n(&cmcf->listen, u.naddrs); 605 ls = ngx_array_push(&cmcf->listen);
606 if (ls == NULL) { 606 if (ls == NULL) {
607 return NGX_CONF_ERROR; 607 return NGX_CONF_ERROR;
608 } 608 }
609 609
610 ngx_memzero(ls, sizeof(ngx_stream_listen_t)); 610 ngx_memzero(ls, sizeof(ngx_stream_listen_t));
913 return "\"fastopen\" parameter is incompatible with \"udp\""; 913 return "\"fastopen\" parameter is incompatible with \"udp\"";
914 } 914 }
915 #endif 915 #endif
916 } 916 }
917 917
918 als = cmcf->listen.elts;
919
920 for (n = 0; n < u.naddrs; n++) { 918 for (n = 0; n < u.naddrs; n++) {
921 ls[n] = ls[0]; 919
922 920 for (i = 0; i < n; i++) {
923 ls[n].sockaddr = u.addrs[n].sockaddr; 921 if (ngx_cmp_sockaddr(u.addrs[n].sockaddr, u.addrs[n].socklen,
924 ls[n].socklen = u.addrs[n].socklen; 922 u.addrs[i].sockaddr, u.addrs[i].socklen, 0)
925 ls[n].addr_text = u.addrs[n].name; 923 == NGX_OK)
926 ls[n].wildcard = ngx_inet_wildcard(ls[n].sockaddr); 924 {
927 925 goto next;
928 for (i = 0; i < cmcf->listen.nelts - u.naddrs + n; i++) { 926 }
929 if (ls[n].type != als[i].type) { 927 }
928
929 if (n != 0) {
930 nls = ngx_array_push(&cmcf->listen);
931 if (nls == NULL) {
932 return NGX_CONF_ERROR;
933 }
934
935 *nls = *ls;
936
937 } else {
938 nls = ls;
939 }
940
941 nls->sockaddr = u.addrs[n].sockaddr;
942 nls->socklen = u.addrs[n].socklen;
943 nls->addr_text = u.addrs[n].name;
944 nls->wildcard = ngx_inet_wildcard(nls->sockaddr);
945
946 als = cmcf->listen.elts;
947
948 for (i = 0; i < cmcf->listen.nelts - 1; i++) {
949 if (nls->type != als[i].type) {
930 continue; 950 continue;
931 } 951 }
932 952
933 if (ngx_cmp_sockaddr(als[i].sockaddr, als[i].socklen, 953 if (ngx_cmp_sockaddr(als[i].sockaddr, als[i].socklen,
934 ls[n].sockaddr, ls[n].socklen, 1) 954 nls->sockaddr, nls->socklen, 1)
935 != NGX_OK) 955 != NGX_OK)
936 { 956 {
937 continue; 957 continue;
938 } 958 }
939 959
940 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, 960 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
941 "duplicate \"%V\" address and port pair", 961 "duplicate \"%V\" address and port pair",
942 &ls[n].addr_text); 962 &nls->addr_text);
943 return NGX_CONF_ERROR; 963 return NGX_CONF_ERROR;
944 } 964 }
965
966 next:
967 continue;
945 } 968 }
946 969
947 return NGX_CONF_OK; 970 return NGX_CONF_OK;
948 } 971 }
949 972