Dosbox-staging: Pengaktifan dukungan Telnet untuk port serial "softmodem"

Dibuat pada 28 Agu 2020  ·  9Komentar  ·  Sumber: dosbox-staging/dosbox-staging

Saya sering ditanya mengapa program terminal DOS gagal mendownload file dari BBS saat menggunakan DOSBox (misalnya menggunakan protokol transfer serial / modem tradisional seperti XMODEM, YMODEM, ZMODEM). Saya telah melihatnya melaporkan dan mengkonfirmasi bahwa ketika port "serialX" dikonfigurasi dalam DOSBox .conf sebagai perangkat jenis "modem", itu memang, secara default, tidak mendukung Telnet. Ini mungkin tampak mendukung Telnet karena akan terhubung ke server Telnet, tetapi itu tidak akan benar-benar melarikan diri dari karakter IAC yang dikirim, membuka karakter IAC yang diterima atau mengenali atau menanggapi perintah Telnet. Jenis perangkat "nullmodem" memang mendukung parameter " telnet: 1 " untuk mengaktifkan dukungan Telnet, tetapi itu tidak terlalu membantu bagi mereka yang mencoba menggunakan terminal DOS untuk menyambung ke Telnet BBS di Internet.

Saya melihat melalui DOSBox Wiki dan Manual dan benar-benar tidak dapat menemukan apa pun tentang mengaktifkan dukungan Telnet untuk perangkat serial "modem" (softmodem). Jadi saya melihat-lihat kode sumber DOSBox dan menemukan sedikit kode ini di softmodem.cpp:

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

Itu beberapa kode menarik di sana. Jadi jika 4 karakter "NET1" muncul _anywhere_ di _any_ AT perintah yang diterima oleh softmodem ini, itu akan mengaktifkan dukungan Telnet dan kemudian segera berhenti mengurai perintah dan mengembalikan "OK". Itu cukup mengerikan dalam parsing perintah AT di sana (bagaimana jika "NET1" kebetulan ada di nama host yang Anda coba sambungkan?), Tapi terserah. Saya mencoba mengetik "ATNET1", dan ternyata berhasil: koneksi berikutnya yang menggunakan "ATD ..." memang mendukung Telnet.

Begitu...

  1. Harap dokumentasikan perintah ATNET0 / 1 ini (1 untuk mengaktifkan dukungan Telnet 0, untuk menonaktifkannya).
  2. Harap perbaiki parser perintah AT: strstr() hampir tidak pernah benar-benar ingin Anda gunakan.
  3. Harap dukung opsi " telnet: 1 " di file .conf untuk mengaktifkan dukungan telnet untuk perangkat "modem" secara default.

Senang berdiskusi lebih lanjut,

Terima kasih, pengguna dan pengurus BBS terima kasih.

bug

Semua 9 komentar

Terima kasih atas masalah dalam kode softmodem @rswindell.

Harap dokumentasikan perintah ATNET0 / 1 ini

Kami menyebutkan perintah NET1 di README (lihat di bawah), namun mungkin itu bisa diperbaiki.

Di github, Anda dapat 'membagi proyek ini', mengedit README langsung di garpu Anda (menggunakan editor web Github), lalu mendorong perubahan Anda kembali kepada kami. Bantuan Anda dalam mendokumentasikan ini secara menyeluruh akan sangat kami hargai!

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.

Harap perbaiki parser perintah AT: strstr () hampir tidak pernah benar-benar ingin Anda gunakan.

Apa yang Anda sarankan agar kami mengganti strstr() dengan untuk mendeteksi serupa substring ini di dalam aliran (char*) ?

Harap dukung opsi " telnet: 1 " di file .conf untuk mengaktifkan dukungan telnet untuk perangkat "modem" secara default.

Kedengarannya seperti saran yang bagus. Jadi ini akan "default" perangkat seolah-olah NET1 ditetapkan sejak awal?

Apa yang Anda sarankan agar kita mengganti strstr () dengan untuk mendeteksi substring ini di dalam aliran (char *) dengan cara yang sama?

AT perintah parsing harus dari kiri ke kanan, mendukung beberapa perintah dalam string yang sama (perintah multple mungkin ada di antara "AT" dan '\ r'). Cara parser perintah AT di DOSbox ditulis hari ini, Anda tidak dapat terhubung ke nama host mana pun dengan "net0" atau "net1" di mana pun di dalamnya. misalnya "ATD net1.vert.synchro.net" diperlakukan seolah-olah hanya "ATNET1", yang jelas-jelas salah (tidak ada panggilan / koneksi yang dicoba). Perbaikan akan terdiri dari lebih dari sekedar mengganti strstr () dengan beberapa pemanggilan fungsi lainnya.

Kedengarannya seperti saran yang bagus. Jadi ini akan "default" perangkat seolah-olah NET1 diatur dari awal?

Pertanyaannya di sini adalah: jika opsi " telnet: 1 " ada di file .conf, softmodem DOSbox akan berperilaku sama seperti jika perintah AT "NET1" ditetapkan sejak awal.

Saat ini, opsi " telnet: 1 " hanya didukung untuk jenis perangkat "nullmodem".

Ketika perintah 'D' diterima oleh modem yang kompatibel dengan Hayes, semuanya setelah (dan sebelum '\ r') diperlakukan sebagai pola-dial (misalnya nomor telepon, alamat IP, nama host). Masalah dengan menggunakan strstr () dalam hal ini adalah ia melewatkan (mengabaikan) semua sebelum pola yang Anda cari sehingga Anda tidak tahu apakah pola itu argumen untuk sebuah perintah atau perintah itu sendiri. Pengurai perintah perlu memproses semua perintah yang mengikuti "AT", secara berurutan (dari kiri ke kanan), dan untuk setiap perintah yang akan menghentikan penguraian (misalnya perintah 'D'), berhenti setelah perintah diproses.

Masalah dengan cara parsing perintah "NET0" atau "NET1" diimplementasikan di DOSbox tidak unik untuk perintah "D", saya hanya menggunakannya sebagai contoh. Setiap perintah AT datang sebelum atau setelah "NET0" atau "Net1" di string perintah juga diabaikan.

Modem yang kompatibel dengan Hayes dapat memproses perintah seperti "AT & F & C1 & D2S95 = 3Ddial-pattern \ r". Prosesor perintah AT softmodem DOSbox tidak mendukung perintah lain yang disertakan dalam string perintah yang sama seperti "NET0" atau "NET1" dan lebih buruk lagi, jika string tersebut muncul dalam argumen perintah (misalnya, dial -pola ke perintah 'D'), parser memperlakukan string sebagai perintah. misalnya "AT Dnet1.vert.synchro.net" tidak berfungsi sebagaimana mestinya.

Terima kasih atas penjelasan lengkapnya @rswindell!

@rswindell , jika Anda memiliki kesempatan, silakan kompilasi dan uji cabang kc/modem-toggles-1 atau uji binari di atas, dan beri tahu kami pendapat Anda.

Anda harus dapat mengaktifkan mode telnet untuk softmodem serial tertentu di file konfigurasi menggunakan flag telnet:1 diusulkan.

Mode Telnet sekarang dapat diubah melalui perintah AT: +NET1 dan +NET0 .

Mode Telnet-mode tetap ada di seluruh pengaturan ulang (ATZ), dan akan tetap dalam mode yang Anda atur. Keluaran konsol Dosbox akan melaporkan ketika mode telnet berubah.

Pengalihan runtime dari mode telnet menggunakan +NET1 (atau 0) sekarang dapat menjadi bagian dari set perintah multi-AT, dan itu tidak akan mempengaruhi dial-string.
Misalnya, berikut ini harus berfungsi seperti yang diharapkan:

ATI3+NET1Dmyhost.NET0test.org

File README telah diperbarui; beri tahu kami jika sudah oke atau bagaimana seharusnya diubah untuk menyempurnakan deskripsi lebih lanjut.

Penasaran apakah ini berfungsi seperti yang diharapkan untuk Anda!

@rswindell Terima kasih banyak atas laporan bug dan penjelasan rinci :) Masalah ditutup secara otomatis saat saya menggabungkan # 582 menjadi master.

Bila Anda punya waktu, silakan uji dan beri tahu kami apakah semuanya sekarang beres :) Jika Anda menemukan beberapa kesalahan atau sesuatu yang hilang - cukup beri komentar di sini dan saya akan membuka kembali masalahnya (atau cukup buat yang baru) .

Fitur ini akan dirilis dalam versi 0.76.0 yang akan datang, tetapi sampai saat itu fitur ini dapat diuji dalam build pengembangan kami: tautan ke pengembangan terbaru ada di sini: https://dosbox-staging.github.io/downloads/devel/

Terima kasih teman-teman atas tanggapan yang cepat dan menyeluruh.

Saya menguji versi dosbox-staging v0.76.0-alpha-690-g21a5 hari ini dan memang, opsi " telnet: 1 " di file .conf berfungsi dan perintah AT "+ NET1" dan "+ NET0" berfungsi.

Hanya satu pengamatan di sana, dan saya tidak tahu apakah itu benar-benar penting, tetapi perintah "AT +" biasanya dalam bentuk "AT + [kata] = [nilai]" - jadi agar konsisten dengan sintaks itu, perintah telnet DOSbox akan menjadi "AT + NET = 0" atau "AT + NET = 1". Mungkin sebenarnya tidak masalah, tetapi hanya berpikir saya akan menyebutkannya.

Kerja bagus guys!

Terima kasih atas tesnya @rswindell!

Memang .. Saya juga berpikir tentang = (melihat contoh lain), tetapi ingin meminimalkan jumlah perubahan sintaks (dan kode) yang diperlukan untuk mengimplementasikan ini dengan harapan mengadopsi ini di hulu. Jika semua DOSBox di luar sana dapat melakukan peralihan ini, maka itu akan memberikan pengalaman yang konsisten bagi pengguna.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat