=================================================================== RCS file: /home/cvs/OpenXM/src/kan96xx/Doc/cgi.sm1,v retrieving revision 1.6 retrieving revision 1.14 diff -u -p -r1.6 -r1.14 --- OpenXM/src/kan96xx/Doc/cgi.sm1 2004/09/28 12:20:39 1.6 +++ OpenXM/src/kan96xx/Doc/cgi.sm1 2013/09/22 05:17:17 1.14 @@ -1,4 +1,4 @@ -% $OpenXM: OpenXM/src/kan96xx/Doc/cgi.sm1,v 1.5 2004/09/27 11:18:23 takayama Exp $ +% $OpenXM: OpenXM/src/kan96xx/Doc/cgi.sm1,v 1.13 2013/09/22 01:07:38 takayama Exp $ % OpenXM/src/polymake/cgi/cgi-polymake.sh % is a shell script to call sm1/polymake as a CGI script. % Override as /doPolymake {doPolymake.OoHG} def if you need. @@ -41,7 +41,10 @@ [[(URL),(/index.html)] ] /kv set [(cgiKeyValuePairToUrlEncodingString) kv] extension /sss set - [(GET ) , sss , ( HTTP/0.9) , nl , nl ] cat /sss2 set +% [(GET ) , sss , ( HTTP/0.9) , nl , nl ] cat /sss2 set + [(GET ) , sss , ( HTTP/0.9) , nl , + (HOST: ) , url , nl + nl ] cat /sss2 set sss2 message [(sm1.socket) (connect) [80 url]] extension 0 get /goo set @@ -86,6 +89,7 @@ /cgiPolymake.polymakeName (polymake) def %/cgiPolymake.polymakeName (polymake_dummy) def %/cgiPolymake.polymakeName (hoge) def +/cgiPolymake.log 1 def [(cgiPolymake) [(Make sm1 to a polymake server based on CGI/OoHG) @@ -93,11 +97,24 @@ ]] putUsages % Server-side-script % oxMessageBody=action input-data-for-polymake -% sm1 -q -s "[(parse) (cgi.sm1) pushfile] extension cgiPolymake quit " -% env QUERY_STRING="t?oxMessageBody=FACETS+POINTS+1+0+0%0A" sm1 -q -s "[(parse) (cgi.sm1) pushfile] extension cgiPolymake quit " +% t.t : oxMessageBody=FACETS++POINTS%0A1+0+0+%0A1+1+0+%0A1+0+1%0A +% t?oxMe... +% env CONTENT_LENGTH=57 sm1 -q -s "[(parse) (cgi.sm1) pushfile] extension cgiPolymake quit " ) nl - (
) nl + () nl () nl () nl @@ -214,24 +231,95 @@ def % ------------ client side script --------------- /cgiQueryPolymake.hostname (polymake.math.kobe-u.ac.jp) def /cgiQueryPolymake.cginame (/cgi-bin/cgi-polymake.sh) def -/cgiQueryPolymake { +%/cgiQueryPolymake { cgiQueryPolymake.curl } def +/cgiQueryPolymake { cgiQueryPolymake.native } def +/cgiQueryPolymake.curl { /arg2 set /arg1 set + [/saction /sfile /ff /ff1 /sss2 /goo /pp /pp2 /key /body /fd] pushVariables + [ + /saction arg1 def /sfile arg2 def +% step1. Generate query in URL encoding. + [(http://) cgiQueryPolymake.hostname cgiQueryPolymake.cginame] cat + /ff1 set +% full URL necessary for virtual host of apache. + [[(oxMessageBody) + [saction ( ) + sfile nl ] cat + ] + ] /ff set + + ff 0 get 0 get /key set + ff 0 get 1 get /body set +% step 2. Call the server and get the response in pp + /cgi.verbose 1 def + (/tmp/sm1-q-cgi.txt) (w) file /fd set + fd body writestring + fd closefile + [(curl) (--form) [key (=@/tmp/sm1-q-cgi.txt)] cat ff1] /ff set + ff message + ff + addStdoutStderr oxshell + @@@stdout /pp set + pp message + @@2stderr message + (-----) message + % For the case of error. + [(regexec) (200 OK) [pp]] extension length 0 eq { + (sss2=) message + sss2 message + (pp=) message + pp message + (cgi.sm1: there seems to be an error in the HTTP connection.) + } { } ifelse + + cgi.verbose { pp message } { } ifelse + [(cgiHttpToKeyValuePair) pp] extension /pp2 set + +% step 3. Analyze the response. + [pp2 (Content-Body) getNode + pp2 (oxshell-stdout) getNode + pp2 (oxshell-stderr) getNode + ] /arg1 set + ] pop + popVariables + arg1 +} def + +/cgiQueryPolymake.native { + /arg2 set /arg1 set [/saction /sfile /ff /ff1 /sss2 /goo /pp /pp2] pushVariables [ /saction arg1 def /sfile arg2 def % step1. Generate query in URL encoding. - [[(URL) cgiQueryPolymake.cginame] - [(oxMessageBody) - [saction ( ) - sfile nl ] cat - ]] /ff set - [(cgiKeyValuePairToUrlEncodingString) ff] extension /ff1 set - [(GET ) , ff1 , ( HTTP/0.9) , nl , nl ] cat /sss2 set + [(http://) cgiQueryPolymake.hostname cgiQueryPolymake.cginame] cat + /ff1 set +% full URL necessary for virtual host of apache. + [[(oxMessageBody) + [saction ( ) + sfile nl ] cat + ] + ] /ff set + [(cgiKeyValuePairToUrlEncodingString) ff] extension /ff set + [(POST ) , ff1 , ( HTTP/0.9) , nl , +% (Connection: Keep-Alive) , nl , + (HOST: ) cgiQueryPolymake.hostname , nl , + (Content-length: ) , ff length (dollar) dc , nl , nl + ff nl] cat /sss2 set % step 2. Call the server and get the response in pp [(sm1.socket) (connect) [80 cgiQueryPolymake.hostname]] extension 0 get /goo set [(sm1.socket) (write) [goo sss2]] extension goo readHTTP0 /pp set + + % For the case of error. + [(regexec) (200 OK) [pp]] extension length 0 eq { + (sss2=) message + sss2 message + (pp=) message + pp message + (cgi.sm1: there seems to be an error in the HTTP connection.) + } { } ifelse + cgi.verbose { pp message } { } ifelse [(sm1.socket) (close) [goo]] extension [(cgiHttpToKeyValuePair) pp] extension /pp2 set @@ -246,8 +334,18 @@ def arg1 } def +/cgi.test1 { + (FACETS) + [(POINTS) nl + (1 0 0 ) nl + (1 1 0 ) nl + (1 0 1 ) nl + ] cat + cgiQueryPolymake message +} def % Overrides doPolymake %/doPolymake { doPolymake.OoHG } def +%/polymake.start { polymake.start.OoHG } def [(doPolymake.OoHG) [(It first looks for local polymake. If there is, it calls the local polymake.) @@ -263,7 +361,7 @@ def [ arg1 0 get /pAction set arg1 1 get /pData set - polymake.start + polymake.start.OoHG /pError [ ] def %% step 1: polymake tfb ===> polymake native data @@ -281,7 +379,15 @@ def (Trying web service.) message pAction pNative cgiQueryPolymake /doPolymake.OoHG.result set + [(regexec) (Not Found) [doPolymake.OoHG.result 0 get ]] + extension length 0 eq not { + doPolymake.OoHG.result message + (The polymake cgi seems to be out of service.) error + } { } ifelse + doPolymake.OoHG.result 0 get /pNative set + + pError doPolymake.OoHG.result rest append /pError set } { % local polymake @@ -303,6 +409,24 @@ def ] pop popVariables arg1 +} def + +/polymake.start.OoHG { + (ox.k0.loaded) boundp { } + { [(parse) (ox.sm1) pushfile] extension + /@@@polymake.k0.ccc [ ] def + } ifelse + @@@polymake.k0.ccc [ ] eq { + k0connectr /@@@polymake.k0.ccc oxk0.ccc def /oxk0.ccc [ ] def + @@@polymake.k0.ccc oxsetmathcap @@@polymake.k0.ccc oxmathcap + } { } ifelse + @@@polymake.k0.ccc 0 get (closed) eq { + k0connectr /@@@polymake.k0.ccc oxk0.ccc def /oxk0.ccc [ ] def + @@@polymake.k0.ccc oxsetmathcap @@@polymake.k0.ccc oxmathcap + } { } ifelse + [(which) (polymake2tfb)] oxshell tag 0 eq { + (polymake2tfb is not installed in this system.) error + } { } ifelse } def