Dosbox-staging: Habilitación de soporte Telnet para puertos serie "softmodem"

Creado en 28 ago. 2020  ·  9Comentarios  ·  Fuente: dosbox-staging/dosbox-staging

A menudo me preguntaban por qué los programas de terminal de DOS no podían descargar archivos de BBSes cuando se usaba DOSBox (por ejemplo, si se usaban protocolos de transferencia de serie / módem tradicionales como XMODEM, YMODEM, ZMODEM). Lo había visto informado y confirmado que cuando se configura un puerto "serialX" en un DOSBox .conf como dispositivo de tipo "módem", de hecho, de forma predeterminada, no es compatible con Telnet. Puede parecer que es compatible con Telnet, ya que se conectará a los servidores Telnet, pero en realidad no escapará de los caracteres IAC enviados, no escapará de los caracteres IAC recibidos ni reconocerá o responderá a los comandos Telnet. El tipo de dispositivo "nullmodem" admite un parámetro " telnet: 1 " para habilitar la compatibilidad con Telnet, pero eso no es realmente útil para quienes intentan utilizar terminales DOS para conectarse a BBS de Telnet en Internet.

Revisé el Wiki y el manual de DOSBox y realmente no pude encontrar nada sobre la habilitación del soporte Telnet para dispositivos seriales "modem" (softmodem). Así que miré el código fuente de DOSBox y encontré este pequeño código en softmodem.cpp:

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

Ese es un código interesante ahí. Entonces, si los 4 caracteres "NET1" aparecen _en cualquier

Entonces...

  1. Documente este comando ATNET0 / 1 (1 para activar el soporte Telnet en 0, para desactivarlo).
  2. Corrija el analizador de comandos AT: strstr() casi nunca es lo que realmente desea usar.
  3. Admite la opción " telnet: 1 " en el archivo .conf para habilitar el soporte de telnet para dispositivos "módem" de forma predeterminada.

Feliz de discutir más,

Gracias, los usuarios de BBS y los administradores de sistemas, gracias.

bug

Todos 9 comentarios

Gracias por los problemas en el código de softmodem @rswindell.

Documente este comando ATNET0 / 1

Mencionamos el comando NET1 en README (ver más abajo), sin embargo, quizás podría mejorarse.

En github, puede 'bifurcar este proyecto', editar el README directamente en su bifurcación (usando el editor web de Github) y luego enviarnos su cambio. ¡Se agradecería su ayuda para documentar esto a fondo!

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.

Corrija el analizador de comandos AT: strstr () casi nunca es lo que realmente desea usar.

¿Qué sugiere que reemplacemos strstr() con para detectar de manera similar esta subcadena dentro de una secuencia (char*) ?

Admite la opción " telnet: 1 " en el archivo .conf para habilitar el soporte de telnet para dispositivos "módem" de forma predeterminada.

Suena como una buena sugerencia. Entonces, ¿esto "predeterminaría" el dispositivo como si NET1 estuviera configurado desde el principio?

¿Qué sugiere que reemplacemos strstr () con para detectar de manera similar esta subcadena dentro de una secuencia (char *)?

Análisis comando AT debe ser de izquierda a derecha, el apoyo a múltiples comandos en la misma cadena (pueden existir comandos multple entre la "A" y el '\ r'). La forma en que se escribe hoy el analizador de comandos AT en DOSbox, no puede conectarse a ningún nombre de host con "net0" o "net1" en ningún lugar dentro de él. por ejemplo, "ATD net1.vert.synchro.net" se trata como si fuera simplemente "ATNET1", lo cual es claramente incorrecto (no se intenta marcar / conectar). Una solución consistiría en algo más que simplemente reemplazar strstr () con alguna otra llamada de función.

Suena como una buena sugerencia. Entonces, ¿esto "predeterminaría" el dispositivo como si NET1 estuviera configurado desde el principio?

La pregunta aquí es: si la opción " telnet: 1 " está presente en el archivo .conf, el softmodem de DOSbox se comportaría igual que si el comando AT "NET1" estuviera configurado desde el principio.

Actualmente, la opción " telnet: 1 " solo es compatible con el tipo de dispositivo "nullmodem".

Cuando un módem compatible con Hayes recibe el comando 'D', todo lo que sigue (y antes de '\ r') se trata como el patrón de marcación (por ejemplo, número de teléfono, dirección IP, nombre de host). El problema de usar strstr () en este caso es que omite (ignora) todo antes del patrón que está buscando, por lo que no sabe si el patrón era el argumento de un comando o el comando en sí. El analizador de comandos necesita procesar todos los comandos que siguen al "AT", en orden (de izquierda a derecha), y para cualquier comando que termine el análisis (por ejemplo, el comando 'D'), finalizar una vez que se procese el comando.

El problema con la forma en que se implementa el análisis de los comandos "NET0" o "NET1" en DOSbox no es exclusivo del comando "D", solo lo estaba usando como ejemplo. También se ignoran los comandos AT que vienen antes o después de la "NET0" o "NET1" en la cadena de mando.

Un módem compatible con Hayes puede procesar comandos como "AT & F & C1 & D2S95 = 3Ddial-pattern \ r". El procesador de comandos DOSbox softmodem AT no admite que se incluyan otros comandos en la misma cadena de comandos que "NET0" o "NET1" y, lo que es peor, si esas cadenas aparecen en un argumento de comando (por ejemplo, un dial -pattern al comando 'D'), el analizador trata la cadena como un comando. por ejemplo, "AT Dnet1.vert.synchro.net" no funciona como debería.

¡Gracias por la explicación detallada @rswindell!

@rswindell , cuando tenga la oportunidad, compile y pruebe la rama kc/modem-toggles-1 o pruebe los binarios anteriores y díganos lo que piensa.

Debería poder habilitar el modo telnet para un softmodem serial dado en el archivo de configuración usando la bandera telnet:1 .

El modo Telnet ahora se puede alternar mediante los comandos AT: +NET1 y +NET0 .

El modo de modo Telnet persiste en los reinicios (ATZ) y permanecerá en el modo que lo configuró. La salida de la consola de Dosbox informará cuando cambie el modo telnet.

El cambio en tiempo de ejecución del modo telnet usando +NET1 (o 0) ahora puede ser parte de un conjunto de comandos multi-AT y no influirá en la cadena de marcación.
Por ejemplo, lo siguiente debería funcionar como se esperaba:

ATI3+NET1Dmyhost.NET0test.org

El archivo README se ha actualizado; háganos saber si se ve bien o cómo debería cambiar para mejorar aún más la descripción.

¡Curioso si esto funciona como se esperaba para usted!

@rswindell Muchas gracias por el informe de errores y las explicaciones detalladas :) El problema se cerró automáticamente en el momento en que fusioné el # 582 con el maestro.

Cuando tenga un momento, pruebe y díganos si todo está en orden :) Si encuentra alguna falla o falta algo, simplemente comente aquí y reabriré el problema (o simplemente crearé uno nuevo) .

Esta función se lanzará en la próxima versión 0.76.0, pero hasta entonces se puede probar en nuestras compilaciones de desarrollo: el enlace a las versiones de desarrollo más recientes están aquí: https://dosbox-staging.github.io/downloads/devel/

Gracias a todos por la rápida y completa respuesta.

Probé dosbox-staging versión v0.76.0-alpha-690-g21a5 hoy y, de hecho, la opción " telnet: 1 " en el archivo .conf funciona y los comandos AT "+ NET1" y "+ NET0" funcionan.

Solo una observación allí, y no sé si realmente importa, pero los comandos "AT +" suelen tener la forma "AT + [palabra] = [valor]", por lo que para ser coherentes con esa sintaxis, los comandos telnet de DOSbox sea ​​"AT + NET = 0" o "AT + NET = 1". Sin embargo, probablemente no importe, pero pensé en mencionarlo.

¡Buen trabajo chicos!

¡Gracias por las pruebas @rswindell!

De hecho ... También había pensado en el = (viendo otros ejemplos), pero quería minimizar la cantidad de cambios de sintaxis (y código) necesarios para implementar esto con la esperanza de adoptarlo en sentido ascendente. Si todos los DOSBox pueden hacer este cambio, eso proporcionará una experiencia consistente para los usuarios.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

morellam-dev picture morellam-dev  ·  4Comentarios

nemo93 picture nemo93  ·  3Comentarios

i30817 picture i30817  ·  5Comentarios

okias picture okias  ·  4Comentarios

datapackrat picture datapackrat  ·  4Comentarios