=================================================================== RCS file: /home/cvs/OpenXM/doc/OpenXM-specs/ox-rfc-104.oxw,v retrieving revision 1.1 retrieving revision 1.4 diff -u -p -r1.1 -r1.4 --- OpenXM/doc/OpenXM-specs/ox-rfc-104.oxw 2004/09/18 11:40:16 1.1 +++ OpenXM/doc/OpenXM-specs/ox-rfc-104.oxw 2020/03/14 01:21:56 1.4 @@ -1,18 +1,19 @@ -$OpenXM$ +$OpenXM: OpenXM/doc/OpenXM-specs/ox-rfc-104.oxw,v 1.3 2004/10/14 07:05:21 takayama Exp $ /*&C + OX-RFC: 104 Nobuki Takayama - September 18, 2004 + October 14, 2004 */ -//&en OX-RFC100 over HTTP GET protocol -//&ja HTTP GET protocol $B$GJq$`$3$H$K$h$k(B OX-RFC 100 $B7A<0$NDL?.J}K!(B +//&en OX-RFC100 over HTTP protocol +//&ja HTTP protocol で包むことによる OX-RFC 100 形式の通信方法 /*&C Status of this memo This is an experimental specification of sending OpenXM 100 packets - over http-GET and https-GET. + over http (GET) and https. Distribution of this memo is unlimited. Copyright Notice @@ -20,125 +21,141 @@ Copyright Notice */ +//&ja @@要約 +//&en @@Abstract /*&ja -@@$BMWLs(B. - OpenXM 100 $B7A<0$NDL?.$r(B HTTP GET ($B$^$?$O(B POST) $B$G(B wrap $B$9$k$3$H$K$h$j(B, - OpenXM 100 $BBP1~$N%5!<%P$rMF0W$K(B CGI $B%5!<%S%92=$G$-$k(B. - $B$^$?(B OpenXM $B$N%5!<%S%9$r@)8B$5$l$?%M%C%H%o!<%/4D6-$G$b%0%j%C%I2=$7$F$$$/(B - $B$3$H$,2DG=$H$J$k(B. + OpenXM 100 形式の通信を HTTP GET (または POST) で wrap する方法を定義 + する. この wrapping により, 次のことを実現することを目標とする. + 1. OpenXM 100 対応のサーバを容易に CGI サービス化する. + 2. OpenXM のサービスを http を基本にグリッド化する. - OpenXM 100 $B$G$O%5!<%P$rN)$A>e$2$k$K$O(B "login" $B$9$k$3$H$,0lHL$KI,MW$G$"$k$,(B, - $BITFCDj?M$,0lEY$N$_$N7W;;MxMQ$r$9$k$h$&$J>l9g$K$b(B, $B$^$?(B OpenXM 100 $B$HF1MM$K(B - login $B$7$F(B session $B$r0];}$9$k$3$H$b2DG=$J$h$&$K(B - OpenXM-100 over HTTP GET ($B0J2<(B OoHG $B$HN,5-(B) $B$O@_7W$5$l$F$$$k(B. + OpenXM 100 ではサーバを立ち上げるには "login" することが一般に必要である. + OpenXM-100 over HTTP GET (以下 OoHG と略記) は次のように login不要, + login必要の二つの動作モードをもつ. + 1. 不特定人が一度のみの計算利用をするような場合に login 不要で動作する. + 2. OpenXM 100 と同様に login して session を維持することも可能である. - $B$3$N%a%b$G$O(B HTTP GET $B$H(B HTTPS $B$7$+4{B85;=Q$OMxMQ$7$F$$$J$$(B. - Web $B5;=Q$K4X$7$F8=:_8&5fCf$de$N$3$H$rr7o$K9gCW$9$k8B$j(B Web $B5;=Q$K4X$7$F8=:_8&5fCf$d - ssh $B$K$h$k(B server $B$X$N(B login. - localhost $B$G$O(B ox100start/ox $B$J$I$N(B launcher $B$,D>@\5/F0$5$l$k(B. - controle server, engine server $B$H$N@\B3$r3NN)$9$k$?$a$N(B - $B%]!<%HHV9f$*$h$S(B -control= ... , -data=... - $BG'>ZJ}K!$*$h$S(B -authtype=NONE | <> - $BG'>Z%Q%9%o!<%I(B -passControl=... , -passData=... - $B$bAw?.$5$l$k(B. - $BG'>Z%Q%9%o!<%I$N0E9f(B -authEncoding=<> | file | RSA - $B2=J}K!$N;XDj(B. - << >> $B$O(B src/kxx/ox $B$NI8=`CM(B + ssh による server への login. + localhost では ox100start/ox などの launcher が直接起動される. + controle server, engine server との接続を確立するための + ポート番号および -control= ... , -data=... + 認証方法および -authtype=NONE | <> + 認証パスワード -passControl=... , -passData=... + も送信される. + 認証パスワードの暗号 -authEncoding=<> | file | RSA + 化方法の指定. + << >> は src/kxx/ox の標準値 <---------------- step 2 --------------------------> - -reverse $B$N>l9g$O(B <--- $B$N8~$-$K(B TCP/IP $B@\B3$,3NN)$5$l$k(B. - $B$=$&$G$J$$$H$-$O(B ---> $B$N8~$-$K(B TCP/IP $B@\B3$,3NN)$5$l$k(B. + -reverse の場合は <--- の向きに TCP/IP 接続が確立される. + そうでないときは ---> の向きに TCP/IP 接続が確立される. <---------------- step 3 --------------------------> - -authtype=oneTimePassword $B$N;~(B. - connect $B$7$?B&$,(B accept $B$7$?B&$X(B oneTimePassword $B$rAw$k(B. + -authtype=oneTimePassword の時. + connect した側が accept した側へ oneTimePassword を送る. - $B0J2<(B launcher $B$N;E;v$O=*N;$7$F(B, engine $B$H(B control $B$K@)8f$,0\$k(B. + 以下 launcher の仕事は終了して, engine と control に制御が移る. <---------------- step 4 --------------------------> - engine $B$N(B byte order $B$r@_Dj(B. + engine の byte order を設定. <----------------------------------------------------> - OpenXM $B$N%Q%1%C%H8r49(B + OpenXM のパケット交換 - $B>\$7$/$O(B OX-RFC-100, OX-RFC 103 (OX-RFC 100 $BJd0d(B) $B$r8+$h(B. + 詳しくは OX-RFC-100, OX-RFC 103 (OX-RFC 100 補遺) を見よ. */ +//&en @@Data structure of OoHG +//&ja @@OoHG のデータ形式. + /*&ja -@@ OoHG $B$N%G!<%?7A<0(B. +OoHG での通信は送信, 受信で非対称である. +GET を利用するためデータの形式は RFC 2396 で指定されている +いわゆる URL エンコーディング方法を用いる. +GET の利用の代わりに POST method を利用してもよい. +送信データは + キーワード = 値 +を & で区切ったものである. キーワードは英数字と _ をもちいるものとする. +キーワードと値の組は入れ子構造となってもよい. -OoHG $B$G$O%G!<%?$OAw?.(B, $BN$G$"$k(B. -GET $B$rMxMQ$9$k$?$a%G!<%?$N7A<0$O(B RFC 2396 $B$G;XDj$5$l$F$$$k(B -$B$$$o$f$k(B URL $B%(%s%3!<%G%#%s%0J}K!$rMQ$$$k(B. -GET $B$NMxMQ$NBe$o$j$K(B POST method $B$rMxMQ$7$F$b$h$$(B. -$B%G!<%?$O(B - $B%-!<%o!<%I(B = $BCM(B -$B$r(B & $B$G6h@Z$C$?$b$N$G$"$k(B. $B%-!<%o!<%I$O1Q?t;z$H(B _ $B$r$b$A$$$k$b$N$H$9$k(B. -$B%-!<%o!<%I$HCM$NAH$OF~$l;R9=B$$H$J$C$F$b$h$$(B. +受信データは次の形式で送信する. -$B0J2<%-!<%o!<%I$rNs5s$9$k(B. + OX100-OVER-HTTP-GET0-に下のキーワードをつないだもの : URL エンコードされた値 -oxMessageBody: OpenXM $B$N%Q%1%C%H(B. $BJ#?t$N(B OX $B%Q%1%C%H$r0lEY$KAw$C$F$h$$(B. +以下キーワードを列挙する. -oxMessageEncoding: OpenXM $B$N%Q%1%C%H$N(B encoding $BJ}K!$N;XDj(B. - <> $B$,>JN,;~$NCM(B. - $BJ}K!$O0J2<$N$H$*$j(B. - 1. xml_ox100 (OX-RFC100 $B$KDj5A$5$l$?(B XML $BI=8=(B) - 2. lisplike_ox100 (OX-RFC100 $B$KDj5A$5$l$?(B Lisp$BIwI=8=(B) - 3. binary_ox100 (OX-RFC100 $B$KDj5A$5$l$?(B binary $BI=8=(B) +oxMessageBody: OpenXM のパケット. 複数の OX パケットを一度に送ってよい. + +oxMessageEncoding: OpenXM のパケットの encoding 方法の指定. + <> が省略時の値. + 方法は以下のとおり. + 1. xml_ox100 (OX-RFC100 に定義された XML 表現) + 2. lisplike_ox100 (OX-RFC100 に定義された Lisp風表現) + 3. binary_ox100 (OX-RFC100 に定義された binary 表現) 4. text_executeString_popString - $B$3$l$O0lEY$N$_$Ne$N?t;z$GM?$($k(B. - $B%5!<%P$,M?$($k%-!<$O(B nextChannelKey (Cookie $B$KAjEv(B). - ($B%M%C%H%o!<%/$,EpD0$5$l$F$$$k$H$-$O(B, $B$3$NJ}K!$OL5NO$G$"$k(B. - https $B$+(B $BJN,;~$K$O(B oxMessageEncoding $B$KBP1~$7$?J}K!$G(B - $BK\BNItJ,$OAw$i$l$k(B. - nextChannelKey $BEy$N>pJs$OFC$K;XDj$7$J$$>l9g(B - OX100-OVER-HTTP-GET-nextChannelKey: $B$K$h$k(B - header $B$rMQ$$$?JVEz$r9T$&(B. - text_execute_popString $B$N;~$O(B text $B7A<0$GAw?.$5$l$k(B. - $B>\:Y8e=R(B. - $B$=$NB>(B. +responseEncoding: サーバの返答の encoding 方法. + 省略時には oxMessageEncoding に対応した方法で + 本体部分は送られる. + nextChannelKey 等の情報は特に指定しない場合 + OX100-OVER-HTTP-GET-nextChannelKey: による + header を用いた返答を行う. + text_execute_popString の時は text 形式で送信される. + 詳細後述. + その他. 1. presentation_html -loginRSA: RSA $BG'>Z$K$h$k(B login. nextSessionKey $B$O%/%i%$%"%s%H$N(B - public key $B$rMQ$$$FAw?.$5$l$k(B. - RSA $B$K$D$$$F$O(B OX-RFC 103 $B$r8+$h(B. +loginRSA: RSA 認証による login. challenge , challenge-response は + お互いの public key を用いて送信される. 下の例参照. + RSA については OX-RFC-103 を見よ. logout: logout @@ -149,29 +166,41 @@ nextControlChannelKey: challenge: challenge-response: +以下のキーワードについては後述. +doSignature: +response-doSignature: +getMathCap2: +grepDirectoryInfo: +sendPublicKey: + */ +//&ja @@始めての例 +//&en @@The first example /*&ja -@@ $B;O$a$F$NNc(B +例1. +fctr(x^2-1); を fctr.cgi へ送信する. +*/ -$BNc(B1. -fctr(x^2-1); $B$r(B fctr.cgi $B$XAw?.$9$k(B. +//&C http://fctr.openxm.org/fctr.cgi?oxMessageBody=fctr(x%5E2-1)%3B - http://fctr.openxm.org/fctr.cgi?oxMessageBody=fctr(x%5E2-1)%3B +/*&ja +oxMessageBody 以外の全てのキーワードが省略されているので, +anonymous, 1 回のみの実行, executeString & popString, 返答は text 形式 +となり +*/ +//&C [[1,1],[x-1],[x+2]] +/*&ja +が戻る. +*/ -oxMessageBody $B0J30$NA4$F$N%-!<%o!<%I$,>JN,$5$l$F$$$k$N$G(B, -anonymous, 1 $B2s$N$_$N http://fctr.openxm.org/fctr.cgi?loginRSA="takayama@hoge.org" <--- @@ -179,7 +208,7 @@ RSA $B0E9f2=$5$l$F$kItJ,$O(B ' ... '$B$G5-=R(B. OX100-OVER-HTTP-GET-dataChannelId: 4011 OX100-OVER-HTTP-GET-challenge: '.............' ---> - http://fctr.openxm.org/fctr.cgi?chanllenge-response: '..........' + http://fctr.openxm.org/fctr.cgi?chanllenge-response='..........' <--- OX100-OVER-HTTP-GET-nextChannelKey: 143245 OX100-OVER-HTTP-GET-nextControlChannelKey: 534256 @@ -200,33 +229,274 @@ RSA $B0E9f2=$5$l$F$kItJ,$O(B ' ... '$B$G5-=R(B. http://fctr.openxm.org/fctr.cgi?dataChannelId=4011& channelKey=345137& logout& - */ +//&ja @@エラーコード一覧. + +/*&ja + +HTTP 準拠のエラーの他, CMO エラー object を responseEncoding に従い +送る. + +<< 以下まだ検討してない >> + +*/ + +//&ja @@コントロールプロセスとの通信 + /*&ja -@@ $B%(%i!<%3!<%I0lMw(B. +接続中の connection が切断された場合, エンジン, コントロールサーバともに +終了する. +コントロールサーバに中断メッセージを送った場合, OX-RFC-103 の中断動作 +をおこなう. +<< 以下まだ書いてない >> -<< $B$^$@8!F$$7$F$J$$(B >> +*/ +//&ja @@ホストのなりすましの防止 + +/*&ja + https を利用する場合はサーバが偽物でないことの証明は https の機能を用いて + 実現される. http の場合には RSA public キーを用いてサーバが偽物でない + ことを証明することが可能である. このためのキーワードが doSignature + である. */ +//&C doSignature=anonymous@fctr.openxm.org,'challenge words encrypted' /*&ja + 'challenge words encrypted' は anonymous@fctr.openxm.org の public key + を用いて RSA 暗号化される. サーバは response-DoSignature + キーワードを用いて送られた words をクライアントに戻す. -@@ $B%3%s%H%m!<%k%W%m%;%9$H$NDL?.(B +*/ -<< $B$^$@=q$$$F$J$$(B >> +//&ja @@OpenXM grid のサービス一覧提供方法. +//&en @@Directory service for OpenXM grid. +//&C @@@mathCap2 + +/*&ja + mathCap2 は + キーワード = 値 + 形式で表現された mathCap である. キーワードは以下のとおり. + + systemName + systemVersion + acceptOXtags + acceptSMtags + acceptCMOtags + + exportedCommands + 実行可能な関数名 + + 値は + [名前,引数の数,引数1のデータ型, 引数2のデータ型, ...] 形式のリストである. + 引数の数が -1 の場合引数は不定. + 引数のデータ型は省略してもよい. + + データ型の表現方法は XML name space の表記方法を用い, 文字列型で戻す. + なおPolymorphic な関数の場合は同じ関数名で表記してかまわない. + 例: + ["gcd", 2, + "", + "" ] + + + resourceLimit + [time,値], [memory,値] 等の リスト + + 注意: systemName, systemVersion, acceptOXtags, acceptSMtags, acceptCMOtags + は現在の MathCap の戻す情報にほかならない. + + 注意: ある一定のサーバでは変数に格納されたデータも関数として取り出す + + systemName は Java の package の命名方法の真似をする. + 例: org.openxm.ox_sm1 + org.openxm.ox_polymake_2 + */ +//&C @@@SM_getMathCap2 +/*&ja +SM_printMathCap2 はそのサーバの mathCap2 を CMO データとして戻す +新しいスタックマシンコマンドである. +何らかのサービスを提供するサーバは +*/ +//&C (OX_COMMAND,(SM_getMathCap2)) (OX_COMMAND,(SM_popCMO)) +/*&ja +が実行可能であるべきである. このコマンドは anonymous に実行を許す場合 +もあるので, (OX_COMMAND,(SM_getMathCap2)) (OX_COMMAND,(SM_popCMO)) +の省略形式が OoHG のキーワード + getMathCap2=1 +として用意されている. +*/ +//&C Example: http://fctr.openxm.org/fctr.cgi?getMathCap2=1 + +//&C @@@ディレクトリサービス /*&ja +OpenXM grid のディレクトリサービスは各サーバの mathCap2 の情報をもとに +している. 信用のおけるディレクトリサービスを実現するためには +サーバの RSA public key が必須である. このキーがあると doSignature +をもとにディジタル署名された mathCap2 情報を得ることが可能となる. -@@ OpenXM grid $B$N%5!<%S%90lMwDs6!J}K!(B. +OpenXM grid のディレクトリ情報は + キーワード=値 +の集合体である. +この情報は次のいずれかの方法を用いて表現する. +1. キーワードを要素とする XML として表現. + XML の根要素は OpenXMnode. OpenXMnode の集まりは OpenXMnodes. +2. CMO のリストとして キーワード, 値 のペアとして表現する. -<< $B$^$@8!F$$7$F$J$$(B >> +必須のキーワード + OpenXMnodeURL, mathCap2, listOfAnonymousPublicKeys +OpenXM directory サーバはこれらの情報を検索して返答する. +Directory サーバもまた OpenXM エンジンである. +たとえば factor をキーワードとする +grep 検索は以下のとおり. + (OX_DATA,(CMO_STRING,"factor")) + (OX_DATA,(CMO_INT32,1)) + (OX_DATA,(CMO_STRING,"ox104_grepDirectoryInfo")) + (OX_COMMAND,(SM_execute)) + (XO_COMMAND,(SM_popCMO)) +同等な機能を実現する OoHG 用のキーワードとして + grepDirectoryInfo +がある. +例: grepDirectoryInfo="factor" + */ -$Id: ox-rfc-104.oxw,v 1.1 2004/09/18 11:40:16 takayama Exp $ +//&en @@@OX-104 Directory service +//&ja @@@OX-104 Directory サービス +/*&ja + +Directory サーバはいわゆる agent の一種である. +Directory サーバは個人のローカルマシンで動作させてよいが, +ox-rfc-104 では anonymous な計算サービスの検索のため, +いわゆる根となるべき directory server を以下のように定義する. +URLは以下のとおり. + http://ox104_directory.openxm.org/cgi-bin/ox104_directory.sh + http://ox104_directory.math.kobe-u.ac.jp/cgi-bin/ox104_directory.sh + http://ox104_directory.math.kyushu-u.ac.jp/cgi-bin/ox104_directory.sh + http://ox104_directory.s.kanazawa-u.ac.jp/cgi-bin/ox104_directory.sh + +OX-server ox104_directory は次の関数をもつ. + 1. ox104_findSystem(String systemName) + + ox サーバを検索して戻す. 見付けたものを (cmo) リストとする. + 例: + ox104_findSystem("org.openxm.ox_polymake_2"); + [server= + [url="http://polymake.math.kobe-u.ac.jp/cgi-bin/cgi-polymake.sh", + protocol="org.openxm.ox-rfc-104", + description="CGI 版の polymake サーバ. Version 2 ベース", + version="??", + loadAverage=0, + cpuType=, memory=, anonymous=]] + + なお directoryServer=[...] として情報が戻る場合は, + あらためてそのサーバに聞く必要がある. + + 例: + ox104_findSystem("org.openxm.ox_sm1"); + [localServer= + [path="/usr/local/OpenXM/bin/ox_sm1", + protocol="org.openxm.ox-rfc-100" + ]] + + 2. ox104_grepDirectoryInfo(String key) + 情報を grep して該当するサーバを戻す. + +OX-server ox104_directory は cash 機能を持つべきである. +サーバは機能の制限をしている場合がある. +その場合サーバに mathcap2 を問い合わせる必要がある. +*/ + +//&en @@@list of system names +//&ja @@@システム名のリスト + +/*&C + org.openxm.ox_polymake_2 + org.openxm.ox_asir + org.openxm.ox_sm1 + << It has not yet been completed. >> +*/ + +//&ja @@@anonymous@host の RSA public key の入手方法 + +/*&ja + anonymous@host の RSA public key は別の信頼できる情報源から入手するか, + "host" にたいして + sendPublicKey="anonymous@host" + 要求を出すことにより入手する. +*/ + +/*&ja + +<< 以下, まだ検討してない >> + +*/ + +//&ja @@共通関数名 +//&en @@Common name of functions + +/*&ja + +名前 引数の数 +ox104_equal 2 +ox104_add 2 +ox104_sub 2 +ox104_times 2 +ox104_divide 2 +ox104_power 2 +ox104_inverse 1 +ox104_translate 2 + +*/ + + +//&ja @@関連する技術 +//&en @@Related technologies + +/*&ja + + IAMC (symbolicnet.org) + +*/ + +//&ja @@貢献者および試験実装 +//&en @@Contributors and sample implementations + + +/*&ja +まだサンプル実装はない. +*/ + +//&ja @@参考文献 +//&en @@Bibliography + +/*&C + +[OpenXM-RFC-100] Design and Implementation of OpenXM Client-Server Model + and Common Mathematical Object Format. M.Noro, N.Takayama + +[OpenXM-RFC-101] Protocol to Start Engines. K.Ohara + +[OpenXM-RFC-103] Supplement to OX-RFC-100 + --- Broadcasting in process trees and engine authentication. + OpenXM committers. + +[RFC1945] Hypertext Transfer Protocol -- HTTP/1.0. T. Berners-Lee, R. + Fielding, H. Frystyk. May 1996. (Format: TXT=137582 bytes) (Status: + INFORMATIONAL) + +[RFC2660] The Secure HyperText Transfer Protocol. E. Rescorla, A. + Schiffman. August 1999. (Format: TXT=95645 bytes) (Status: + EXPERIMENTAL) +*/ + + +$Id: ox-rfc-104.oxw,v 1.4 2020/03/14 01:21:56 takayama Exp $