Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Side by Side Diff: c/info.c

Issue 2842333002: Updated netty-tcnative to version 2.0.0.Final (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « c/file.c ('k') | c/jnilib.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /* Licensed to the Apache Software Foundation (ASF) under one or more
2 * contributor license agreements. See the NOTICE file distributed with
3 * this work for additional information regarding copyright ownership.
4 * The ASF licenses this file to You under the Apache License, Version 2.0
5 * (the "License"); you may not use this file except in compliance with
6 * the License. You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 /*
18 *
19 * @author Mladen Turk
20 * @version $Id: info.c 1442587 2013-02-05 13:49:48Z rjung $
21 */
22
23 #include "tcn.h"
24 #include "apr_file_io.h"
25
26 #define DECLARE_FINFO_FIELD(name) static jfieldID _fid##name = NULL
27 #define FINFO_FIELD(name) _fid##name
28
29 #define GET_FINFO_I(N) \
30 _fid##N = (*e)->GetFieldID(e, finfo, #N, "I"); \
31 if (_fid##N == NULL) { \
32 (*e)->ExceptionClear(e); \
33 goto cleanup; \
34 } else (void)(0)
35
36 #define GET_FINFO_J(N) \
37 _fid##N = (*e)->GetFieldID(e, finfo, #N, "J"); \
38 if (_fid##N == NULL) { \
39 (*e)->ExceptionClear(e); \
40 goto cleanup; \
41 } else (void)(0)
42
43 #define GET_FINFO_S(N) \
44 _fid##N = (*e)->GetFieldID(e, finfo, #N, \
45 "Ljava/lang/String;"); \
46 if (_fid##N == NULL) { \
47 (*e)->ExceptionClear(e); \
48 goto cleanup; \
49 } else (void)(0)
50
51 #define SET_FINFO_I(N, V) \
52 (*e)->SetIntField(e, obj, _fid##N, (jint)(V))
53
54 #define SET_FINFO_J(N, V) \
55 (*e)->SetLongField(e, obj, _fid##N, (jlong)(V))
56
57 #define SET_FINFO_S(N, V) \
58 (*e)->SetObjectField(e, obj, _fid##N, \
59 (V) ? AJP_TO_JSTRING((V)) : NULL)
60
61
62 #define DECLARE_AINFO_FIELD(name) static jfieldID _aid##name = NULL
63 #define AINFO_FIELD(name) _aid##name
64
65 #define GET_AINFO_I(N) \
66 _aid##N = (*e)->GetFieldID(e, ainfo, #N, "I"); \
67 if (_aid##N == NULL) { \
68 (*e)->ExceptionClear(e); \
69 goto cleanup; \
70 } else (void)(0)
71
72 #define GET_AINFO_J(N) \
73 _aid##N = (*e)->GetFieldID(e, ainfo, #N, "J"); \
74 if (_aid##N == NULL) { \
75 (*e)->ExceptionClear(e); \
76 goto cleanup; \
77 } else (void)(0)
78
79 #define GET_AINFO_S(N) \
80 _aid##N = (*e)->GetFieldID(e, ainfo, #N, \
81 "Ljava/lang/String;"); \
82 if (_aid##N == NULL) { \
83 (*e)->ExceptionClear(e); \
84 goto cleanup; \
85 } else (void)(0)
86
87 #define SET_AINFO_I(N, V) \
88 (*e)->SetIntField(e, obj, _aid##N, (jint)(V))
89
90 #define SET_AINFO_J(N, V) \
91 (*e)->SetLongField(e, obj, _aid##N, (jlong)(V))
92
93 #define SET_AINFO_S(N, V) \
94 (*e)->SetObjectField(e, obj, _aid##N, \
95 (V) ? AJP_TO_JSTRING((V)) : NULL)
96
97
98 DECLARE_FINFO_FIELD(pool);
99 DECLARE_FINFO_FIELD(valid);
100 DECLARE_FINFO_FIELD(protection);
101 DECLARE_FINFO_FIELD(filetype);
102 DECLARE_FINFO_FIELD(user);
103 DECLARE_FINFO_FIELD(group);
104 DECLARE_FINFO_FIELD(inode);
105 DECLARE_FINFO_FIELD(device);
106 DECLARE_FINFO_FIELD(nlink);
107 DECLARE_FINFO_FIELD(size);
108 DECLARE_FINFO_FIELD(csize);
109 DECLARE_FINFO_FIELD(atime);
110 DECLARE_FINFO_FIELD(mtime);
111 DECLARE_FINFO_FIELD(ctime);
112 DECLARE_FINFO_FIELD(fname);
113 DECLARE_FINFO_FIELD(name);
114 DECLARE_FINFO_FIELD(filehand);
115
116 DECLARE_AINFO_FIELD(pool);
117 DECLARE_AINFO_FIELD(hostname);
118 DECLARE_AINFO_FIELD(servname);
119 DECLARE_AINFO_FIELD(port);
120 DECLARE_AINFO_FIELD(family);
121 DECLARE_AINFO_FIELD(next);
122
123 static int finfo_class_initialized = 0;
124 static int ainfo_class_initialized = 0;
125 static jmethodID finfo_class_init = NULL;
126 static jmethodID ainfo_class_init = NULL;
127 static jclass finfo_class = NULL;
128 static jclass ainfo_class = NULL;
129
130 apr_status_t tcn_load_finfo_class(JNIEnv *e, jclass finfo)
131 {
132 GET_FINFO_J(pool);
133 GET_FINFO_I(valid);
134 GET_FINFO_I(protection);
135 GET_FINFO_I(filetype);
136 GET_FINFO_I(user);
137 GET_FINFO_I(group);
138 GET_FINFO_I(inode);
139 GET_FINFO_I(device);
140 GET_FINFO_I(nlink);
141 GET_FINFO_J(size);
142 GET_FINFO_J(csize);
143 GET_FINFO_J(atime);
144 GET_FINFO_J(mtime);
145 GET_FINFO_J(ctime);
146 GET_FINFO_S(fname);
147 GET_FINFO_S(name);
148 GET_FINFO_J(filehand);
149
150 finfo_class_init = (*e)->GetMethodID(e, finfo,
151 "<init>", "()V");
152 if (finfo_class_init == NULL)
153 goto cleanup;
154 finfo_class_initialized = 1;
155 finfo_class = finfo;
156 cleanup:
157 return APR_SUCCESS;
158 }
159
160 apr_status_t tcn_load_ainfo_class(JNIEnv *e, jclass ainfo)
161 {
162 GET_AINFO_J(pool);
163 GET_AINFO_S(hostname);
164 GET_AINFO_S(servname);
165 GET_AINFO_I(port);
166 GET_AINFO_I(family);
167 GET_AINFO_J(next);
168 ainfo_class_init = (*e)->GetMethodID(e, ainfo,
169 "<init>", "()V");
170
171 if (ainfo_class_init == NULL)
172 goto cleanup;
173 ainfo_class_initialized = 1;
174 ainfo_class = ainfo;
175 cleanup:
176 return APR_SUCCESS;
177 }
178
179 static void fill_finfo(JNIEnv *e, jobject obj, apr_finfo_t *info)
180 {
181
182 SET_FINFO_J(pool, P2J(info->pool));
183 SET_FINFO_I(valid, info->valid);
184 SET_FINFO_I(protection, info->protection);
185 SET_FINFO_I(filetype, info->filetype);
186 SET_FINFO_I(user, ((jlong)info->user));
187 SET_FINFO_I(group, ((jlong)info->group));
188 SET_FINFO_I(inode, info->inode);
189 SET_FINFO_I(device, info->device);
190 SET_FINFO_I(nlink, info->nlink);
191 SET_FINFO_J(size, info->size);
192 SET_FINFO_J(csize, info->csize);
193 SET_FINFO_J(atime, info->atime);
194 SET_FINFO_J(mtime, info->mtime);
195 SET_FINFO_J(ctime, info->ctime);
196 SET_FINFO_S(fname, info->fname);
197 SET_FINFO_S(name, info->name);
198 SET_FINFO_J(filehand, P2J(info->filehand));
199 }
200
201 static void fill_ainfo(JNIEnv *e, jobject obj, apr_sockaddr_t *info)
202 {
203 apr_int32_t f;
204 if (info->family == APR_UNSPEC) f = 0;
205 else if (info->family == APR_INET) f = 1;
206 else if (info->family == APR_INET6) f = 2;
207 else f = info->family;
208
209 SET_AINFO_J(pool, P2J(info->pool));
210 SET_AINFO_S(hostname, info->hostname);
211 SET_AINFO_S(servname, info->servname);
212 SET_AINFO_I(port, info->port);
213 SET_AINFO_I(family, f);
214 SET_AINFO_J(next, P2J(info->next));
215
216 }
217
218 TCN_IMPLEMENT_CALL(jint, File, stat)(TCN_STDARGS, jobject finfo,
219 jstring fname, jint wanted,
220 jlong pool)
221 {
222 apr_pool_t *p = J2P(pool, apr_pool_t *);
223 TCN_ALLOC_CSTRING(fname);
224 apr_status_t rv;
225 apr_finfo_t info;
226
227 UNREFERENCED(o);
228
229 if ((rv = apr_stat(&info, J2S(fname), wanted, p)) == APR_SUCCESS) {
230 jobject io = (*e)->NewLocalRef(e, finfo);
231 fill_finfo(e, io, &info);
232 (*e)->DeleteLocalRef(e, io);
233 }
234 TCN_FREE_CSTRING(fname);
235 return (jint)rv;
236 }
237
238 TCN_IMPLEMENT_CALL(jobject, File, getStat)(TCN_STDARGS, jstring fname,
239 jint wanted, jlong pool)
240 {
241 apr_pool_t *p = J2P(pool, apr_pool_t *);
242 TCN_ALLOC_CSTRING(fname);
243 apr_status_t rv;
244 apr_finfo_t info;
245 jobject finfo = NULL;
246
247 UNREFERENCED(o);
248
249 if ((rv = apr_stat(&info, J2S(fname), wanted, p)) == APR_SUCCESS) {
250 finfo = (*e)->NewObject(e, finfo_class, finfo_class_init);
251 if (finfo == NULL)
252 goto cleanup;
253 fill_finfo(e, finfo, &info);
254 }
255 else
256 tcn_ThrowAPRException(e, rv);
257 cleanup:
258 TCN_FREE_CSTRING(fname);
259 return finfo;
260 }
261
262 TCN_IMPLEMENT_CALL(jint, File, infoGet)(TCN_STDARGS, jobject finfo,
263 jint wanted, jlong file)
264 {
265 apr_file_t *f = J2P(file, apr_file_t *);
266 apr_status_t rv;
267 apr_finfo_t info;
268
269 UNREFERENCED(o);
270
271 if ((rv = apr_file_info_get(&info, wanted, f)) == APR_SUCCESS) {
272 jobject io = (*e)->NewLocalRef(e, finfo);
273 fill_finfo(e, io, &info);
274 (*e)->DeleteLocalRef(e, io);
275 }
276 return (jint)rv;
277 }
278
279 TCN_IMPLEMENT_CALL(jobject, File, getInfo)(TCN_STDARGS, jint wanted, jlong file)
280 {
281 apr_file_t *f = J2P(file, apr_file_t *);
282 apr_status_t rv;
283 apr_finfo_t info;
284
285 UNREFERENCED(o);
286
287 if ((rv = apr_file_info_get(&info, wanted, f)) == APR_SUCCESS) {
288 jobject finfo;
289 finfo = (*e)->NewObject(e, finfo_class, finfo_class_init);
290 if (finfo == NULL)
291 return NULL;
292 fill_finfo(e, finfo, &info);
293 return finfo;
294 }
295 else
296 tcn_ThrowAPRException(e, rv);
297 return NULL;
298 }
299
300 TCN_IMPLEMENT_CALL(jint, Directory, read)(TCN_STDARGS, jobject finfo,
301 jint wanted, jlong dir)
302 {
303 apr_dir_t *d = J2P(dir, apr_dir_t *);
304 apr_status_t rv;
305 apr_finfo_t info;
306
307 UNREFERENCED(o);
308
309 if ((rv = apr_dir_read(&info, wanted, d)) == APR_SUCCESS) {
310 jobject io = (*e)->NewLocalRef(e, finfo);
311 fill_finfo(e, io, &info);
312 if ((*e)->ExceptionCheck(e)) {
313 (*e)->ExceptionClear(e);
314 }
315 else
316 rv = APR_EGENERAL;
317 (*e)->DeleteLocalRef(e, io);
318 }
319 return (jint)rv;
320 }
321
322 TCN_IMPLEMENT_CALL(jboolean, Address, fill)(TCN_STDARGS,
323 jobject addr, jlong info)
324 {
325 apr_sockaddr_t *i = J2P(info, apr_sockaddr_t *);
326 jobject ao;
327 jboolean rv = JNI_FALSE;
328
329 UNREFERENCED(o);
330
331 if (i) {
332 ao = (*e)->NewLocalRef(e, addr);
333 fill_ainfo(e, ao, i);
334 if ((*e)->ExceptionCheck(e)) {
335 (*e)->ExceptionClear(e);
336 }
337 else
338 rv = JNI_TRUE;
339 (*e)->DeleteLocalRef(e, ao);
340 }
341 return rv;
342 }
343
344 TCN_IMPLEMENT_CALL(jobject, Address, getInfo)(TCN_STDARGS, jlong info)
345 {
346 apr_sockaddr_t *i = J2P(info, apr_sockaddr_t *);
347 jobject sockaddrObj = NULL;
348
349 UNREFERENCED(o);
350
351 /* Create the APR Error object */
352 sockaddrObj = (*e)->NewObject(e, ainfo_class, ainfo_class_init);
353 if (sockaddrObj == NULL)
354 return NULL;
355 fill_ainfo(e, sockaddrObj, i);
356 return sockaddrObj;
357 }
OLDNEW
« no previous file with comments | « c/file.c ('k') | c/jnilib.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698