httpsget はネットワーク接続が可能な X680x0 上で動作する HTTPS クライアントです。
X680x0 では、Neptune-X や Nereid, RaSCSI などの有志の方々が開発されたネットワークアダプタと、無償配布されている(株)計測技研製 Human68k 用 TCP/IP ドライバの組み合わせによってインターネットへの接続が可能です。 WebXpressionなどのブラウザを用いた Web ブラウズも一応可能ですが、既存のブラウザは暗号化されていない HTTP 通信にしか対応していないため、ほとんどの Web サイトが HTTPS 対応されてしまった現在では見られるサイトが非常に限られてしまっています。
現在の PC と比べると非力な X680x0 にとっては、HTTPS 通信で使用されている TLS プロトコルは非常に重い処理であり、これを用いた Web ブラウズはあまり現実的ではないのですが、重いながらも実験的に HTTPS 通信を実装してみました。
Web サイトの html を取得してただテキストとして表示するだけで、タグの処理も最低限のことしか行っていませんが、X680x0 でも HTTPS 通信が可能であることを示す一例としてご覧ください。
X680x0 で、計測技研製 TCP/IP ドライバやその互換ドライバを用いたネットワーク接続が可能な環境が必要です。
TLS プロトコルは X680x0 にとって非常に重い処理なので、正常な動作のためには各種設定のチューニングが不可欠です。具体的には以下の設定を行ってください。
- CONFIG.SYS
- TCP/IPドライバを動かすために必要な
PROCESS=行を以下の設定にしますPROCESS = 3 2 100- 最初の
3は最大スレッド数の指定です。3 以上の値であればよいです - 2,3 番目の値 (メインスレッドの優先度とタイムスライス値) は計測技研製ドライバの設定例では
10 10になっていますが、この値では TLS 処理のための CPU 時間が不足するため、変更の必要があります
- 最初の
- TCP/IPドライバを動かすために必要な
- TCP/IP ドライバ
- 計測技研製ドライバより高速な hinetd.x (K.Shirakata さん作) を使用してください
- X68000 LIBRARY (http://retropc.net/x68000/software/internet/tcpip/hinetd/) から入手できます
- hinetd.x 起動時のパラメータは以下の設定にします
高速化係数(
hinetd -w512 -n15-n)を最大に設定した上で、TCP のウィンドウサイズ(-w)を 512 バイトに設定します - 実行中にドライバのメモリ不足が発生する場合があるため、メモリに余裕のある環境では更に
-+-h:524288 -+-s:262144のオプションを追加してヒープサイズとスタックサイズを増やしておくとよいです
- 計測技研製ドライバより高速な hinetd.x (K.Shirakata さん作) を使用してください
コマンドラインから以下のように起動します。
httpsget [<オプション>] <URL>
<オプション> は以下の通りです。
-h,--help: ヘルプを表示して終了します-H,--show-header: HTTP レスポンスヘッダを表示します-r,--raw: HTML のパースを行わずにそのまま表示します-s,--sjis: UTF-8 から SJIS への変換を行いません- ほとんどの Web サイトは UTF-8 で記述されているため、デフォルトでは X68k での表示のために UTF-8 から SJIS への変換を行いますが、このオプションを指定するとその変換を行いません。SJIS で記述されているサイトを表示する場合に使用します
-p,--page: ページングモードで表示します- 一画面ごとに停止してキー入力を待ちます。スペースで1行分、リターンでは1ページ分進みます。
qで終了します。
- 一画面ごとに停止してキー入力を待ちます。スペースで1行分、リターンでは1ページ分進みます。
<URL> には接続したいサイトを記述します。以下のフォーマットで指定してください。
[<スキーム>://]<ホスト名>[:<ポート番号>][/<パス>]<スキーム>にはhttpsまたはhttpを指定します。省略するとhttpsが指定されたものとして扱います<ホスト名>にはドメイン名または IP アドレスを指定します<ポート番号>は省略可能です。省略した場合はスキームに応じて 443 (https) または 80 (http) が指定されたものとして扱います<パス>は省略可能です。省略した場合は/が指定されたものとして扱います
httpsget https://www.yahoo.co.jp
httpsget -H www.google.com
httpsget -s -p http://www.retropc.net/x68000/
httpsget の HTTPS 通信には、axTLS の MicroPython 対応版 (https://github.com/micropython/axtls) を元に m68k 向けの高速化を行ったものを使用しています。 axTLS は OpenSSL や mbedTLS と比べると機能が限定されている代わりに軽量ですが、以下のような制約事項があります。
- 対応するプロトコルに制約があります。接続先が要求するプロトコルに対応できない場合は、接続時にエラー -40 が返されます
- 利用できる TLS バージョンは 1.2 のみです。
- 鍵交換で利用できる暗号は RSA のみです。DH や ECDHE などその他の方式には対応していません
- 接続時にサーバ証明書の確認を行いません(axTLS に機能はありますが、使用していません)
- 接続先によっては接続時の TLS ハンドシェイクのタイムアウトが短め(10秒程度)に設定されている場合があり、これに間に合わないとサーバ側から接続が切断されてしまいます(エラー -256 が返されます)
- 特に 10MHz 機の場合にはぎりぎりで、通信状態によってはタイムアウトしてしまう可能性があります。XVI や X68030 などの高速な機種や、PhantomX などのアクセラレータがある環境が望ましいです
elf2x68k の 20250907 版以降が必要です。
git clone --recursive https://github.com/yunkya2/httpsget.git
で、サブモジュール込みで clone した後、以下のコマンドでビルドします。
make
make linux でデバッグ用の Linux 版のバイナリをビルドすることもできます。
httpsget は MIT ライセンスで配布されます。 内部で用いられている axTLS は BSD ライセンスで配布されています。