Mercurial > hg > nginx
comparison src/core/ngx_inet.c @ 291:117ccc7c4055
nginx-0.0.3-2004-03-16-16:35:20 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 16 Mar 2004 13:35:20 +0000 |
parents | 87e73f067470 |
children | 0bf903191ceb |
comparison
equal
deleted
inserted
replaced
290:87e73f067470 | 291:117ccc7c4055 |
---|---|
1 | 1 |
2 #include <ngx_config.h> | 2 #include <ngx_config.h> |
3 #include <ngx_core.h> | 3 #include <ngx_core.h> |
4 | |
5 | |
6 ngx_inline static size_t ngx_sprint_uchar(u_char *text, u_char c, size_t len) | |
7 { | |
8 size_t n; | |
9 ngx_uint_t c1, c2; | |
10 | |
11 n = 0; | |
12 | |
13 if (len == n) { | |
14 return n; | |
15 } | |
16 | |
17 c1 = c / 100; | |
18 | |
19 if (c1) { | |
20 *text++ = (u_char) (c1 + '0'); | |
21 n++; | |
22 | |
23 if (len == n) { | |
24 return n; | |
25 } | |
26 } | |
27 | |
28 c2 = (c % 100) / 10; | |
29 | |
30 if (c1 || c2) { | |
31 *text++ = (u_char) (c2 + '0'); | |
32 n++; | |
33 | |
34 if (len == n) { | |
35 return n; | |
36 } | |
37 } | |
38 | |
39 c2 = c % 10; | |
40 | |
41 *text++ = (u_char) (c2 + '0'); | |
42 n++; | |
43 | |
44 return n; | |
45 } | |
4 | 46 |
5 | 47 |
6 /* AF_INET only */ | 48 /* AF_INET only */ |
7 | 49 |
8 size_t ngx_sock_ntop(int family, struct sockaddr *addr, u_char *text, | 50 size_t ngx_sock_ntop(int family, struct sockaddr *addr, u_char *text, |
9 size_t len) | 51 size_t len) |
10 { | 52 { |
11 u_char *p; | 53 u_char *p; |
54 size_t n; | |
55 ngx_uint_t i; | |
12 struct sockaddr_in *addr_in; | 56 struct sockaddr_in *addr_in; |
57 | |
58 if (len == 0) { | |
59 return 0; | |
60 } | |
13 | 61 |
14 if (family != AF_INET) { | 62 if (family != AF_INET) { |
15 return 0; | 63 return 0; |
16 } | 64 } |
17 | 65 |
18 addr_in = (struct sockaddr_in *) addr; | 66 addr_in = (struct sockaddr_in *) addr; |
19 p = (u_char *) &addr_in->sin_addr; | 67 p = (u_char *) &addr_in->sin_addr; |
20 | 68 |
69 if (len > INET_ADDRSTRLEN) { | |
70 len = INET_ADDRSTRLEN; | |
71 } | |
72 | |
73 n = ngx_sprint_uchar(text, p[0], len); | |
74 | |
75 i = 1; | |
76 | |
77 do { | |
78 if (len == n) { | |
79 text[n - 1] = '\0'; | |
80 return n; | |
81 } | |
82 | |
83 text[n++] = '.'; | |
84 | |
85 if (len == n) { | |
86 text[n - 1] = '\0'; | |
87 return n; | |
88 } | |
89 | |
90 n += ngx_sprint_uchar(&text[n], p[i++], len - n); | |
91 | |
92 } while (i < 4); | |
93 | |
94 if (len == n) { | |
95 text[n] = '\0'; | |
96 return n; | |
97 } | |
98 | |
99 text[n] = '\0'; | |
100 | |
101 return n; | |
102 | |
103 #if 0 | |
21 return ngx_snprintf((char *) text, | 104 return ngx_snprintf((char *) text, |
22 len > INET_ADDRSTRLEN ? INET_ADDRSTRLEN : len, | 105 len > INET_ADDRSTRLEN ? INET_ADDRSTRLEN : len, |
23 "%u.%u.%u.%u", p[0], p[1], p[2], p[3]); | 106 "%u.%u.%u.%u", p[0], p[1], p[2], p[3]); |
107 #endif | |
24 } | 108 } |
25 | 109 |
26 | 110 |
27 size_t ngx_inet_ntop(int family, u_char *addr, u_char *text, size_t len) | 111 size_t ngx_inet_ntop(int family, void *addr, u_char *text, size_t len) |
28 { | 112 { |
113 u_char *p; | |
114 size_t n; | |
115 ngx_uint_t i; | |
116 | |
117 if (len == 0) { | |
118 return 0; | |
119 } | |
120 | |
29 if (family != AF_INET) { | 121 if (family != AF_INET) { |
30 return 0; | 122 return 0; |
31 } | 123 } |
32 | 124 |
125 p = (u_char *) addr; | |
126 | |
127 if (len > INET_ADDRSTRLEN) { | |
128 len = INET_ADDRSTRLEN; | |
129 } | |
130 | |
131 n = ngx_sprint_uchar(text, p[0], len); | |
132 | |
133 i = 1; | |
134 | |
135 do { | |
136 if (len == n) { | |
137 text[n - 1] = '\0'; | |
138 return n; | |
139 } | |
140 | |
141 text[n++] = '.'; | |
142 | |
143 if (len == n) { | |
144 text[n - 1] = '\0'; | |
145 return n; | |
146 } | |
147 | |
148 n += ngx_sprint_uchar(&text[n], p[i++], len - n); | |
149 | |
150 } while (i < 4); | |
151 | |
152 if (len == n) { | |
153 text[n] = '\0'; | |
154 return n; | |
155 } | |
156 | |
157 text[n] = '\0'; | |
158 | |
159 return n; | |
160 | |
161 #if 0 | |
33 return ngx_snprintf((char *) text, | 162 return ngx_snprintf((char *) text, |
34 len > INET_ADDRSTRLEN ? INET_ADDRSTRLEN : len, | 163 len > INET_ADDRSTRLEN ? INET_ADDRSTRLEN : len, |
35 "%u.%u.%u.%u", addr[0], addr[1], addr[2], addr[3]); | 164 "%u.%u.%u.%u", p[0], p[1], p[2], p[3]); |
165 #endif | |
36 } | 166 } |