Apple App Store nécessite que les applications fonctionnent sur les réseaux IPv6 uniquement. Comment faire fonctionner IdTelnet sur de tels réseaux?Utilisation d'Indy IdTelnet sur un réseau IPv6 uniquement
2
A
Répondre
4
TIdTelnet
a une propriété IPVersion
, mais il est déclaré protected
et n'est donc pas accessible directement par le code utilisateur. Pour régler le IPVersion
, vous pouvez déclarer une classe de hack, par exemple:
uses
.., IdStack, IdGlobal, ..
type
TIdTelnetHack = class(TIdTelnet)
published
property IPVersion; //expose protected property
end;
procedure TForm1.TelnetConnect(const aHost:String);
var
aIPVersion: TIdIPVersion;
begin
if not IdTelnet1.Connected then
begin //not connected. go connect
// check if ipv6 or ipv4 network, and support both,
try
GStack.ResolveHost(aHost, Id_IPv6);
aIPVersion := Id_IPV6;
except
GStack.ResolveHost(aHost, Id_IPv4);
aIPVersion := Id_IPV4;
end;
IdTelnet1.Host := aHost;
IdTelnet1.Port := 8090;
TIdTelnetHack(IdTelnet1).IPVersion := aIPVersion; //set to IPv4 or IPv6
IdTelnet1.Connect;
end;
end;
Pour tester votre application sur un réseau IPv6, définissez votre Mac comme un point d'accès IPv6, comme expliqué ici:
Vous n'avez pas besoin de publier explicitement la propriété 'IPVersion'. Une classe descendante hérite des membres 'protected', et l'unité déclarante de la classe a un accès implicite aux membres' protected' de la classe. Donc, 'tapez TIdTelnetHack = class (TIdTelnet);' suffira dans votre exemple. –
Assurez-vous de voter pour [ce ticket] (https://github.com/IndySockets/Indy/issues/164) dans le suivi des problèmes d'Indy. –