---
layout: post
slug: battlenet-probleme-transfert-donnees
status: published
title: "Battle.net : problème de transfert de données"
description: Et quelques outils de debuggage Windows
disqus: true
categories:
- jeux
- windows
tags:
---

J'ai rencontré un bug assez coriace sur le client Battle.net. Cet article peut vous intéresser si vous aussi vous rencontrez l'erreur suivante :

> Nous rencontrons un problème de transfert des données. Veuillez vérifier l'état de votre connexion Internet et réessayer.

Et en image (cliquez dessus pour l'agrandir) :

[![Erreur battlenet](/assets/images/posts/battlenet-erreur.png)](/assets/images/posts/battlenet-erreur.png)

## La solution

Pour ceux qui seraient pressés, il suffit d'arrêter toutes les instances de Battle.net puis de supprimer les dossiers suivants :

 * C:/Program Files/Battle.net/ ou C:/Program Files (x86)/Battle.net/
 * C:/ProgramData/Battle.net/
 * C:/ProgramData/Blizzard Entertainment/
 * C:/Windows/Temp/
 * %appdata%/Battle.net/ *(cf ci-dessous pour les chemins avec des %)*
 * %localappdata%/Battle.net/
 * %localappdata%/Blizzard Entertainment/

Ensuite réinstallez Battle.net puis vos jeux.

Source du fix : [[Solved] Fix Almost any Battle.net bugs with these 9 quick fixes!](https://us.battle.net/forums/en/bnet/topic/20752501530).

*Pour ouvrir les dossiers avec des pourcentages, copiez collez la ligne dans la barre en haut de l'explorateur de fichier Windows. Exemple :*

[![Ouvrir appadata dans un explorateur de fichier windows](/assets/images/posts/battlenet-explorer.png)](/assets/images/posts/battlenet-explorer.png)

## Diagnostique réseau

### La base : traceroute, ping, pathping

L'erreur laisse penser à un problème réseau. Le support Blizzard demande alors de réaliser un `pathping` (une commande Windows) sur l'ip `80.239.208.193`.

```raw
Détermination de l’itinéraire vers 80-239-208-193.customer.teliacarrier.com [80.239.208.193]
avec un maximum de 30 sauts :
  0  MASTERRACE.home [192.168.1.40]
  1  liveboxipv4.home [192.168.1.1]
  2     *        *        *
Traitement des statistiques pendant 25 secondes...
            Source vers ici  Ce nœud/lien
Saut RTT    Perdu/Envoyé = % Perdu/Envoyé = % Adresse
  0                                           MASTERRACE.home [192.168.1.40]
                                0/ 100 =  0%   |
  1    0ms     0/ 100 =  0%     0/ 100 =  0%  liveboxipv4.home [192.168.1.1]

Itinéraire déterminé.
```

Étonnemment cette commande semble échouer sur l'IP indiquée. Ceci, après quelques recherches, elle échoue sur toutes les IPs. La raison m'est encore inconnue.

Ceci dit, les commandes `ping` et `traceroute` quant à elles fonctionnent parfaitement bien :

```raw
Envoi d’une requête 'Ping'  80.239.208.193 avec 32 octets de données :
Réponse de 80.239.208.193 : octets=32 temps=22 ms TTL=112
Réponse de 80.239.208.193 : octets=32 temps=18 ms TTL=112
Réponse de 80.239.208.193 : octets=32 temps=18 ms TTL=112
Réponse de 80.239.208.193 : octets=32 temps=18 ms TTL=112

Statistiques Ping pour 80.239.208.193:
    Paquets : envoyés = 4, reçus = 4, perdus = 0 (perte 0%),
Durée approximative des boucles en millisecondes :
    Minimum = 18ms, Maximum = 22ms, Moyenne = 19ms
```

<pre style="white-space: pre">
Détermination de l’itinéraire vers 80-239-208-193.customer.teliacarrier.com [80.239.208.193]
avec un maximum de 30 sauts :

  1    <1 ms    <1 ms    <1 ms  liveboxipv4.home [192.168.1.1]
  2     *        *        *     Délai d’attente de la demande dépassé.
  3     1 ms     1 ms    <1 ms  xxxx.Caen.francetelecom.net [x.x.x.x]
  4     6 ms     6 ms     6 ms  xxxx.Paris.francetelecom.net [x.x.x.x]
  5     6 ms     6 ms     6 ms  193.252.137.74
  6     *        *        *     Délai d’attente de la demande dépassé.
  7     7 ms     7 ms     7 ms  BLIZZARD-EN.ear2.Paris1.Level3.net [212.73.205.158]
  8     8 ms     7 ms     8 ms  37.244.9.48
  9     *        *        *     Délai d’attente de la demande dépassé.
 10    17 ms    17 ms    18 ms  37.244.10.101
 11     *        *        *     Délai d’attente de la demande dépassé.
 12     *        *        *     Délai d’attente de la demande dépassé.
 13    18 ms    17 ms    18 ms  80-239-208-193.customer.teliacarrier.com [80.239.208.193]

Itinéraire déterminé.
</pre>

Ces résultats suffisent à disqualifier un problème de réseau basique. On peut donc avancer dans nos recherches et regarder ce qui se passe sur Wireshark. On va démarrer notre capture un peu avant l'appuie sur le bouton "Mise à jour" et l'arrêter juste après l'apparition du message d'erreur.

### L'artillerie lourde : Wireshark

On constate donc que les échanges sont réalisés sur le port `1119`, un des ports de Battle.net avec deux IP différentes : en `HTTP` avec `185.60.112.06` et dans un protole incconu avec `80.239.208.193`.

[![Capture Wireshark](/assets/images/posts/battlenet-wireshark.png)](/assets/images/posts/battlenet-wireshark.png)

Il y aurait beaucoup à redire sur le fonctionnement du client Battle.net mais rien qui nous intéresse pour résoudre notre problème.

À cette étape, à part tenter de déserialiser le protocole incconu, il ne nous reste plus grand chose à faire côté réseau.

## Diagnostique processus

Le bug étant propre à la machine, il est intéressant de voir comment le processus échange avec le reste du système. Je me suis donc mis en quête d'un équivalent de [`strace`](https://linux.die.net/man/1/strace) pour Windows. Suite aux conseils dans un fil de discussion sur [Stackoverflow](http://stackoverflow.com/questions/3847745/systrace-for-windows), je me suis tourné vers [Process Monitor](https://technet.microsoft.com/en-us/sysinternals/processmonitor.aspx)

Cette application permet entre autre de suivre les différents appels au registre, au système de fichier, au réseau et les différentes threads crées par l'application.

On commencer par cliquer sur "Filter", puis "Filter...". Là on va choisir dans le premier menu déroulant "Process Name", puis "contains" dans le second et ensuite on va taper "Battle". On clique sur ajouter pour rajouter le filtre.

[![Process Monitor Filter](/assets/images/posts/battlenet-processmonitor1.png)](/assets/images/posts/battlenet-processmonitor1.png)

Maintenant, vous ne devriez plus que voir les informations liés aux processus Battle.net. Les 3 icônes à droite de sauvegarde servent, dans l'ordre, à :

 - Lancer/Stopper la capture
 - Activer/Désativer l'autoscroll
 - Vider les logs

Et les 5 icônes les plus à droite servent à filtrer les évènements. Voici un exemple de ce que l'on peut obtenir :

[![Process Monitor Liste](/assets/images/posts/battlenet-processmonitor2.png)](/assets/images/posts/battlenet-processmonitor2.png)

Process Monitor m'a permis de me rendre compte de deux choses :

 * Un fichier de log était créé (et j'avais donc son chemin)
 * Battle.net essayait d'accéder à un dossier dans Battle.net.8423 qui n'existait pas.

J'ai alors essayé de supprimer le dossier Battle.net.8423. Mauvaise idée, ça plante complètement Battle.net. Lors de la réinstallation, j'obtiens une erreur de mise à jour du client Battle.net En lisant les logs, je trouve l'erreur `Failed to fetch Build config` que je cherche sur Internet qui m'emmène vers le lien ci-dessus. Il suffit donc de supprimer un certains nombre de fichiers.

Si nous n'avions pas trouvé de solution à cette étape là et si la législation nous l'avait permis, il nous restait la possibilité d'utiliser un debugger / décompilateur pour comprendre ce qu'il se passait dans l'executable.

Finalement, l'erreur de Blizzard était trompeuse. De plus leur client semble avoir tendance à répliquer ses fichiers partout et à les corrompre par la même occasion. Enfin, le fil de discussion obscure mériterait d'être intégré à la FAQ.
