Dosbox-staging: تمكين دعم Telnet للمنافذ التسلسلية "softmodem"

تم إنشاؤها على ٢٨ أغسطس ٢٠٢٠  ·  9تعليقات  ·  مصدر: dosbox-staging/dosbox-staging

غالبًا ما سُئلت عن سبب فشل برامج DOS الطرفية في تنزيل الملفات من BBSes عند استخدام DOSBox (على سبيل المثال ، استخدام بروتوكولات النقل التسلسلي / المودم التقليدية مثل XMODEM و YMODEM و ZMODEM). لقد رأيتها أبلغت وأكدت أنه عند تكوين منفذ "serialX" في DOSBox .conf كجهاز من نوع "مودم" ، فإنه بالفعل ، افتراضيًا ، لا يدعم Telnet. قد يبدو أنه يدعم Telnet لأنه سيتصل بخوادم Telnet ، لكنه لن يهرب في الواقع من أحرف IAC المرسلة أو أحرف IAC المستلمة أو يتعرف على أوامر Telnet أو يستجيب لها. لا يدعم الجهاز "nullmodem" معلمة " telnet: 1 " لتمكين دعم Telnet ، ولكن هذا ليس مفيدًا حقًا لأولئك الذين يحاولون استخدام محطات DOS للاتصال بـ Telnet BBSes على الإنترنت.

لقد بحثت في DOSBox Wiki و Manual ولم أجد حقًا أي شيء حول تمكين دعم Telnet للأجهزة التسلسلية "المودم" (softmodem). لذلك بحثت في كود مصدر DOSBox وقمت بفحص هذا القليل من الكود في softmodem.cpp:

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

هذا رمز مثير للاهتمام هناك. لذا إذا ظهرت الأحرف الأربعة "NET1" في أي مكان في _ أي _ أمر AT تم استلامه بواسطة هذا

وبالتالي...

  1. الرجاء توثيق أمر ATNET0 / 1 هذا (1 لتشغيل دعم Telnet على 0 ، لإيقاف تشغيله).
  2. الرجاء إصلاح محلل أوامر AT: strstr() ليس تقريبًا ما تريد استخدامه بالفعل.
  3. الرجاء دعم الخيار " telnet: 1 " في ملف .conf لتمكين برنامج telnet suport لأجهزة "المودم" افتراضيًا.

يسعدني مناقشة المزيد ،

شكرا لمستخدمي BBS و sysops شكرا لكم.

bug

ال 9 كومينتر

شكرًا للمشكلات في كود softmodemrswindell.

الرجاء توثيق هذا الأمر ATNET0 / 1

نذكر الأمر NET1 في README (انظر أدناه) ، ولكن ربما يمكن تحسينه.

في github ، يمكنك "تفرع هذا المشروع" ، وتحرير README مباشرة في مفترقك (باستخدام محرر الويب الخاص بـ Github) ، ثم دفع التغيير إلينا مرة أخرى. مساعدتك في توثيق هذا بدقة سيكون موضع تقدير!

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.

الرجاء إصلاح محلل أوامر AT: إن strstr () ليس تقريبًا ما تريد استخدامه بالفعل.

ما الذي تقترحه لاستبدال strstr() باكتشاف هذه السلسلة الفرعية بالمثل داخل دفق (char*) ؟

الرجاء دعم الخيار " telnet: 1 " في ملف .conf لتمكين برنامج telnet suport لأجهزة "المودم" افتراضيًا.

يبدو أنه اقتراح جيد. إذن ، هذا من شأنه أن يكون الجهاز "افتراضيًا" كما لو تم تعيين NET1 من البداية؟

ماذا تقترح أن نستبدل strstr () باكتشاف هذه السلسلة الفرعية بالمثل داخل دفق (char *)؟

AT إعراب القيادة يجب من اليسار إلى اليمين، ودعم عدة أوامر في نفس السلسلة (قد توجد أوامر multple بين "AT" و "\ ص '). الطريقة التي تتم بها كتابة محلل أوامر AT في DOSbox اليوم ، لا يمكنك الاتصال بأي اسم مضيف باستخدام "net0" أو "net1" في أي مكان بداخله. على سبيل المثال ، يتم التعامل مع "ATD net1.vert.synchro.net" كما لو كان مجرد "ATNET1" ، وهو أمر خاطئ بشكل واضح (لم تتم محاولة الاتصال / الاتصال). قد يتكون الإصلاح من أكثر من مجرد استبدال strstr () ببعض استدعاء دالة أخرى.

يبدو أنه اقتراح جيد. إذن ، هذا من شأنه أن "افتراضي" الجهاز كما لو تم تعيين NET1 من البداية؟

السؤال هنا هو: إذا كان الخيار " telnet: 1 " موجودًا في ملف .conf ، فسوف يتصرف DOSbox softmodem كما لو تم تعيين الأمر AT "NET1" من get-go.

حاليًا ، يتم دعم خيار " telnet: 1 " فقط من أجل نوع الجهاز "nullmodem".

عندما يتم تلقي الأمر "D" بواسطة مودم متوافق مع Hayes ، يتم التعامل مع كل شيء بعد (وقبل "\ r") كنمط طلب (مثل رقم الهاتف وعنوان IP واسم المضيف). تكمن مشكلة استخدام strstr () في هذه الحالة في أنه يتخطى (يتجاهل) كل شيء قبل النمط الذي تبحث عنه حتى لا تعرف ما إذا كان النمط هو الوسيطة للأمر أو الأمر نفسه. يحتاج محلل الأوامر إلى معالجة جميع الأوامر التي تتبع "AT" ، بالترتيب (من اليسار إلى اليمين) ، وبالنسبة لأي أوامر ستنهي التحليل (مثل الأمر "D") ، يتم إنهاؤها بمجرد معالجة الأمر.

مشكلة طريقة تنفيذ تحليل الأمر "NET0" أو "NET1" في DOSbox ليست فريدة بالنسبة إلى الأمر "D" ، كنت أستخدم ذلك كمثال فقط. يتم أيضًا تجاهل أي أوامر AT تأتي قبل أو بعد "NET0" أو "NET1" في سلسلة الأوامر.

يمكن للمودم المتوافق مع Hayes معالجة أوامر مثل "AT & F & C1 & D2S95 = 3Ddial-pattern \ r". لا يدعم معالج أوامر DOSbox softmodem AT أي أوامر أخرى يتم تضمينها في نفس سلسلة الأوامر مثل "NET0" أو "NET1" والأسوأ من ذلك ، إذا حدث ظهور هذه السلاسل في وسيطة أمر (على سبيل المثال ، قرص -نمط الأمر "D") ، يعامل المحلل اللغوي السلسلة كأمر. على سبيل المثال "AT Dnet1.vert.synchro.net" لا يعمل كما ينبغي.

شكرا على الشرح الشاملrswindell!

rswindell ،

الإصلاحات المقترحة في العلاقات العامة https://github.com/dosbox-staging/dosbox-staging/pull/582

يقوم CI الخاص بـ GitHub بإنشاء ثنائيات هنا (إذا لم تتمكن من البناء من المصدر):

rswindell ، عندما تتاح لك الفرصة ، يرجى تجميع الفرع واختباره kc/modem-toggles-1 أو اختبر الثنائيات أعلاه ، وأخبرنا برأيك.

يجب أن تكون قادرًا على تمكين وضع telnet لمودم برنامج تسلسلي معين في ملف التكوين باستخدام علامة telnet:1 المقترحة.

يمكن الآن تبديل وضع Telnet عبر أوامر AT: +NET1 و +NET0 .

يستمر وضع Telnet عبر عمليات إعادة التعيين (ATZ) ، وسيظل في الوضع الذي قمت بضبطه عليه. سيتم إرسال تقرير وحدة تحكم Dosbox عندما يتغير وضع telnet.

يمكن الآن أن يكون تبديل وقت تشغيل وضع telnet باستخدام +NET1 (أو 0) جزءًا من مجموعة أوامر Multi-AT ، ولن يؤثر على سلسلة الطلب.
على سبيل المثال ، يجب أن يعمل ما يلي كما هو متوقع:

ATI3+NET1Dmyhost.NET0test.org

تم تحديث ملف README ؛ أخبرنا إذا كان يبدو جيدًا أو كيف يجب أن يتغير لتحسين الوصف.

من الغريب إذا كان هذا يعمل كما هو متوقع بالنسبة لك!

rswindell شكرًا جزيلاً لك على تقرير الخطأ والتوضيحات التفصيلية :) تم إغلاق المشكلة تلقائيًا في اللحظة التي دمجت فيها # 582 لإتقانها.

عندما يكون لديك لحظة ، يرجى اختبار وإخبارنا ما إذا كان كل شيء على ما يرام الآن :) إذا وجدت خطأ ما أو شيئًا ما مفقودًا - ما عليك سوى التعليق هنا وسأعيد فتح المشكلة (أو ببساطة أنشئ مشكلة جديدة) .

سيتم إصدار هذه الميزة في الإصدار 0.76.0 القادم ، ولكن حتى ذلك الحين يمكن اختبارها في تصميمات التطوير لدينا: رابط لأحدث التطويرات موجود هنا: https://dosbox-staging.github.io/downloads/devel/

شكرا يا رفاق على الاستجابة السريعة والشاملة.

لقد اختبرت الإصدار DOSBox-staging v0.76.0-alpha-690-g21a5 اليوم وفي الواقع ، يعمل خيار " telnet: 1 " في ملف .conf ويعمل الأمران AT "+ NET1" و "+ NET0".

ملاحظة واحدة فقط هناك ، ولا أعرف ما إذا كان الأمر مهمًا بالفعل ، ولكن أوامر "AT +" عادةً ما تكون على شكل "AT + [كلمة] = [قيمة]" - لذلك لكي تكون متسقة مع بناء الجملة هذا ، فإن أوامر DOSbox telnet تكون "AT + NET = 0" أو "AT + NET = 1". ربما لا يهم في الواقع ، لكنني اعتقدت أنني سأذكرها.

رفاق العمل العظيم!

شكرا للاختبارات rswindell!

في الواقع .. لقد فكرت أيضًا في = (رؤية أمثلة أخرى) ، لكنني أردت تقليل مقدار التغييرات في بناء الجملة (والتعليمات البرمجية) اللازمة لتنفيذ ذلك على أمل اعتماد ذلك في المنبع. إذا كان بإمكان جميع DOSBox الموجودة هناك إجراء هذا التبديل ، فسيوفر ذلك تجربة متسقة للمستخدمين.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات