341 if (isaCls == 0) {
342 initializeISA(env);
343 CHECK_NULL_RETURN(isaCls, NULL);
344 }
345
346 return (*env)->NewObject(env, isaCls, isaCtrID, ia, port);
347 }
348
349 /*
350 * Class: sun_nio_ch_sctp_SctpNet
351 * Method: getLocalAddresses0
352 * Signature: (I)[Ljava/net/SocketAddress;
353 */
354 JNIEXPORT jobjectArray JNICALL Java_sun_nio_ch_sctp_SctpNet_getLocalAddresses0
355 (JNIEnv *env, jclass klass, jint fd)
356 {
357 void *addr_buf, *laddr;
358 int i, addrCount;
359 jobjectArray isaa;
360
361 #ifdef __solaris__
362 if ((addrCount = nio_sctp_getladdrs(fd, 0, (void **)&addr_buf)) == -1) {
363 #else /* __linux__ */
364 if ((addrCount = nio_sctp_getladdrs(fd, 0, (struct sockaddr **)&addr_buf)) == -1) {
365 #endif
366 handleSocketError(env, errno);
367 return NULL;
368 }
369
370 if (addrCount < 1)
371 return NULL;
372
373 if (isaCls == 0) {
374 initializeISA(env);
375 CHECK_NULL_RETURN(isaCls, NULL);
376 }
377
378 isaa = (*env)->NewObjectArray(env, addrCount, isaCls, NULL);
379 if (isaa == NULL) {
380 nio_sctp_freeladdrs(addr_buf);
381 return NULL;
382 }
383
384 laddr = addr_buf;
385 for (i = 0; i < addrCount; i++) {
390 isa = (*env)->NewObject(env, isaCls, isaCtrID, ia, port);
391 if (isa == NULL)
392 break;
393 (*env)->SetObjectArrayElement(env, isaa, i, isa);
394
395 if (((struct sockaddr *)addr_buf)->sa_family == AF_INET)
396 addr_buf = ((struct sockaddr_in *)addr_buf) + 1;
397 else
398 addr_buf = ((struct sockaddr_in6 *)addr_buf) + 1;
399 }
400
401 nio_sctp_freeladdrs(laddr);
402 return isaa;
403 }
404
405 jobjectArray getRemoteAddresses(JNIEnv *env, jint fd, sctp_assoc_t id) {
406 void *addr_buf, *paddr;
407 int i, addrCount;
408 jobjectArray isaa;
409
410 #if defined(__solaris__)
411 if ((addrCount = nio_sctp_getpaddrs(fd, id, (void **)&addr_buf)) == -1) {
412 #else /* __linux__ */
413 if ((addrCount = nio_sctp_getpaddrs(fd, id, (struct sockaddr **)&addr_buf)) == -1) {
414 #endif
415 handleSocketError(env, errno);
416 return NULL;
417 }
418
419 if (addrCount < 1)
420 return NULL;
421
422 if (isaCls == 0) {
423 initializeISA(env);
424 CHECK_NULL_RETURN(isaCls, NULL);
425 }
426
427 isaa = (*env)->NewObjectArray(env, addrCount, isaCls, NULL);
428 if (isaa == NULL) {
429 nio_sctp_freepaddrs(addr_buf);
430 return NULL;
431 }
432
433 paddr = addr_buf;
434 for (i = 0; i < addrCount; i++) {
|
341 if (isaCls == 0) {
342 initializeISA(env);
343 CHECK_NULL_RETURN(isaCls, NULL);
344 }
345
346 return (*env)->NewObject(env, isaCls, isaCtrID, ia, port);
347 }
348
349 /*
350 * Class: sun_nio_ch_sctp_SctpNet
351 * Method: getLocalAddresses0
352 * Signature: (I)[Ljava/net/SocketAddress;
353 */
354 JNIEXPORT jobjectArray JNICALL Java_sun_nio_ch_sctp_SctpNet_getLocalAddresses0
355 (JNIEnv *env, jclass klass, jint fd)
356 {
357 void *addr_buf, *laddr;
358 int i, addrCount;
359 jobjectArray isaa;
360
361 if ((addrCount = nio_sctp_getladdrs(fd, 0, (struct sockaddr **)&addr_buf)) == -1) {
362 handleSocketError(env, errno);
363 return NULL;
364 }
365
366 if (addrCount < 1)
367 return NULL;
368
369 if (isaCls == 0) {
370 initializeISA(env);
371 CHECK_NULL_RETURN(isaCls, NULL);
372 }
373
374 isaa = (*env)->NewObjectArray(env, addrCount, isaCls, NULL);
375 if (isaa == NULL) {
376 nio_sctp_freeladdrs(addr_buf);
377 return NULL;
378 }
379
380 laddr = addr_buf;
381 for (i = 0; i < addrCount; i++) {
386 isa = (*env)->NewObject(env, isaCls, isaCtrID, ia, port);
387 if (isa == NULL)
388 break;
389 (*env)->SetObjectArrayElement(env, isaa, i, isa);
390
391 if (((struct sockaddr *)addr_buf)->sa_family == AF_INET)
392 addr_buf = ((struct sockaddr_in *)addr_buf) + 1;
393 else
394 addr_buf = ((struct sockaddr_in6 *)addr_buf) + 1;
395 }
396
397 nio_sctp_freeladdrs(laddr);
398 return isaa;
399 }
400
401 jobjectArray getRemoteAddresses(JNIEnv *env, jint fd, sctp_assoc_t id) {
402 void *addr_buf, *paddr;
403 int i, addrCount;
404 jobjectArray isaa;
405
406 if ((addrCount = nio_sctp_getpaddrs(fd, id, (struct sockaddr **)&addr_buf)) == -1) {
407 handleSocketError(env, errno);
408 return NULL;
409 }
410
411 if (addrCount < 1)
412 return NULL;
413
414 if (isaCls == 0) {
415 initializeISA(env);
416 CHECK_NULL_RETURN(isaCls, NULL);
417 }
418
419 isaa = (*env)->NewObjectArray(env, addrCount, isaCls, NULL);
420 if (isaa == NULL) {
421 nio_sctp_freepaddrs(addr_buf);
422 return NULL;
423 }
424
425 paddr = addr_buf;
426 for (i = 0; i < addrCount; i++) {
|