=================================================================== RCS file: /home/cvs/OpenXM/doc/OpenXM-specs/ox-rfc-104.oxw,v retrieving revision 1.3 retrieving revision 1.4 diff -u -p -r1.3 -r1.4 --- OpenXM/doc/OpenXM-specs/ox-rfc-104.oxw 2004/10/14 07:05:21 1.3 +++ OpenXM/doc/OpenXM-specs/ox-rfc-104.oxw 2020/03/14 01:21:56 1.4 @@ -1,4 +1,4 @@ -$OpenXM: OpenXM/doc/OpenXM-specs/ox-rfc-104.oxw,v 1.2 2004/09/19 12:17:40 takayama Exp $ +$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 @@ -7,7 +7,7 @@ OX-RFC: 104 Nobuki */ //&en OX-RFC100 over HTTP protocol -//&ja HTTP protocol $B$GJq$`$3$H$K$h$k(B OX-RFC 100 $B7A<0$NDL?.J}K!(B +//&ja HTTP protocol で包むことによる OX-RFC 100 形式の通信方法 /*&C @@ -21,141 +21,141 @@ Copyright Notice */ -//&ja @@$BMWLs(B +//&ja @@要約 //&en @@Abstract /*&ja - OpenXM 100 $B7A<0$NDL?.$r(B HTTP GET ($B$^$?$O(B POST) $B$G(B wrap $B$9$kJ}K!$rDj5A(B - $B$9$k(B. $B$3$N(B wrapping $B$K$h$j(B, $Be$2$k$K$O(B "login" $B$9$k$3$H$,0lHL$KI,MW$G$"$k(B. - OpenXM-100 over HTTP GET ($B0J2<(B OoHG $B$HN,5-(B) $B$Ol9g$K(B login $BITMW$GF0:n$9$k(B. - 2. OpenXM 100 $B$HF1MM$K(B login $B$7$F(B session $B$r0];}$9$k$3$H$b2DG=$G$"$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 (POST) $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 $B$N%G!<%?7A<0(B. +//&ja @@OoHG のデータ形式. /*&ja -OoHG $B$G$NDL?.$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. -$BAw?.%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. +OoHG での通信は送信, 受信で非対称である. +GET を利用するためデータの形式は RFC 2396 で指定されている +いわゆる URL エンコーディング方法を用いる. +GET の利用の代わりに POST method を利用してもよい. +送信データは + キーワード = 値 +を & で区切ったものである. キーワードは英数字と _ をもちいるものとする. +キーワードと値の組は入れ子構造となってもよい. -$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) +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$_$NeB8:_$7$F(B - $B$h$$(B. $B$3$N>l9g(B and $B$H$7$F07$o$l$k(B. $B$?$H$($P(B + これは一度のみの実行を想定している. + executeString に与える引数を text 形式で与える. + 補助的な値として次のものがある. + a. 3DES Body を 3DES で暗号化する. + b. RSA Body を RSA で暗号化する. + なお oxMessageEncoding キーワードの値は二つ以上存在して + よい. この場合 and として扱われる. たとえば oxMessageEncoding=xml_ox100,3DES - $B$N>l9g(B xml_ox100 $B7A<0$N>pJs$,(B 3DES $B$G0E9f2=$5$l$F(B - $BAw$i$l$k(B. ("," $B$O(B URL encoding $B$5$l$k(B.) + の場合 xml_ox100 形式の情報が 3DES で暗号化されて + 送られる. ("," は URL encoding される.) -dataChannelId: data $B%]!<%H$NHV9f$KAjEv(B. -controlChannelId: control $B%]!<%H$NHV9f$KAjEv(B. -sessionKeyFor3Des: 64 bit x 3 3Des $BMQ$N(B Des Key. $B%5!<%PB&$,@8@.$7(B, - RSA $B$G0E9f2=$5$l%5!<%P$h$jAw?.$5$l$k(B. -channelKey: $B%5!<%P$h$j0l$DA0$N(B HTTP $B%H%i%s%:%"%/%7%g%s$GM?$($i$l$k(B - $B%-!<(B. $BBh#3e$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. challenge , challenge-response $B$O(B - $B$*8_$$$N(B public key $B$rMQ$$$FAw?.$5$l$k(B. $B2<$NNc;2>H(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 @@ -166,7 +166,7 @@ nextControlChannelKey: challenge: challenge-response: -$B0J2<$N%-!<%o!<%I$K$D$$$F$O8e=R(B. +以下のキーワードについては後述. doSignature: response-doSignature: getMathCap2: @@ -175,30 +175,30 @@ sendPublicKey: */ -//&ja @@$B;O$a$F$NNc(B +//&ja @@始めての例 //&en @@The first example /*&ja -$BNc(B1. -fctr(x^2-1); $B$r(B fctr.cgi $B$XAw?.$9$k(B. +例1. +fctr(x^2-1); を fctr.cgi へ送信する. */ //&C http://fctr.openxm.org/fctr.cgi?oxMessageBody=fctr(x%5E2-1)%3B /*&ja -oxMessageBody $B0J30$NA4$F$N%-!<%o!<%I$,>JN,$5$l$F$$$k$N$G(B, -anonymous, 1 $B2s$N$_$N @@ -232,55 +232,55 @@ RSA $B0E9f2=$5$l$F$kItJ,$O(B ' ... '$B$G5-=R(B. */ -//&ja @@$B%(%i!<%3!<%I0lMw(B. +//&ja @@エラーコード一覧. /*&ja -HTTP $B=`5r$N%(%i!<$NB>(B, CMO $B%(%i!<(B object $B$r(B responseEncoding $B$K=>$$(B -$BAw$k(B. +HTTP 準拠のエラーの他, CMO エラー object を responseEncoding に従い +送る. -<< $B0J2<$^$@8!F$$7$F$J$$(B >> +<< 以下まだ検討してない >> */ -//&ja @@$B%3%s%H%m!<%k%W%m%;%9$H$NDL?.(B +//&ja @@コントロールプロセスとの通信 /*&ja -$B@\B3Cf$N(B connection $B$,@ZCG$5$l$?>l9g(B, $B%(%s%8%s(B, $B%3%s%H%m!<%k%5!<%P$H$b$K(B -$B=*N;$9$k(B. -$B%3%s%H%m!<%k%5!<%P$KCfCG%a%C%;!<%8$rAw$C$?>l9g(B, OX-RFC-103 $B$NCfCGF0:n(B -$B$r$*$3$J$&(B. -<< $B0J2<$^$@=q$$$F$J$$(B >> +接続中の connection が切断された場合, エンジン, コントロールサーバともに +終了する. +コントロールサーバに中断メッセージを送った場合, OX-RFC-103 の中断動作 +をおこなう. +<< 以下まだ書いてない >> */ -//&ja @@$B%[%9%H$N$J$j$9$^$7$NKI;_(B +//&ja @@ホストのなりすましの防止 /*&ja - https $B$rMxMQ$9$k>l9g$O%5!<%P$,56J*$G$J$$$3$H$N>ZL@$O(B https $B$N5!G=$rMQ$$$F(B - $Bl9g$K$O(B RSA public $B%-!<$rMQ$$$F%5!<%P$,56J*$G$J$$(B - $B$3$H$r>ZL@$9$k$3$H$,2DG=$G$"$k(B. $B$3$N$?$a$N%-!<%o!<%I$,(B doSignature - $B$G$"$k(B. + https を利用する場合はサーバが偽物でないことの証明は https の機能を用いて + 実現される. http の場合には RSA public キーを用いてサーバが偽物でない + ことを証明することが可能である. このためのキーワードが doSignature + である. */ //&C doSignature=anonymous@fctr.openxm.org,'challenge words encrypted' /*&ja - 'challenge words encrypted' $B$O(B anonymous@fctr.openxm.org $B$N(B public key - $B$rMQ$$$F(B RSA $B0E9f2=$5$l$k(B. $B%5!<%P$O(B response-DoSignature - $B%-!<%o!<%I$rMQ$$$FAw$i$l$?(B words $B$r%/%i%$%"%s%H$KLa$9(B. + 'challenge words encrypted' は anonymous@fctr.openxm.org の public key + を用いて RSA 暗号化される. サーバは response-DoSignature + キーワードを用いて送られた words をクライアントに戻す. */ -//&ja @@OpenXM grid $B$N%5!<%S%90lMwDs6!J}K!(B. +//&ja @@OpenXM grid のサービス一覧提供方法. //&en @@Directory service for OpenXM grid. //&C @@@mathCap2 /*&ja - mathCap2 $B$O(B - $B%-!<%o!<%I(B = $BCM(B - $B7A<0$GI=8=$5$l$?(B mathCap $B$G$"$k(B. $B%-!<%o!<%I$O0J2<$N$H$*$j(B. + mathCap2 は + キーワード = 値 + 形式で表現された mathCap である. キーワードは以下のとおり. systemName systemVersion @@ -289,118 +289,118 @@ HTTP $B=`5r$N%(%i!<$NB>(B, CMO $B%(%i!<(B object  acceptCMOtags exportedCommands - $B(B + 実行可能な関数名 - $BCM$O(B - [$BL>A0(B,$B0z?t$N?t(B,$B0z?t(B1$B$N%G!<%?7?(B, $B0z?t(B2$B$N%G!<%?7?(B, ...] $B7A<0$N%j%9%H$G$"$k(B. - $B0z?t$N?t$,(B -1 $B$N>l9g0z?t$OITDj(B. - $B0z?t$N%G!<%?7?$O>JN,$7$F$b$h$$(B. + 値は + [名前,引数の数,引数1のデータ型, 引数2のデータ型, ...] 形式のリストである. + 引数の数が -1 の場合引数は不定. + 引数のデータ型は省略してもよい. - $B%G!<%?7?$NI=8=J}K!$O(B XML name space $B$NI=5-J}K!$rMQ$$(B, $BJ8;zNs7?$GLa$9(B. - $B$J$*(BPolymorphic $B$J4X?t$N>l9g$OF1$84X?tL>$GI=5-$7$F$+$^$o$J$$(B. - $BNc(B: + データ型の表現方法は XML name space の表記方法を用い, 文字列型で戻す. + なおPolymorphic な関数の場合は同じ関数名で表記してかまわない. + 例: ["gcd", 2, "", "" ] resourceLimit - [time,$BCM(B], [memory,$BCM(B] $BEy$N(B $B%j%9%H(B + [time,値], [memory,値] 等の リスト - $BCm0U(B: systemName, systemVersion, acceptOXtags, acceptSMtags, acceptCMOtags - $B$O8=:_$N(B MathCap $B$NLa$9>pJs$K$[$+$J$i$J$$(B. + 注意: systemName, systemVersion, acceptOXtags, acceptSMtags, acceptCMOtags + は現在の MathCap の戻す情報にほかならない. - $BCm0U(B: $B$"$k0lDj$N%5!<%P$G$OJQ?t$K3JG<$5$l$?%G!<%?$b4X?t$H$7$FJ}K!$N??;w$r$9$k(B. - $BNc(B: org.openxm.ox_sm1 + systemName は Java の package の命名方法の真似をする. + 例: org.openxm.ox_sm1 org.openxm.ox_polymake_2 */ //&C @@@SM_getMathCap2 /*&ja -SM_printMathCap2 $B$O$=$N%5!<%P$N(B mathCap2 $B$r(B CMO $B%G!<%?$H$7$FLa$9(B -$B?7$7$$%9%?%C%/%^%7%s%3%^%s%I$G$"$k(B. -$B2?$i$+$N%5!<%S%9$rDs6!$9$k%5!<%P$O(B +SM_printMathCap2 はそのサーバの mathCap2 を CMO データとして戻す +新しいスタックマシンコマンドである. +何らかのサービスを提供するサーバは */ //&C (OX_COMMAND,(SM_getMathCap2)) (OX_COMMAND,(SM_popCMO)) /*&ja -$B$,l9g(B -$B$b$"$k$N$G(B, (OX_COMMAND,(SM_getMathCap2)) (OX_COMMAND,(SM_popCMO)) -$B$N>JN,7A<0$,(B OoHG $B$N%-!<%o!<%I(B +が実行可能であるべきである. このコマンドは anonymous に実行を許す場合 +もあるので, (OX_COMMAND,(SM_getMathCap2)) (OX_COMMAND,(SM_popCMO)) +の省略形式が OoHG のキーワード getMathCap2=1 -$B$H$7$FMQ0U$5$l$F$$$k(B. +として用意されている. */ //&C Example: http://fctr.openxm.org/fctr.cgi?getMathCap2=1 -//&C @@@$B%G%#%l%/%H%j%5!<%S%9(B +//&C @@@ディレクトリサービス /*&ja -OpenXM grid $B$N%G%#%l%/%H%j%5!<%S%9$O3F%5!<%P$N(B mathCap2 $B$N>pJs$r$b$H$K(B -$B$7$F$$$k(B. $B?.MQ$N$*$1$k%G%#%l%/%H%j%5!<%S%9$r$5$l$?(B mathCap2 $B>pJs$rF@$k$3$H$,2DG=$H$J$k(B. +OpenXM grid のディレクトリサービスは各サーバの mathCap2 の情報をもとに +している. 信用のおけるディレクトリサービスを実現するためには +サーバの RSA public key が必須である. このキーがあると doSignature +をもとにディジタル署名された mathCap2 情報を得ることが可能となる. -OpenXM grid $B$N%G%#%l%/%H%j>pJs$O(B - $B%-!<%o!<%I(B=$BCM(B -$B$N=89gBN$G$"$k(B. -$B$3$N>pJs$OpJs$r8!:w$7$FJVEz$9$k(B. -Directory $B%5!<%P$b$^$?(B OpenXM $B%(%s%8%s$G$"$k(B. -$B$?$H$($P(B factor $B$r%-!<%o!<%I$H$9$k(B -grep $B8!:w$O0J2<$N$H$*$j(B. +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)) -$BF1Ey$J5!G=$rpJs$,La$k>l9g$O(B, - $B$"$i$?$a$F$=$N%5!<%P$KJ9$/I,MW$,$"$k(B. + なお directoryServer=[...] として情報が戻る場合は, + あらためてそのサーバに聞く必要がある. - $BNc(B: + 例: ox104_findSystem("org.openxm.ox_sm1"); [localServer= [path="/usr/local/OpenXM/bin/ox_sm1", @@ -408,15 +408,15 @@ OX-server ox104_directory $B$OpJs$r(B grep $B$7$F3:Ev$9$k%5!<%P$rLa$9(B. + 情報を grep して該当するサーバを戻す. -OX-server ox104_directory $B$O(B cash $B5!G=$r;}$D$Y$-$G$"$k(B. -$B%5!<%P$O5!G=$N@)8B$r$7$F$$$k>l9g$,$"$k(B. -$B$=$N>l9g%5!<%P$K(B mathcap2 $B$rLd$$9g$o$;$kI,MW$,$"$k(B. +OX-server ox104_directory は cash 機能を持つべきである. +サーバは機能の制限をしている場合がある. +その場合サーバに mathcap2 を問い合わせる必要がある. */ //&en @@@list of system names -//&ja @@@$B%7%9%F%`L>$N%j%9%H(B +//&ja @@@システム名のリスト /*&C org.openxm.ox_polymake_2 @@ -425,27 +425,27 @@ OX-server ox104_directory $B$O(B cash $B5!G=$r;}$D$ << It has not yet been completed. >> */ -//&ja @@@anonymous@host $B$N(B RSA public key $B$NF~pJs8;$+$iF~> +<< 以下, まだ検討してない >> */ -//&ja @@$B6&DL4X?tL>(B +//&ja @@共通関数名 //&en @@Common name of functions /*&ja -$BL>A0(B $B0z?t$N?t(B +名前 引数の数 ox104_equal 2 ox104_add 2 ox104_sub 2 @@ -458,7 +458,7 @@ ox104_translate 2 */ -//&ja @@$B4XO"$9$k5;=Q(B +//&ja @@関連する技術 //&en @@Related technologies /*&ja @@ -467,15 +467,15 @@ ox104_translate 2 */ -//&ja @@$B9W8%