著作一覧 |
何を考えたかというと、FastCGI抜きで同じような効果を得られるんじゃないかということ。というか得られるのはわかっているわけだから、Windowsで手軽に動かすにはhttp.sysを利用すれば良い。ではそれをどう呼ぶかということ。
問題点としては、HTTP_REQUEST構造体にPCSTRとPCWSTRが埋め込まれることだ。構造体そのものは、unpackすれば取り出せるけど、外部由来の文字列ポインタからRubyのStringを生成する機能は無い(リファレンスを読む限り)。ましてPCWSTRにおいておや(においておやで正しいかどうか怪しい)。拡張ライブラリ(IntegerをポインタとしてString型を作るようなクラス)を作れば良いのだがなんか急に簡単ポンではなくなってしまった。
次に山ほどhttp.hに定義されている構造体をどう取り込むか。これはるびまの青木さんの記事を元に構造体に埋め込まれた構造体も処理できるようなDSLを作ったからOKと思ったら、パディングを忘れてたり。でもパティングはUSHORTが出るあたりしかないから手でいいやとやってみたらなぜか数が合わない。offsetofしまくるCのプログラムと、オフセットを出力するFieldクラスを作って突合せればよいのだろうが、ちょっと面倒。
それにしても、http.sys(httpapi.lib)はおもしろい。
プリミティブについては、その型のサイズで割り切れる位置に配置。たとえばlong longなら0,8,16……、charなら0,1,2……(というかunsigned charがそうなのは知っていたが)。構造体や共用体はそのメンバ中の最大の型にあわせる(たとえばメンバの最大がshortなら0mod2)。かつ全体のサイズもその最大のメンバの0mod位置。
ジェズイットを見習え |