fix(apk): verdict honnete de la verification, et plus de connexion reutilisee
"unchanged (HTTP 0)" confondait "rien n'a change" et "je n'ai pas pu demander". Et quand le Wi-Fi se reconnecte avec une autre IP, la pile Java garde des sockets sur l'interface morte : mesure faite, curl atteint les deux adresses de GitHub depuis le shell du telephone pendant que l'application expire sur l'ancienne. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -332,6 +332,7 @@ begin
|
||||
LHttp.ResponseTimeout := FTimeoutMs;
|
||||
LHttp.HandleRedirects := False;
|
||||
LHttp.UserAgent := 'PMServer'; // GitHub refuse toute requete sans
|
||||
LHttp.CustomHeaders['Connection'] := 'close'; // voir Fetch
|
||||
LHttp.CustomHeaders['Authorization'] := 'token ' + FToken;
|
||||
LHttp.CustomHeaders['Content-Type'] := 'application/json';
|
||||
// Deux essais, meme raison qu'a la lecture : un SYN perdu ne dit rien
|
||||
@@ -441,6 +442,11 @@ begin
|
||||
LHttp.ConnectionTimeout := FTimeoutMs;
|
||||
LHttp.ResponseTimeout := FTimeoutMs;
|
||||
LHttp.UserAgent := 'PMServer'; // GitHub refuse toute requete sans
|
||||
// PAS DE CONNEXION REUTILISEE. Le telephone change de reseau (Wi-Fi qui
|
||||
// se reconnecte, IP qui change) et la pile Java garde des sockets ouverts
|
||||
// sur l'interface morte : la requete suivante attend son delai entier
|
||||
// pour rien. Une poignee de main de plus coute bien moins que cela.
|
||||
LHttp.CustomHeaders['Connection'] := 'close';
|
||||
// Pas de redirection suivie : une redirection vers un autre hote nous
|
||||
// ferait envoyer le jeton ailleurs.
|
||||
LHttp.HandleRedirects := False;
|
||||
|
||||
+40
-6
@@ -3987,10 +3987,26 @@ end;
|
||||
|
||||
procedure TForm8.ProbeRemote;
|
||||
begin
|
||||
if FBusy or (FUrl = '') or (FToken = '') then Exit;
|
||||
// JOURNALISE MEME QUAND ELLE NE FAIT RIEN. Une verification muette ne se
|
||||
// distingue pas d'une verification absente : on ne savait pas si le depot
|
||||
// avait ete interroge, seulement qu'il n'avait rien dit.
|
||||
if FBusy or (FUrl = '') or (FToken = '') then
|
||||
begin
|
||||
Log('check: skipped (busy or no repository configured)');
|
||||
Exit;
|
||||
end;
|
||||
// Un coffre ne ici n'a pas de depot a interroger.
|
||||
if HasLocalContainer then Exit;
|
||||
if FETag = '' then Exit;
|
||||
if HasLocalContainer then
|
||||
begin
|
||||
Log('check: skipped (local vault, no repository)');
|
||||
Exit;
|
||||
end;
|
||||
if FETag = '' then
|
||||
begin
|
||||
Log('check: skipped (no fingerprint to compare)');
|
||||
Exit;
|
||||
end;
|
||||
Log('check: asking the repository if it moved');
|
||||
|
||||
TThread.CreateAnonymousThread(
|
||||
procedure
|
||||
@@ -4006,11 +4022,30 @@ begin
|
||||
LGet := LClient.Fetch(FETag);
|
||||
LAhead := (LGet.Status = ssOK) and (LGet.ETag <> '')
|
||||
and not SameText(LGet.ETag.Trim, FETag.Trim);
|
||||
// TROIS VERDICTS, PAS DEUX. "Rien n'a change" et "je n'ai pas pu
|
||||
// demander" se ressemblent - le temoin reste eteint dans les deux
|
||||
// cas - et le journal les confondait sous "unchanged (HTTP 0)".
|
||||
TThread.Queue(nil,
|
||||
procedure
|
||||
begin
|
||||
if LAhead then
|
||||
Log(' it moved - sync to bring it in')
|
||||
else if LGet.Status in [ssOK, ssNotModified] then
|
||||
Log(Format(' unchanged (HTTP %d)', [LGet.HttpCode]))
|
||||
else
|
||||
Log(Format(' no answer (HTTP %d) %s',
|
||||
[LGet.HttpCode, LGet.Error]));
|
||||
end);
|
||||
except
|
||||
// Hors reseau : ce n'est pas une nouvelle du depot, c'est une absence
|
||||
// de nouvelle. Le temoin ne change pas.
|
||||
on E: Exception do
|
||||
begin
|
||||
// Hors reseau : ce n'est pas une nouvelle du depot, c'est une
|
||||
// absence de nouvelle. Le temoin ne change pas, mais le journal le
|
||||
// dit - sinon rien ne distingue "pas joignable" de "rien change".
|
||||
TThread.Queue(nil, procedure begin Log(' not reachable'); end);
|
||||
Exit;
|
||||
end;
|
||||
end;
|
||||
finally
|
||||
LClient.Free;
|
||||
end;
|
||||
@@ -4019,7 +4054,6 @@ begin
|
||||
procedure
|
||||
begin
|
||||
if FRemoteAhead then Exit; // deja dit
|
||||
Log('remote has moved - sync to bring it in');
|
||||
SetRemoteAhead(True);
|
||||
end);
|
||||
end).Start;
|
||||
|
||||
Reference in New Issue
Block a user