[新]なんでも日記[新]なんでも日記ジャンル不定の日記です。R1の管理用CGI関連を暇な時間にやってて、とりあえずHTTP+CGIでできるのは公開もして一段落してるが、websocketの実験も兼ねてsocat+shでwebsocketサーバー作ってる。s3pPLMBiTxaQ9kYGzzhZRbK+xOo=レスポンスはこんな感じになるみたい。ここで重要なのは、リクエストのSec-WebSocket-Keyを元にSec-WebSocket-Acceptを作る。作り方は、Sec-WebSocket-Keyの値に"258EAFA5-E914-47DA-95CA-C5AB0DC85B11"を追加した文字列のSHA1ハッシュをBase64した文字列がSec-WebSocket-Acceptになる。-sha1|base64s3pPLMBiTxaQ9kYGzzhZRbK+xOo=↑sha1sumを使わずにopensslコマンドを使う。-p|base64s3pPLMBiTxaQ9kYGzzhZRbK+xOo=↑xxdコマンドでsha1sumの16進文字列をバイナリに変換する。base64s3pPLMBiTxaQ9kYGzzhZRbK+xOo=↑sedを使ってるがわけわからんコードwの3種類の方法を発見した。opensslはBuildrootの標準で入ってない。Linuxに無いからBuildrootにもないかと思ったがあった!が、-rオプションに対応していない・・・sed使うコードはわけわからん。いうわけで考えたが、openssl入れてまで実現したくないな・・・なんだが、websocketの実験もしたいし、とりあえず母艦で実験は続けるか。base64↑このコード、よく見るとわかるな。"はsha1sumはハッシュ値とファイル名をスペース区切りで出力するんでハッシュ値だけを取り出すのに使う。's/\(.\{2\}\)/\\x\1/g'は2文字ずつ取り出して手前にエスケープ文字をつける。カッコで囲んで先頭の-eオプション付きのechoで出力してるが、echoの-eオプションはSTDINには対応できないから無名変数みたいな変なコードになってるんだね。このコードキモいが、シェルスクリプトで書くなら一旦変数に入れて2行にすれば普通に書けるね。xxdもopensslもないならsed使う方法がいいね。あと、WebSocketサーバーをshで実現するのに使おうとしているsocatコマンドもBuildroot標準では入ってないんだけど、このコマンド便利かも。ソケット・ファイル・コマンド等から入力して、別のソケット・ファイル・コマンド等に出力できる。これ使えばshでサーバー作れちゃう。類似のでnetcat(nc)コマンドってのもあるようだが、これはコマンドにパイプで直接渡すことはできないみたいで、使ってる人の情報見るとfifoで中継してたりする。netcatはBusyBoxの機能で有効にできるみたいだが、Buildroot標準で入ってないからnetcat入れるならsocatのが良さげ。WebSocketサーバー作ろうとしたが、うまくいかないハンドシェイクはできるが次にsendとかcloseしても受け取れない。STM32が使えない・・・[AD]rentafree.net。