Mercurial > hg > nginx-quic
comparison src/event/ngx_event.c @ 4800:5ce5b3c81979 stable-1.2
Merge of r4764: debug_connection with a domain name change.
When "debug_connection" is configured with a domain name, only the first
resolved address was used. Now all addresses will be used.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 06 Aug 2012 17:13:20 +0000 |
parents | 29928279ec9f |
children | e1d11fb9a71f |
comparison
equal
deleted
inserted
replaced
4799:24f2b8495f7d | 4800:5ce5b3c81979 |
---|---|
1060 ngx_event_debug_connection(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) | 1060 ngx_event_debug_connection(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) |
1061 { | 1061 { |
1062 #if (NGX_DEBUG) | 1062 #if (NGX_DEBUG) |
1063 ngx_event_conf_t *ecf = conf; | 1063 ngx_event_conf_t *ecf = conf; |
1064 | 1064 |
1065 ngx_int_t rc; | 1065 ngx_int_t rc; |
1066 ngx_str_t *value; | 1066 ngx_str_t *value; |
1067 struct hostent *h; | 1067 ngx_url_t u; |
1068 ngx_cidr_t *cidr; | 1068 ngx_cidr_t c, *cidr; |
1069 ngx_uint_t i; | |
1070 struct sockaddr_in *sin; | |
1071 #if (NGX_HAVE_INET6) | |
1072 struct sockaddr_in6 *sin6; | |
1073 #endif | |
1069 | 1074 |
1070 value = cf->args->elts; | 1075 value = cf->args->elts; |
1071 | 1076 |
1072 cidr = ngx_array_push(&ecf->debug_connection); | 1077 #if (NGX_HAVE_UNIX_DOMAIN) |
1078 | |
1079 if (ngx_strcmp(value[1].data, "unix:") == 0) { | |
1080 cidr = ngx_array_push(&ecf->debug_connection); | |
1081 if (cidr == NULL) { | |
1082 return NGX_CONF_ERROR; | |
1083 } | |
1084 | |
1085 cidr->family = AF_UNIX; | |
1086 return NGX_CONF_OK; | |
1087 } | |
1088 | |
1089 #endif | |
1090 | |
1091 rc = ngx_ptocidr(&value[1], &c); | |
1092 | |
1093 if (rc != NGX_ERROR) { | |
1094 if (rc == NGX_DONE) { | |
1095 ngx_conf_log_error(NGX_LOG_WARN, cf, 0, | |
1096 "low address bits of %V are meaningless", | |
1097 &value[1]); | |
1098 } | |
1099 | |
1100 cidr = ngx_array_push(&ecf->debug_connection); | |
1101 if (cidr == NULL) { | |
1102 return NGX_CONF_ERROR; | |
1103 } | |
1104 | |
1105 *cidr = c; | |
1106 | |
1107 return NGX_CONF_OK; | |
1108 } | |
1109 | |
1110 ngx_memzero(&u, sizeof(ngx_url_t)); | |
1111 u.host = value[1]; | |
1112 | |
1113 if (ngx_inet_resolve_host(cf->pool, &u) != NGX_OK) { | |
1114 if (u.err) { | |
1115 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, | |
1116 "%s in debug_connection \"%V\"", | |
1117 u.err, &u.host); | |
1118 } | |
1119 | |
1120 return NGX_CONF_ERROR; | |
1121 } | |
1122 | |
1123 cidr = ngx_array_push_n(&ecf->debug_connection, u.naddrs); | |
1073 if (cidr == NULL) { | 1124 if (cidr == NULL) { |
1074 return NGX_CONF_ERROR; | 1125 return NGX_CONF_ERROR; |
1075 } | 1126 } |
1076 | 1127 |
1077 #if (NGX_HAVE_UNIX_DOMAIN) | 1128 ngx_memzero(cidr, u.naddrs * sizeof(ngx_cidr_t)); |
1078 | 1129 |
1079 if (ngx_strcmp(value[1].data, "unix:") == 0) { | 1130 for (i = 0; i < u.naddrs; i++) { |
1080 cidr->family = AF_UNIX; | 1131 cidr[i].family = u.addrs[i].sockaddr->sa_family; |
1081 return NGX_CONF_OK; | 1132 |
1082 } | 1133 switch (cidr[i].family) { |
1083 | 1134 |
1084 #endif | 1135 #if (NGX_HAVE_INET6) |
1085 | 1136 case AF_INET6: |
1086 rc = ngx_ptocidr(&value[1], cidr); | 1137 sin6 = (struct sockaddr_in6 *) u.addrs[i].sockaddr; |
1087 | 1138 cidr[i].u.in6.addr = sin6->sin6_addr; |
1088 if (rc == NGX_DONE) { | 1139 ngx_memset(cidr[i].u.in6.mask.s6_addr, 0xff, 16); |
1089 ngx_conf_log_error(NGX_LOG_WARN, cf, 0, | 1140 break; |
1090 "low address bits of %V are meaningless", &value[1]); | 1141 #endif |
1091 return NGX_CONF_OK; | 1142 |
1092 } | 1143 default: /* AF_INET */ |
1093 | 1144 sin = (struct sockaddr_in *) u.addrs[i].sockaddr; |
1094 if (rc == NGX_OK) { | 1145 cidr[i].u.in.addr = sin->sin_addr.s_addr; |
1095 return NGX_CONF_OK; | 1146 cidr[i].u.in.mask = 0xffffffff; |
1096 } | 1147 break; |
1097 | 1148 } |
1098 h = gethostbyname((char *) value[1].data); | 1149 } |
1099 | |
1100 if (h == NULL || h->h_addr_list[0] == NULL) { | |
1101 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, | |
1102 "host \"%s\" not found", value[1].data); | |
1103 return NGX_CONF_ERROR; | |
1104 } | |
1105 | |
1106 cidr->family = AF_INET; | |
1107 cidr->u.in.mask = 0xffffffff; | |
1108 cidr->u.in.addr = *(in_addr_t *)(h->h_addr_list[0]); | |
1109 | 1150 |
1110 #else | 1151 #else |
1111 | 1152 |
1112 ngx_conf_log_error(NGX_LOG_WARN, cf, 0, | 1153 ngx_conf_log_error(NGX_LOG_WARN, cf, 0, |
1113 "\"debug_connection\" is ignored, you need to rebuild " | 1154 "\"debug_connection\" is ignored, you need to rebuild " |