Mercurial > hg > nginx
comparison src/mail/ngx_mail_core_module.c @ 6171:f61049c80458
Mail: embed ngx_mail_listen_t into ngx_mail_conf_addr_t.
author | Ruslan Ermilov <ru@nginx.com> |
---|---|
date | Mon, 08 Jun 2015 23:11:58 +0300 |
parents | bf1655ae9a1c |
children | 1729d8d3eb3a |
comparison
equal
deleted
inserted
replaced
6170:c13091e6292c | 6171:f61049c80458 |
---|---|
323 | 323 |
324 ls = cmcf->listen.elts; | 324 ls = cmcf->listen.elts; |
325 | 325 |
326 for (i = 0; i < cmcf->listen.nelts; i++) { | 326 for (i = 0; i < cmcf->listen.nelts; i++) { |
327 | 327 |
328 sa = (struct sockaddr *) ls[i].sockaddr; | 328 sa = &ls[i].u.sockaddr; |
329 | 329 |
330 if (sa->sa_family != u.family) { | 330 if (sa->sa_family != u.family) { |
331 continue; | 331 continue; |
332 } | 332 } |
333 | 333 |
335 | 335 |
336 #if (NGX_HAVE_INET6) | 336 #if (NGX_HAVE_INET6) |
337 case AF_INET6: | 337 case AF_INET6: |
338 off = offsetof(struct sockaddr_in6, sin6_addr); | 338 off = offsetof(struct sockaddr_in6, sin6_addr); |
339 len = 16; | 339 len = 16; |
340 sin6 = (struct sockaddr_in6 *) sa; | 340 sin6 = &ls[i].u.sockaddr_in6; |
341 port = ntohs(sin6->sin6_port); | 341 port = ntohs(sin6->sin6_port); |
342 break; | 342 break; |
343 #endif | 343 #endif |
344 | 344 |
345 #if (NGX_HAVE_UNIX_DOMAIN) | 345 #if (NGX_HAVE_UNIX_DOMAIN) |
351 #endif | 351 #endif |
352 | 352 |
353 default: /* AF_INET */ | 353 default: /* AF_INET */ |
354 off = offsetof(struct sockaddr_in, sin_addr); | 354 off = offsetof(struct sockaddr_in, sin_addr); |
355 len = 4; | 355 len = 4; |
356 sin = (struct sockaddr_in *) sa; | 356 sin = &ls[i].u.sockaddr_in; |
357 port = ntohs(sin->sin_port); | 357 port = ntohs(sin->sin_port); |
358 break; | 358 break; |
359 } | 359 } |
360 | 360 |
361 if (ngx_memcmp(ls[i].sockaddr + off, u.sockaddr + off, len) != 0) { | 361 if (ngx_memcmp(ls[i].u.sockaddr_data + off, u.sockaddr + off, len) |
362 != 0) | |
363 { | |
362 continue; | 364 continue; |
363 } | 365 } |
364 | 366 |
365 if (port != u.port) { | 367 if (port != u.port) { |
366 continue; | 368 continue; |
376 return NGX_CONF_ERROR; | 378 return NGX_CONF_ERROR; |
377 } | 379 } |
378 | 380 |
379 ngx_memzero(ls, sizeof(ngx_mail_listen_t)); | 381 ngx_memzero(ls, sizeof(ngx_mail_listen_t)); |
380 | 382 |
381 ngx_memcpy(ls->sockaddr, u.sockaddr, u.socklen); | 383 ngx_memcpy(&ls->u.sockaddr, u.sockaddr, u.socklen); |
382 | 384 |
383 ls->socklen = u.socklen; | 385 ls->socklen = u.socklen; |
384 ls->wildcard = u.wildcard; | 386 ls->wildcard = u.wildcard; |
385 ls->ctx = cf->ctx; | 387 ls->ctx = cf->ctx; |
386 | 388 |
419 if (ngx_strncmp(value[i].data, "ipv6only=o", 10) == 0) { | 421 if (ngx_strncmp(value[i].data, "ipv6only=o", 10) == 0) { |
420 #if (NGX_HAVE_INET6 && defined IPV6_V6ONLY) | 422 #if (NGX_HAVE_INET6 && defined IPV6_V6ONLY) |
421 struct sockaddr *sa; | 423 struct sockaddr *sa; |
422 u_char buf[NGX_SOCKADDR_STRLEN]; | 424 u_char buf[NGX_SOCKADDR_STRLEN]; |
423 | 425 |
424 sa = (struct sockaddr *) ls->sockaddr; | 426 sa = &ls->u.sockaddr; |
425 | 427 |
426 if (sa->sa_family == AF_INET6) { | 428 if (sa->sa_family == AF_INET6) { |
427 | 429 |
428 if (ngx_strcmp(&value[i].data[10], "n") == 0) { | 430 if (ngx_strcmp(&value[i].data[10], "n") == 0) { |
429 ls->ipv6only = 1; | 431 ls->ipv6only = 1; |