=================================================================== RCS file: /home/cvs/OpenXM/src/kan96xx/Doc/cgi.sm1,v retrieving revision 1.11 retrieving revision 1.16 diff -u -p -r1.11 -r1.16 --- OpenXM/src/kan96xx/Doc/cgi.sm1 2004/11/23 02:38:46 1.11 +++ OpenXM/src/kan96xx/Doc/cgi.sm1 2013/09/25 07:30:52 1.16 @@ -1,4 +1,4 @@ -% $OpenXM: OpenXM/src/kan96xx/Doc/cgi.sm1,v 1.10 2004/11/23 02:19:16 takayama Exp $ +% $OpenXM: OpenXM/src/kan96xx/Doc/cgi.sm1,v 1.15 2013/09/22 08:07:51 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) @@ -108,6 +112,9 @@ cgiPolymake.errorMessage message exit } { } ifelse [(read) 0 cgi.content_length] extension /cgi.query_string set + cgiPolymake.log { + cgi.query_string (string) dc sm1log + } { } ifelse cgi.query_string isString { cgi.query_string length 0 eq { cgiPolymake.errorMessage message exit @@ -224,8 +231,51 @@ 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 addStdoutStderr oxshell @@@stdout /pp set + [(curl --form ) [key (=@/tmp/sm1-q-cgi.txt )] cat ff1 (>/tmp/sm1-q-cgi-out.txt)] cat /ff set + ff system + [nl (/tmp/sm1-q-cgi-out.txt) pushfile] cat /pp set + + cgi.verbose { pp message } { } ifelse + [(cgiHttpToKeyValuePair) pp] extension /pp2 set + pp2 message +% 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 @@ -241,6 +291,7 @@ def [(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 @@ -290,6 +341,9 @@ def (If not, it calls http://polymake.math.kobe-u.ac.jp/cgi-bin/cgi-polymake.sh) (to make a computation in polymake.) (See doPolymake for the syntax. doPolymake.OoHG may overrides doPolymake.) + (If you use curl to call the server execute) + ( usePolymake.OoHG.curl) + (after loading cgi.sm1) ]] putUsages /doPolymake.OoHG { /arg1 set @@ -299,7 +353,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 @@ -316,7 +370,7 @@ def % cgi-polymake (Trying web service.) message pAction pNative cgiQueryPolymake /doPolymake.OoHG.result set - + doPolymake.OoHG.result /@@@doPolymake.vars set [(regexec) (Not Found) [doPolymake.OoHG.result 0 get ]] extension length 0 eq not { doPolymake.OoHG.result message @@ -366,6 +420,39 @@ def (polymake2tfb is not installed in this system.) error } { } ifelse } def + + +/usePolymake.local { + /doPolymake { doPolymake.local } def + /polymake.start { polymake.start.local } def +} def + +/usePolymake.OoHG.native { + /doPolymake { doPolymake.OoHG } def + /polymake.start { polymake.start.OoHG } def + /cgiQueryPolymake { cgiQueryPolymake.native } def +} def + +/usePolymake.OoHG.curl { + /doPolymake { doPolymake.OoHG } def + /polymake.start { polymake.start.OoHG } def + /cgiQueryPolymake { cgiQueryPolymake.curl } def +} def + +[(usePolymake.OoHG.native) +[(doPolymake = doPolymake.OoHG with cgiQueryPolymake.native) + (cf. doPolymake.OoHG) +]] putUsages + +[(usePolymake.OoHG.curl) +[(doPolymake = doPolymake.OoHG with cgiQueryPolymake.curl) + (It should be used when cgiQueryPolymake.native does not work) + (over, e.g., a reverse proxy.) + (The command curl is required. cf. cgi.verbose, doPolymake.OoHG) +]] putUsages + + + \ No newline at end of file