466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
|
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];
#ifdef OF_WINDOWS
#if defined(OF_WINDOWS)
if (if_nametoindexPtr != NULL)
addrIn6->sin6_scope_id = if_nametoindexPtr([interface
cStringWithEncoding: [OFLocale encoding]]);
#else
#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
|
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
# ifdef OF_WINDOWS
char interface[IF_MAX_STRING_SIZE];
if (if_indextonamePtr != NULL && if_indextonamePtr(
addrIn6->sin6_scope_id, interface) != NULL)
#else
# else
char interface[IF_NAMESIZE];
if (if_indextoname(addrIn6->sin6_scope_id, interface) != NULL)
#endif
# endif
[string appendFormat: @"%%%s", interface];
else
[string appendFormat: @"%%%u", addrIn6->sin6_scope_id];
}
#endif
[string makeImmutable];
return string;
}
OFString *
|