Dosbox-staging: Activation de la prise en charge Telnet pour les ports série "softmodem"

Créé le 28 août 2020  ·  9Commentaires  ·  Source: dosbox-staging/dosbox-staging

On m'a souvent demandé pourquoi les programmes de terminaux DOS échouaient à télécharger des fichiers à partir de BBS lors de l'utilisation de DOSBox (par exemple en utilisant des protocoles de transfert série / modem traditionnels tels que XMODEM, YMODEM, ZMODEM). Je l'avais vu signalé et confirmé que lorsqu'un port "serialX" est configuré dans un DOSBox .conf comme périphérique de type "modem", il ne prend en effet, par défaut, pas en charge Telnet. Il peut sembler prendre en charge Telnet car il se connectera aux serveurs Telnet, mais il n'échappera pas réellement aux caractères IAC envoyés, aux caractères IAC reçus ou ne reconnaîtra pas ou ne répondra pas aux commandes Telnet. Le type de périphérique "nullmodem" prend en charge un paramètre " telnet: 1 " pour activer le support Telnet, mais ce n'est pas vraiment utile pour ceux qui tentent d'utiliser des terminaux DOS pour se connecter aux BBS Telnet sur Internet.

J'ai parcouru le wiki et le manuel DOSBox et je n'ai vraiment rien trouvé sur l'activation du support Telnet pour les périphériques série "modem" (softmodem). J'ai donc parcouru le code source de DOSBox et trouvé ce petit bout de code dans softmodem.cpp:

else if (strstr(cmdbuf,"NET1")) {
                telnetmode = true;
                SendRes(ResOK);
                return;
        }

C'est un code intéressant ici. Donc, si les 4 caractères "NET1" apparaissent _anywhere_ dans _any_ la commande AT reçue par ce softmodem, cela activera le support Telnet, puis arrêtera immédiatement l'analyse de la commande et retournera "OK". C'est assez terrible l'analyse des commandes AT ici (et si "NET1" se trouve être dans le nom d'hôte auquel vous essayez de vous connecter?), Mais peu importe. J'ai essayé de taper "ATNET1", et en effet cela fonctionne: la prochaine connexion utilisant "ATD ..." supportait en effet Telnet.

Donc...

  1. Veuillez documenter cette commande ATNET0 / 1 (1 pour activer la prise en charge Telnet 0, pour désactiver si elle est désactivée).
  2. Veuillez corriger l'analyseur de commandes AT: strstr() n'est presque jamais ce que vous voulez réellement utiliser.
  3. Veuillez prendre en charge l'option " telnet: 1 " dans le fichier .conf pour activer le support telnet pour les périphériques "modem" par défaut.

Heureux de discuter davantage,

Merci, les utilisateurs de BBS et les sysops merci.

bug

Tous les 9 commentaires

Merci pour les problèmes dans le code du softmodem @rswindell.

Veuillez documenter cette commande ATNET0 / 1

Nous mentionnons la commande NET1 dans README (voir ci-dessous), mais peut-être pourrait-elle être améliorée.

Dans github, vous pouvez 'forké ce projet', éditer le README directement dans votre fork (en utilisant l'éditeur web de Github), puis nous renvoyer votre modification. Votre aide pour documenter cela à fond serait appréciée!

BBS Gaming
----------
DOSBox's serial interface can emulate a telephone modem, which allows original
DOS terminal applications to either dial or host a BBS on the Internet 
via the Telnet protocol.

First, configure DOSBox with a serial port emulating a modem:

   [serial]
   serial1 = modem listenport:2323

Next, launch your favorite DOS terminal or BBS hosting software and configure
its corresponding serial port with default settings, as follows:

  COM1:
    - COM port 1
    - 8N1 data-bits, stop-bits, and parity
    - 57600 baud
    - 03F8 address
    - IRQ4 interrupt
    - 16550 fifo enabled
    - Software flow control (Xon/Xoff) enabled
    - Hardware flow control (CTS/RTS) enabled
    - Hardware flow control (DSR/DTR) disabled

To dial BBSes on the Internet:

  1) Set your dialing prefix to: ATNET1^MATDT to ensure file-transfers
     and command mode transitions and handled properly.

  2) Set the phone number of the BBS to its hostname or IP, optionally
     followed by the Telnet port number, for example:

      - Phone number on non-standard port: remote.bbs.com:2323
      - Phone number on standard port 23: remote.bbs.com

To host a DOS-based BBS:

 1) Configure your DOSBox serial port to listen on a Telnet port greater
    than 1024. This allows you to run DOSbox with normal user privileges
    as opposed to granting it root or administrator privileges, for example:

    [serial]
    serial1 = modem listenport:2323

 2) Configure your DOSBox machine to use a static IP address or be assigned
    a static IP via DHCP, which can typically be configured in your router.

 3) If your DOSBox machine is behind a router/firewall, add a port-
    fowarding entry to listen on TCP port 23 and pass it through to
    port 2323 to your DOSBox machine's IP address.  This allows Internet
    users to "dial" your BBS using the default Telnet port.

Veuillez corriger l'analyseur de commandes AT: strstr () n'est presque jamais ce que vous voulez réellement utiliser.

Que suggérez-vous de remplacer strstr() par pour détecter de la même manière cette sous-chaîne dans un flux (char*) ?

Veuillez prendre en charge l'option " telnet: 1 " dans le fichier .conf pour activer le support telnet pour les périphériques "modem" par défaut.

Cela semble être une bonne suggestion. Donc, cela "par défaut" le périphérique comme si NET1 était défini dès le départ?

Que suggérez-vous de remplacer strstr () par pour détecter de la même manière cette sous-chaîne dans un flux (char *)?

L'analyse des commandes AT doit se faire de gauche à droite, prenant en charge plusieurs commandes dans la même chaîne (des commandes multiples peuvent exister entre «AT» et «\ r»). La façon dont l'analyseur de commandes AT dans DOSbox est écrit aujourd'hui, vous ne pouvez pas vous connecter à un nom d'hôte avec "net0" ou "net1" n'importe où à l'intérieur. Par exemple, "ATD net1.vert.synchro.net" est traité comme s'il s'agissait simplement de "ATNET1", ce qui est clairement faux (aucune tentative de numérotation / connexion n'est effectuée). Un correctif consisterait à plus que simplement remplacer strstr () par un autre appel de fonction.

Cela semble être une bonne suggestion. Donc, ce serait "par défaut" le périphérique comme si NET1 était défini dès le départ?

La question ici est la suivante: si l'option " telnet: 1 " est présente dans le fichier .conf, le softmodem DOSbox se comporterait de la même manière que si la commande AT "NET1" était définie dès le départ.

Actuellement, l'option " telnet: 1 " n'est prise en charge que pour le type de périphérique "nullmodem".

Lorsque la commande 'D' est reçue par un modem compatible Hayes, tout ce qui suit (et avant le '\ r') est traité comme le modèle de numérotation (par exemple, numéro de téléphone, adresse IP, nom d'hôte). Le problème avec l'utilisation de strstr () dans ce cas est qu'il saute (ignore) tout avant le modèle que vous recherchez, donc vous ne savez pas si le modèle était l'argument d'une commande ou la commande elle-même. L'analyseur de commandes doit traiter toutes les commandes suivant "AT", dans l'ordre (de gauche à droite), et pour toutes les commandes qui mettront fin à l'analyse (par exemple la commande 'D'), se terminer une fois la commande traitée.

Le problème avec la façon dont l'analyse des commandes "NET0" ou "NET1" est implémentée dans DOSbox n'est pas unique à la commande "D", je l'utilisais juste comme exemple. Toutes les commandes AT venant avant ou après le "NET0" ou "NET1" dans la chaîne de commande sont également ignorées.

Un modem compatible Hayes peut traiter des commandes telles que "AT & F & C1 & D2S95 = 3Ddial-pattern \ r". Le processeur de commandes DOSbox softmodem AT ne prend en charge aucune autre commande incluse dans la même chaîne de commande que "NET0" ou "NET1" et pire encore, si ces chaînes apparaissent dans un argument de commande (par exemple, un cadran -pattern à la commande 'D'), l'analyseur traite la chaîne comme une commande. par exemple "AT Dnet1.vert.synchro.net" ne fonctionne pas comme il se doit.

Merci pour l'explication approfondie @rswindell!

@rswindell , quand vous en avez l'occasion, compilez et testez la branche kc/modem-toggles-1 ou testez les binaires ci-dessus et dites-nous ce que vous en pensez.

Vous devriez pouvoir activer le mode telnet pour un softmodem série donné dans le fichier de configuration en utilisant l'indicateur telnet:1 proposé.

Le mode Telnet peut maintenant être basculé via les commandes AT: +NET1 et +NET0 .

Le mode de mode Telnet persiste à travers les réinitialisations (ATZ) et restera dans le mode sur lequel vous l'avez défini. La sortie de la console de Dosbox signalera quand le mode telnet change.

La commutation d'exécution du mode telnet à l'aide de +NET1 (ou 0) peut maintenant faire partie d'un jeu de commandes multi-AT, et elle n'influencera pas la chaîne de numérotation.
Par exemple, les éléments suivants devraient fonctionner comme prévu:

ATI3+NET1Dmyhost.NET0test.org

Le fichier README a été mis à jour; faites-nous savoir s'il semble correct ou comment il devrait changer pour améliorer encore la description.

Curieux de savoir si cela fonctionne comme prévu pour vous!

@rswindell Merci beaucoup pour le rapport de bogue et les explications détaillées :) Le problème s'est fermé automatiquement au moment où j'ai fusionné # 582 avec master.

Lorsque vous aurez un moment, veuillez tester et nous dire si tout est maintenant en ordre :) Si vous trouvez un défaut ou quelque chose qui manque - commentez simplement ici et je rouvrirai le problème (ou en créerai simplement un nouveau) .

Cette fonctionnalité sera publiée dans la prochaine version 0.76.0, mais d'ici là, elle peut être testée dans nos versions de développement: le lien vers les versions de développement les plus récentes est ici: https://dosbox-staging.github.io/downloads/devel/

Merci les gars pour la réponse rapide et approfondie.

J'ai testé la version v0.76.0-alpha-690-g21a5 de dosbox-staging aujourd'hui et en effet, l'option " telnet: 1 " dans le fichier .conf fonctionne et les commandes AT "+ NET1" et "+ NET0" fonctionnent.

Une seule observation ici, et je ne sais pas si cela compte réellement, mais les commandes "AT +" sont généralement de la forme "AT + [mot] = [valeur]" - donc pour être cohérent avec cette syntaxe, les commandes telnet de DOSbox être "AT + NET = 0" ou "AT + NET = 1". Cela n'a probablement pas vraiment d'importance cependant, mais j'ai juste pensé que je le mentionnerais.

Excellent travail les gars!

Merci pour les tests @rswindell!

En effet .. J'avais aussi pensé au = (voir d'autres exemples), mais je voulais minimiser la quantité de changements de syntaxe (et de code) nécessaires pour l'implémenter dans l'espoir de l'adopter en amont. Si tous les DOSBox disponibles peuvent effectuer ce changement, cela fournira une expérience cohérente aux utilisateurs.

Cette page vous a été utile?
0 / 5 - 0 notes