=================================================================== RCS file: /home/cvs/OpenXM/src/kan96xx/Doc/httpd-rpc.sm1,v retrieving revision 1.1 retrieving revision 1.9 diff -u -p -r1.1 -r1.9 --- OpenXM/src/kan96xx/Doc/httpd-rpc.sm1 2002/10/23 13:38:50 1.1 +++ OpenXM/src/kan96xx/Doc/httpd-rpc.sm1 2002/10/29 10:54:17 1.9 @@ -1,4 +1,4 @@ -%% $OpenXM$ +%% $OpenXM: OpenXM/src/kan96xx/Doc/httpd-rpc.sm1,v 1.8 2002/10/29 00:19:56 takayama Exp $ %% http server by sm1. Used for RPC. Generic example. [(parse) (httpd.sm1) pushfile] extension pop @@ -9,9 +9,26 @@ def /httpd.port 8090 def /httpd.serial 0 def -/httpd.image.name (kobeuniv2.jpg) def +/httpd.oxasir.timer 1 def %% 1 to use timer, but it accepts only one command + %% 0 not to use timer. It accepts programs. +%%******* Put initialization codes for ox_asir here. +/httpd.initialization + [(if(1){) + (XM_debug=0; ctrl("debug_window",0); Xm_noX=1;) + ("Asirweb version 0.80. "+ + " Risa/Asir oxasir version "+rtostr(version());) + (};) + ] cat +def +/httpd.asirman + ("http://www.math.sci.kobe-u.ac.jp/OpenXM/1.2.1/doc/asir2000/html-eg/man_toc.html") +def +/httpd.asirman.ja + ("http://www.math.sci.kobe-u.ac.jp/OpenXM/1.2.1/doc/asir2000/html-jp/man_toc.html") +def + [(parse) (oxasir.sm1) pushfile] extension oxNoX (oxasir.started) boundp { @@ -20,6 +37,9 @@ oxNoX [(x^2-1) (x)] fctr pop oxasir.ccc oxmathcap oxasir.ccc oxsetmathcap + oxasir.ccc httpd.initialization oxexecutestring ; + (Initialization returns ...: ) messagen + oxasir.ccc oxpopcmo message ; } ifelse /webrpc { @@ -34,13 +54,16 @@ oxNoX [ ox.win.start.0 aload pop (iexplore) %% Starting internet explorer (TM). - [(http://localhost:) httpd.port toString] cat + [(http://) [(sm1.socket) (gethostname) []] extension + (:) httpd.port toString] cat ] [ ] 3] extension }{ %% On unix. - [(sleep 3 ; netscape http://localhost:) httpd.port toString ( & ) ] cat + [(sleep 3 ; netscape http://) + [(sm1.socket) (gethostname) []] extension + (:) httpd.port toString ( & ) ] cat system } ifelse @@ -53,15 +76,15 @@ oxNoX /httpd_action { [/in-httpd /ff /httpd.com /httpd.result /sss /sss.engine /sss.web /err - /oxserver.vname + /oxserver.vname /scheck ] pushVariables [ { [(sm1.socket) (select) [httpd.server.fd 0 get -1]] extension %% wait for ever [(sm1.socket) (readHTTP) [httpd.server.fd 0 get ]] extension /ff set - ff length 0 eq { - (connection is closed.) message + ff tag 0 eq { + (connection is closed.) message exit } { (------------ start ----------------------) message @@ -71,12 +94,24 @@ oxNoX [(httpd.com=) httpd.com] cat message (------------ end ----------------------) message ( ) message - httpd.serial 0 eq { - /httpd.com httpd.initialization def - } { } ifelse + httpd.com metaCommand { httpd.textarea.valid { + %%% Security check + [(regionMatches) httpd.com + httpd.refusedCommands] extension /scheck set + scheck 0 get -1 eq { + }{ + httpd.refusedCommands scheck 2 get get message + (Command is refused.) message + [ + httpd.refusedCommands scheck 2 get get + httpd.com + ] + send-page-refused exit + } ifelse + %%% Executing command, here. oxasir.ccc httpd.com cookedCommand @@ -120,8 +155,10 @@ oxNoX httpd.result message (----------------------------------) message ( ) message - + + (----------- error -------------) message err message + (-------------------------------) message err [ ] eq { } { oxasir.ccc cleanErrors @@ -173,10 +210,7 @@ oxNoX (Content-Type: text/html) sendln 0 sendln - (

Usage


) sendln - [(Ask by GET /?) httpd.textarea.name (=) ( encoded_codes HTTP/1.0)] cat - sendln - (
) sendln + (

OpenXM/Risa/Asir Online


) sendln [(getenv) (OXWEB_POST)] extension tag 0 eq { (
) sendln % use get }{ @@ -184,12 +218,30 @@ oxNoX } ifelse () sendln [()] cat sendln + ( rows=7 cols="80" wrap="soft">)] cat sendln (
) sendln - [$ Shutdown the server. , $ - ] cat sendln + (Input example---factorization: fctr(x^3-1)) sendln + (
) sendln + [( + AsirManual (En) , )] cat sendln + [( + AsirManual (Ja) )] cat sendln + httpd.oxasir.timer { + (
It accepts only one command. The limit of CPU time is 30 seconds. + Do not put ; + (semi-colon) after the command. + ) sendln + }{ } ifelse + (
) sendln + [(You can also retrieve the result by GET /?) httpd.textarea.name (=) ( encoded_codes HTTP/1.0)] cat + sendln + (
) sendln + [$ Shutdown the oxserver (and restart it). $ + ] cat sendln + (

Powered by OpenXM and httpd on Kan/sm1

_) sendln 0 sendln [(flush)] extension ] pop @@ -205,7 +257,8 @@ oxNoX /result arg1 def (HTTP/0.9 200 OK) sendln (Connection: close) sendln - (Content-Type: text/html) sendln + [(Content-length: ) result length toString ] cat sendln + (Content-Type: text/plain) sendln 0 sendln result sendln @@ -215,17 +268,51 @@ oxNoX popVariables } def -%%******* Put initialization codes for ox_asir here. -/httpd.initialization - [ - (XM_debug=0; ctrl("debug_window",0); Xm_noX=1;) - ("Asirweb version 0.80. "+ - " Risa/Asir oxasir version "+rtostr(version());) - ] cat -def +/send-page-refused { + /arg1 set + [/in-send-page-refused /reason] pushVariables + [ + /reason arg1 def + (HTTP/0.9 200 OK) sendln + (Connection: close) sendln + (Content-Type: text/html) sendln + 0 sendln + (

Your request is refused.


) sendln + (Because your input contains the key word ) sendln + reason 0 get sendln + ( ) sendln + (

) sendln + (Your input is
) sendln + (
 ) sendln
+  reason 1 get sendln
+  (
) sendln + + 0 sendln + [(flush)] extension + ] pop + popVariables +} def + +%% **** Overwrites the definition in httpd.sm1 +/httpd_startserver { + (httpd server accessible outside localhost.) message + %% get the hostname of this machine. + [(sm1.socket) (open) [httpd.port + [(sm1.socket) (gethostname) [ ] ]extension ] ] + extension + /httpd.server.fdAndPort set + (sm1.socket.open returns ) messagen httpd.server.fdAndPort message + [(sm1.socket) (accept) [httpd.server.fdAndPort 0 get]] extension + /httpd.server.fd set + (connected.) message + (sm1.socket.accept returns ) messagen + httpd.server.fd message + +} def + %% ******* sample of cooked command -/cookedCommand { +/cookedCommand.simplest { /arg1 set [/in-cookedCommand /httpd.com] pushVariables [ @@ -236,3 +323,37 @@ def popVariables arg1 } def +/cookedCommand { + /arg1 set + [/in-cookedCommand /httpd.com /fff] pushVariables + [ + /httpd.com arg1 def + httpd.oxasir.timer not { + [(if (1) {) httpd.com (; };)] cat + /fff set + }{ +%% It does not work. +%% [$timer(30,eval_str("$ +%% (if (1) {) httpd.com (; };) +%% $"),"Computation is aborted with the resource limit ( 30 seconds)");$ +%% ] cat + [$timer(30,$ httpd.com + $,"Computation is aborted with the resource limit ( 30 seconds) or there was a syntax error.");$ + ] cat + /fff set + } ifelse + (cooked command is ) messagen fff message + /arg1 fff def + ] pop + popVariables + arg1 +} def +/httpd.refusedCommands + [(shell) (eval_str) (ox_) (sm1_) + (m_start) (m_N_) (m_Inverse) (m_TexForm) %(m_) + (connect) (load) (bload) (bsave) + (end) (quit) (output) (bload27) (open) + (plot) (ctrl) (debug) (error) (port) (bind) (accept) + (draw) (peek) (poke) + ] +def