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.ResponseTimeout := FTimeoutMs;
|
||||||
LHttp.HandleRedirects := False;
|
LHttp.HandleRedirects := False;
|
||||||
LHttp.UserAgent := 'PMServer'; // GitHub refuse toute requete sans
|
LHttp.UserAgent := 'PMServer'; // GitHub refuse toute requete sans
|
||||||
|
LHttp.CustomHeaders['Connection'] := 'close'; // voir Fetch
|
||||||
LHttp.CustomHeaders['Authorization'] := 'token ' + FToken;
|
LHttp.CustomHeaders['Authorization'] := 'token ' + FToken;
|
||||||
LHttp.CustomHeaders['Content-Type'] := 'application/json';
|
LHttp.CustomHeaders['Content-Type'] := 'application/json';
|
||||||
// Deux essais, meme raison qu'a la lecture : un SYN perdu ne dit rien
|
// Deux essais, meme raison qu'a la lecture : un SYN perdu ne dit rien
|
||||||
@@ -441,6 +442,11 @@ begin
|
|||||||
LHttp.ConnectionTimeout := FTimeoutMs;
|
LHttp.ConnectionTimeout := FTimeoutMs;
|
||||||
LHttp.ResponseTimeout := FTimeoutMs;
|
LHttp.ResponseTimeout := FTimeoutMs;
|
||||||
LHttp.UserAgent := 'PMServer'; // GitHub refuse toute requete sans
|
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
|
// Pas de redirection suivie : une redirection vers un autre hote nous
|
||||||
// ferait envoyer le jeton ailleurs.
|
// ferait envoyer le jeton ailleurs.
|
||||||
LHttp.HandleRedirects := False;
|
LHttp.HandleRedirects := False;
|
||||||
|
|||||||
+40
-6
@@ -3987,10 +3987,26 @@ end;
|
|||||||
|
|
||||||
procedure TForm8.ProbeRemote;
|
procedure TForm8.ProbeRemote;
|
||||||
begin
|
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.
|
// Un coffre ne ici n'a pas de depot a interroger.
|
||||||
if HasLocalContainer then Exit;
|
if HasLocalContainer then
|
||||||
if FETag = '' then Exit;
|
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(
|
TThread.CreateAnonymousThread(
|
||||||
procedure
|
procedure
|
||||||
@@ -4006,11 +4022,30 @@ begin
|
|||||||
LGet := LClient.Fetch(FETag);
|
LGet := LClient.Fetch(FETag);
|
||||||
LAhead := (LGet.Status = ssOK) and (LGet.ETag <> '')
|
LAhead := (LGet.Status = ssOK) and (LGet.ETag <> '')
|
||||||
and not SameText(LGet.ETag.Trim, FETag.Trim);
|
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
|
except
|
||||||
// Hors reseau : ce n'est pas une nouvelle du depot, c'est une absence
|
on E: Exception do
|
||||||
// de nouvelle. Le temoin ne change pas.
|
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;
|
Exit;
|
||||||
end;
|
end;
|
||||||
|
end;
|
||||||
finally
|
finally
|
||||||
LClient.Free;
|
LClient.Free;
|
||||||
end;
|
end;
|
||||||
@@ -4019,7 +4054,6 @@ begin
|
|||||||
procedure
|
procedure
|
||||||
begin
|
begin
|
||||||
if FRemoteAhead then Exit; // deja dit
|
if FRemoteAhead then Exit; // deja dit
|
||||||
Log('remote has moved - sync to bring it in');
|
|
||||||
SetRemoteAhead(True);
|
SetRemoteAhead(True);
|
||||||
end);
|
end);
|
||||||
end).Start;
|
end).Start;
|
||||||
|
|||||||
Reference in New Issue
Block a user