annotate src/core/ngx_unix_domain.c @ 196:8759b346e431 NGINX_0_3_45

nginx 0.3.45 *) Feature: the "ssl_verify_client", "ssl_verify_depth", and "ssl_client_certificate" directives. *) Change: the $request_method variable now returns the main request method. *) Change: the ° symbol codes were changed in koi-win conversion table. *) Feature: the euro É N symbols were added to koi-win conversion table. *) Bugfix: if nginx distributed the requests among several backends and some backend failed, then requests intended for this backend was directed to one live backend only instead of being distributed among the rest.
author Igor Sysoev <http://sysoev.ru>
date Sat, 06 May 2006 00:00:00 +0400
parents 146eff53ab60
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2 /*
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
3 * Copyright (C) Igor Sysoev
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
4 */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
5
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
6
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
7 #include <ngx_config.h>
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
8 #include <ngx_core.h>
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
9 #include <ngx_event.h>
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
10 #include <ngx_event_connect.h>
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
11
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
12
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
13 /* Solaris has predefined "#define sun 1" */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
14 #undef sun
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
15
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
16
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
17 ngx_peers_t *
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
18 ngx_unix_upstream_parse(ngx_conf_t *cf, ngx_unix_domain_upstream_t *u)
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
19 {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
20 size_t len;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
21 ngx_uint_t i;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
22 ngx_peers_t *peers;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
23 struct sockaddr_un *sun;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
24
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
25 len = u->url.len - 5;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
26
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
27 if (u->uri_part) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
28 for (i = 5; i < u->url.len; i++) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
29 if (u->url.data[i] == ':') {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
30 len = i - 5;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
31 u->uri.len = u->url.len - 5 - len - 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
32 u->uri.data = u->url.data + 5 + len + 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
33
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
34 break;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
35 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
36 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
37 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
38
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
39 if (len == 0) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
40 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
41 "the unix domain socket \"%V\" has no path",
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
42 &u->name);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
43 return NULL;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
44 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
45
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
46 if (len + 1 > sizeof(sun->sun_path)) {
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
47 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
48 "the unix domain socket path \"%V\" is too long",
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
49 &u->name);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
50 return NULL;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
51 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
52
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
53 /* MP: ngx_shared_palloc() */
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
54
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
55 peers = ngx_pcalloc(cf->pool, sizeof(ngx_peers_t));
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
56 if (peers == NULL) {
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
57 return NULL;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
58 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
59
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
60 sun = ngx_pcalloc(cf->pool, sizeof(struct sockaddr_un));
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 28
diff changeset
61 if (sun == NULL) {
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
62 return NULL;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
63 }
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
64
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
65 peers->number = 1;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
66
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
67 sun->sun_family = AF_UNIX;
66
818201e5a553 nginx 0.1.33
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
68 (void) ngx_cpystrn((u_char *) sun->sun_path, u->url.data + 5, len + 1);
28
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
69
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
70 peers->peer[0].sockaddr = (struct sockaddr *) sun;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
71 peers->peer[0].socklen = sizeof(struct sockaddr_un);
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
72
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
73 peers->peer[0].name.len = 5 + len;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
74 peers->peer[0].name.data = u->url.data;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
75
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
76 peers->peer[0].uri_separator = ":";
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
77
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
78 return peers;
7ca9bdc82b3f nginx 0.1.14
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
79 }