A socket server to shared socket descriptor bridge.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src
.gitignore
Cargo.toml
LICENSE.TXT
README.md

README.md

bivrost!

A socket server to shared socket descriptor bridge.

General

bivrost! is a small utility mostly for working with DOOR32.SYS style socket file descriptor sharing in conjunction with systems such as ENiGMA½ BBS that do not support the feature directly. With bivrost! you can bridge the two.

bivrost! is released under Phenom Productions BBS mods! Snag a fresh release from your favorite super snazzy-pants BBS today!

Usage

bivrost! is fairly simple. Below is the current --help output:

bivrost! A socket server to shared socket descriptor bridge.
Copyright (c) 2018, Bryan D. Ashby

Usage: bivrost --port=<port> [--dropfile=<dropfile> --out=<out>] <target>
       bivrost --help | --version

Options:
  -h, --help             Show this message.
  --version              Show the version of bivrost!
  --port=<port>          Set server port in which to connect to.
  --dropfile=<dropfile>  Set DOOR32.SYS dropfile path.
  --out=<out>            Set output directory for new DOOR32.SYS.
                         If not specified, original DOOR32.SYS will
                         be overridden.

Notes:
  If <target> contains arguments, it should be quoted. For example: "DOOR.EXE /D -N 1"

  Arguments within <target> may also contain {fd} which will be substituted with the
  shared socket descriptor (the same value to be found in the output DOOR32.SYS).

  If your door does not use DOOR32.SYS you can omit --dropfile and --out and still
  use {fd}.

Standard usage currently mostly falls into one of two forms:

  1. Reading and producing a new DOOR32.SYS for a door to consume.
  2. Direct use where a DOOR32.SYS is not involved at all. For example, with NetFoss and 16-bit doors such as LORD. In this pattern, the {fd} param will be of use to you.

Examples

DOOR32.SYS

The following illustrates setting up Jezebel under Windows:

First, your menu.hjson may have an entry similar to the following:

doorJezebel: {
    desc: Jezebel
    module: abracadabra
    config: {
        name: Jezebel
        dropFileType: DOOR32
        cmd: "C:\\enigma-bbs\\utils\\bivrost.exe"
        args: [
            "--port"
            "{srvPort}",            //  bivrost! will connect this port on localhost
            "--dropfile",
            "{dropFilePath}",       //  ...and read this DOOR32.SYS produced by ENiGMA½
            "--out",
            "C:\\doors\\jezebel",   //  ...and produce a NEW DOOR32.SYS here.

            //
            //  Note that the final <target> params bivrost! will use to
            //  launch the door are grouped here. The {fd} variable could
            //  also be supplied here if needed.
            //
            "C:\\doors\\jezebel\\jezw32.exe C:\\doors\\jezebel\\door32.sys"
        ],
        nodeMax: 1
        tooManyArt: DOORMANY
        io: socket
    }
}

We've now told ENiGMA½ to launch Jezebel by way of proxy through bivrost!. When launched, bivrost! will perform the following basic steps:

  1. Connect up to the ENiGMA½ temporary socket server port supplied via --port.
  2. Read the DOOR32.SYS supplied at --dropfile and produce a new DOOR32.SYS containing the shared socket descriptor that Jezebel wants in the --out directory.
  3. Finally, launch Jezebel.

DOOR.SYS (Using Netfoss)

The following illustrates setting up L.O.R.D under Windows: This also requires the use of netfoss (http://pcmicro.com/netfoss/)

Note: There is no dropfile switch for bivrost here

LORD needs to be configured to get the DOOR.SYS directly from ENiGMA½ for each node

First, your menu.hjson may have an entry similar to the following:

doorLORD: {
    desc: LORD
    module: abracadabra
    config: {
        name: LORD
        dropFileType: DOOR
        cmd: "C:\\enigma-bbs\\utils\\bivrost.exe"
        args: [
            "--port={srvPort}" //  bivrost! will connect this port on localhost
            //  Note that the final <target> params bivrost! will use to
            //  launch the door are grouped here. The {fd} variable could
            //  also be supplied here if needed.
            //
            "C:\\doors\\netfoss\\nf.bat /N{node} /H{fd} C:\\doors\\LORD\\start.bat {node}"
        ],
        nodeMax: 5
        tooManyArt: DOORMANY
        io: socket
    }
}

We've now told ENiGMA½ to launch LORD through Netfoss by way of proxy through bivrost!. When launched, bivrost! will perform the following basic steps:

  1. Connect up to the ENiGMA½ temporary socket server port supplied via --port.
  2. Launch the NF Batch file which then calls LORD's start.bat with the node number.
  3. Finally, launch LORD.

License

BSD 2-Clause. See LICENSE.TXT.