Problème accès 3614 Hacker

Bonjour à tous,

Tout d’abord, je vais citer les personnes qui ont le plus de chances de pouvoir m’aider à résoudre le problème : @cquest et @jhr

J’ai franchement eu un coup de coeur pour le 3614 Hacker. L’idée est bonne, notamment le fait de pouvoir cumuler plusieurs modes d’utilisation (téléphone, série, web).

Rien à signaler pour la partie web, par contre, ce n’est pas la même chose côté série. Je dispose d’un Minitel 1B RTIC connecté à mon MacBook Air via un FTDI. Pour discuter avec le serveur, j’utilise websocket2minitel de cquest. J’arrive à accéder à tous les services proposés…sauf le 3614 Hacker. La page va charger, puis au bout d’une vingtaine de secondes, un message (pas toujours complet) apparaît sur mon Minitel : vous avez été déconnecté. A noter qu’il n’apparaît pas tout le temps, l’interface fige parfois.

Voici ce qui apparaît dans le terminal de MacOS Big Sur une fois le plantage survenu :

maxime@MaxBook-x86:~/Programmes/websocket2minitel|master ⇒  python3 websocket2minitel.py 'ws://mntl.joher.com:2018' /dev/tty.usbserial-A50285BI 1200
Traceback (most recent call last):
  File "/Users/maxime/Programmes/websocket2minitel/websocket2minitel.py", line 42, in <module>
    loop.run_until_complete(asyncio.gather(w2m(), m2w()))
  File "/usr/local/Cellar/python@3.9/3.9.1_5/Frameworks/Python.framework/Versions/3.9/lib/python3.9/asyncio/base_events.py", line 642, in run_until_complete
    return future.result()
  File "/Users/maxime/Programmes/websocket2minitel/websocket2minitel.py", line 25, in w2m
    data = await ws.recv()
  File "/usr/local/lib/python3.9/site-packages/websockets/protocol.py", line 509, in recv
    await self.ensure_open()
  File "/usr/local/lib/python3.9/site-packages/websockets/protocol.py", line 803, in ensure_open
    raise self.connection_closed_exc()
websockets.exceptions.ConnectionClosedError: code = 1005 (no status code [internal]), no reason

C’est particulièrement gênant, car si vous avez lu ma présentation, vous savez que je n’ai pas de câble téléphone sur mon Minitel, donc c’est la seule solution pour l’instant :pensive:

J’ai essayé plein de trucs, mais rien à faire :

  • Passage de 1200 à 4800 bauds
  • Saisie rapide du login et password, mais plante quoi qu’il arrive au bout d’une vingtaine de secondes, même si la connexion à mon compte a réussi
  • Test avec une machine virtuelle Debian et sur un Raspberry Pi 3 : tout pareil
  • Test avec le Minitel éteint
  • Accès direct ou bien via 3615co.de
  • Test avec un VPN et une liaison 4G pour voir si mon IP n’est pas bannie

Difficile de savoir d’où vient la panne, mais je pense que vous trouverez avec toutes les infos ci-dessus. Je vous remercie d’avance et vous souhaite une bonne fin de journée :wink:

OMG mais les programmes de @cquest ne fonctionnent qu’avec les sites de @cquest ! :slight_smile:

@cquest va te debugger ca rapidement !

websocket2minitel est un truc que j’ai écrit en mode vraiment « quick and dirty » il y a un peu plus de 2 ans.

Le code plante dans la partie réception des données depuis le websocket du serveur, au sein de la librairie websockets.

Cela peut venir entre autres :

  • de la version de python (très récente chez toi)
  • d’un bug dans mon bout de code
  • d’un problème d’implémentation du websocket côté serveur (on est tombé la semaine dernière sur un bug bien planqué entre le PAVI de @jhr et ce que lui envoyait 3615co.de)
  • un timeout ou un mode « keep-alive » (ping-pong) manquant

Les 20s assez stables me font penser au dernier point…

OK je vous remercie tous les deux pour vos réponses.

@cquest : j’ai pensé aussi à ce problème, car comme tu le dis, le plantage a lieu au bout d’un certain temps, relativement précis. Ne connaissant pas vraiment websockets sur le bout des doigts, j’ai préféré ne rien dire :blush:

Pour Python, j’ai aussi essayé avec la version 3.7 et 2.7 : la première a donné exactement le même résultat, la seconde a tout simplement refusé de se lancer (code non-compatible, c’est logique).

Pour le reste, je ne sais pas quoi dire. Si tu as besoin que je fasse d’autres tests, ou bien de la capture de paquets réseaux, n’hésite-pas.

Au fait, est-il possible de s’inspirer du travail de @jhr ? Je suppose que la connexion au serveur sur son site web se fait aussi via websocket ? Vu que ça fonctionne bien avec cette méthode, il y a peut être moyen d’adapter le code.

EDIT : ne pas tenir compte du dernier paragraphe. D’après mes recherches, le problème viendrait plutôt du serveur que de ton programme. Après je peux me tromper…

Je confirme qu’il faut que le code de @cquest supporte les paquets websocket keepalive qui sont envoyes par mon serveur :slight_smile:

@cquest va nous supporter ca en deux deux !

Bien noté. Donc je me suis trompé dans mon EDIT, pas de chance :joy:

Bonne chance à @cquest pour la modification, en espérant qu’il y arrive car j’ai vu que le 3614 HACKER supporterait « seulement » (pas une critique) 5 utilisateurs via le téléphone. Pour les rendez-vous du premier Dimanche du mois, la liaison série peut être une solution pour ceux qui préfèrent le clavier du Minitel :wink:

Hacker c’est 10 utilisateurs par telephone :slight_smile:

Au temps pour moi :blush: . En effet c’est déjà plus confortable comme marge

Et upgradable a 50 utilisateurs (canaux) en un click :slight_smile:

1 « J'aime »

Bonsoir,

Je me suis penché sur le soucis :

En fait c’est le serveur qui n’aimait pas, mais alors pas du tout les pings du client (automatiquement faits par la bibliothèque websockets).

Joyeux noël :slight_smile:

1 « J'aime »

Salut, j’ai changé les lignes de codes mais rien n’y fait, ça déconnecte toujours au bout de 20sec sur hacker… Quelqu’un a la solution ?

Rectification, Hacker fonctionne bien en direct avec cette commande

python3 websocket2minitel.py ‹ ws://mntl.joher.com:2018 › /dev/ttyUSB0 1200

mais au travers du service Teletel 3615 ça ne passe pas, ça se déconnecte au bout de 20sec

python3 websocket2minitel.py ‹ wss://3615co.de/ws › /dev/ttyUSB0 1200

Avec Socketel il faut s’y connecter directement, pas passer par 3615 parce que le code qui est derrière doit probablement souffrir du même bug que l’ancienne version de Socketel avant mon commit. :3

err je confonds les deux projets, mais bon l’idée est la même ^^