Skip to content

yunkya2/httpsget

Repository files navigation

httpsget - HTTPS simple client for X68000

概要

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 ドライバ
    • 計測技研製ドライバより高速な hinetd.x (K.Shirakata さん作) を使用してください
    • hinetd.x 起動時のパラメータは以下の設定にします
      hinetd -w512 -n15
      
      高速化係数(-n)を最大に設定した上で、TCP のウィンドウサイズ(-w)を 512 バイトに設定します
    • 実行中にドライバのメモリ不足が発生する場合があるため、メモリに余裕のある環境では更に -+-h:524288 -+-s:262144 のオプションを追加してヒープサイズとスタックサイズを増やしておくとよいです

使い方

コマンドラインから以下のように起動します。

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 で終了します。

<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/

TLS の実装と制約事項

httpsget の HTTPS 通信には、axTLSMicroPython 対応版 (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 ライセンスで配布されています。

About

HTTPS simple client for X68000

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published