466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
|
addrIn6->sin6_family = AF_INET6;
#else
addrIn6->sin6_family = AF_UNSPEC;
#endif
addrIn6->sin6_port = OFToBigEndian16(port);
if ((percent = [IPv6 rangeOfString: @"%"].location) != OFNotFound) {
OFString *interface = [IPv6 substringFromIndex: percent + 1];
IPv6 = [IPv6 substringToIndex: percent];
#ifdef OF_WINDOWS
if (if_nametoindexPtr != NULL)
addrIn6->sin6_scope_id = if_nametoindexPtr([interface
cStringWithEncoding: [OFLocale encoding]]);
#else
addrIn6->sin6_scope_id = if_nametoindex(
[interface cStringWithEncoding: [OFLocale encoding]]);
#endif
}
doubleColon = [IPv6 rangeOfString: @"::"].location;
if (doubleColon != OFNotFound) {
|
>
>
|
|
|
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
|
addrIn6->sin6_family = AF_INET6;
#else
addrIn6->sin6_family = AF_UNSPEC;
#endif
addrIn6->sin6_port = OFToBigEndian16(port);
if ((percent = [IPv6 rangeOfString: @"%"].location) != OFNotFound) {
#if defined(HAVE_IF_NAMETOINDEX) || defined(OF_WINDOWS)
OFString *interface = [IPv6 substringFromIndex: percent + 1];
#endif
IPv6 = [IPv6 substringToIndex: percent];
#if defined(OF_WINDOWS)
if (if_nametoindexPtr != NULL)
addrIn6->sin6_scope_id = if_nametoindexPtr([interface
cStringWithEncoding: [OFLocale encoding]]);
#elif defined(HAVE_IF_NAMETOINDEX)
addrIn6->sin6_scope_id = if_nametoindex(
[interface cStringWithEncoding: [OFLocale encoding]]);
#endif
}
doubleColon = [IPv6 rangeOfString: @"::"].location;
if (doubleColon != OFNotFound) {
|
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
|
(first ? @"%x" : @":%x"),
(addrIn6->sin6_addr.s6_addr[i] << 8) |
addrIn6->sin6_addr.s6_addr[i + 1]];
first = false;
}
}
if (addrIn6->sin6_scope_id != 0) {
#ifdef OF_WINDOWS
char interface[IF_MAX_STRING_SIZE];
if (if_indextonamePtr != NULL && if_indextonamePtr(
addrIn6->sin6_scope_id, interface) != NULL)
#else
char interface[IF_NAMESIZE];
if (if_indextoname(addrIn6->sin6_scope_id, interface) != NULL)
#endif
[string appendFormat: @"%%%s", interface];
else
[string appendFormat: @"%%%u", addrIn6->sin6_scope_id];
}
[string makeImmutable];
return string;
}
OFString *
|
>
|
|
|
>
|
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
|
(first ? @"%x" : @":%x"),
(addrIn6->sin6_addr.s6_addr[i] << 8) |
addrIn6->sin6_addr.s6_addr[i + 1]];
first = false;
}
}
#if defined(HAVE_IF_INDEXTONAME) || defined(OF_WINDOWS)
if (addrIn6->sin6_scope_id != 0) {
# ifdef OF_WINDOWS
char interface[IF_MAX_STRING_SIZE];
if (if_indextonamePtr != NULL && if_indextonamePtr(
addrIn6->sin6_scope_id, interface) != NULL)
# else
char interface[IF_NAMESIZE];
if (if_indextoname(addrIn6->sin6_scope_id, interface) != NULL)
# endif
[string appendFormat: @"%%%s", interface];
else
[string appendFormat: @"%%%u", addrIn6->sin6_scope_id];
}
#endif
[string makeImmutable];
return string;
}
OFString *
|