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;