[BACK]Return to httpd-rpc.sm1 CVS log [TXT][DIR] Up to [local] / OpenXM / src / kan96xx / Doc

Diff for /OpenXM/src/kan96xx/Doc/httpd-rpc.sm1 between version 1.9 and 1.12

version 1.9, 2002/10/29 10:54:17 version 1.12, 2002/11/10 07:00:03
Line 1 
Line 1 
 %% $OpenXM: OpenXM/src/kan96xx/Doc/httpd-rpc.sm1,v 1.8 2002/10/29 00:19:56 takayama Exp $  %% $OpenXM: OpenXM/src/kan96xx/Doc/httpd-rpc.sm1,v 1.11 2002/11/04 05:40:40 takayama Exp $
 %% http server by sm1. Used for RPC.  Generic example.  %% http server by sm1. Used for RPC.  Generic example.
   
 [(parse) (httpd.sm1) pushfile] extension pop  [(parse) (httpd.sm1) pushfile] extension pop
   
   /httpd_action {
      httpd_action_allow_file_transfer
           %% If OXWEB_HTTPD_ROOT is set, file transfer will be allowed.
           %% Example:  export OXWEB_HTTPD_ROOT=/usr/local/www/data/
           %% Do not forget the last /
   %  httpd_action_rpc_only    %% old
   } def
   %% keyword for rpc
 /httpd.textarea.name (rpc) def  /httpd.textarea.name (rpc) def
 /httpd.textarea.name.aaa  /httpd.textarea.name.aaa
   [(GET /?) httpd.textarea.name] cat (array) dc    [(GET /?) httpd.textarea.name] cat (array) dc
 def  def
 /httpd.port 8090 def  
   [(getenv) (OXWEB_PORT)] extension tag 0 eq {
     (Default httpd port : ) messagen
     /httpd.port 8090 def
   } {
     /httpd.port [(getenv) (OXWEB_PORT)] extension .. (integer) dc def
   } ifelse
   (httpd.port = ) messagen httpd.port message
   
 /httpd.serial 0 def  /httpd.serial 0 def
   
 /httpd.oxasir.timer 1 def  %% 1 to use timer, but it accepts only one command  /httpd.oxasir.timer 1 def  %% 1 to use timer, but it accepts only one command
                            %% 0 not to use timer. It accepts programs.                             %% 0 not to use timer. It accepts programs.
   
   /httpd.title
     (<H1><font color="green">OpenXM/Risa/Asir Online</font></H2><br>)
   def
 %%******* Put initialization codes for ox_asir here.  %%******* Put initialization codes for ox_asir here.
 /httpd.initialization  /httpd.initialization
  [(if(1){)   [(if(1){)
Line 73  oxNoX 
Line 93  oxNoX 
 } def  } def
   
   
 /httpd_action {  /httpd_action_rpc_only {
   [/in-httpd /ff /httpd.com /httpd.result /sss    [/in-httpd /ff /httpd.com /httpd.result /sss
    /sss.engine /sss.web /err     /sss.engine /sss.web /err
    /oxserver.vname /scheck     /oxserver.vname /scheck
Line 175  oxNoX 
Line 195  oxNoX 
 } def  } def
   
   
   /httpd_action_allow_file_transfer {
     [/in-httpd /ff /httpd.com /httpd.result /sss
      /sss.engine /sss.web /err
      /oxserver.vname /scheck /ff2
     ] pushVariables
     [
      (httpd_action_allow_file_transfer: ) message
     {
          [(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 tag 0 eq {
              (connection is closed.) message exit
           }
           {
             (------------  start ----------------------) message
                ff message
             (-----------------------------------------) message
                ff httpd.parse /ff2 set
                ff2 message
                /httpd.textarea.valid 0 def /httpd.com ( ) def
                ff2 0 get (GET-file) eq {
                   ff2 length 1 eq httpd.root tag 0 eq {
                     send-page-usage
                     exit
                   } {  } ifelse
                   ff2 httpd_sendfile exit
                } {  } ifelse
                ff2 0 get (GET) eq ff2 0 get (POST) eq or {
                 ff2 1 get tag 6 eq
                 ff2 1 get length 2 eq and
                 {  % list
                   ff2 1 get 0 get httpd.textarea.name eq {
                     /httpd.textarea.valid 1 def
                     /httpd.com ff2 1 get 1 get def
                   }{ } ifelse
                   ff2 1 get 0 get (msg) eq { %% meta command
                     /httpd.textarea.valid 0 def
                     /httpd.com ff2 1 get 1 get def
                   }{ } ifelse
                 } { } ifelse
                }{  } ifelse
                %% ff removeGET webstringToAscii /httpd.com set
                [(httpd.com=) httpd.com] cat message
             (------------  end ----------------------) message
             (   ) message
   
             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
                 oxexecutestring ;
   
               }{
                 send-page-usage  exit
               } ifelse
   
               [(oxReq) oxasir.ccc SM_dupErrors ] extension pop
   
               [(oxReq) oxasir.ccc SM_popCMO ] extension pop
               [(oxReq) oxasir.ccc SM_popString ] extension pop
   
               [(flush)] extension pop
               %% Select inputs for interruption.
               %% Wait by the spin lock.
               {
                 [(oxMultiSelect) [oxasir.ccc] 1] extension 1 get 0 get
                 /sss.engine set
                 [(sm1.socket) (mselect)
                   [[httpd.server.fd 0 get] 1]
                 ] extension 0 get /sss.web set
                 /sss [sss.engine sss.web] def
                 sss.engine { exit } { } ifelse
                 sss.web    { exit } { } ifelse
               } loop
               sss message
   
               sss 0 get {
                   [(oxGet) oxasir.ccc] extension  /err          set
                   [(oxGet) oxasir.ccc] extension  /httpd.result set
               } {
                   oxasir.ccc oxreset
                   oxasir.ccc ("computation is interrupted.";) oxexecutestring ;
                   oxasir.ccc oxpopstring
                   /httpd.result set
                   exit
               } ifelse
               (------------- result -------------) message
               httpd.result message
               (----------------------------------) message
               (  ) message
   
               (----------- error -------------) message
               err message
               (-------------------------------) message
               err [ ] eq  {
               } {
                 oxasir.ccc cleanErrors
                 [httpd.result 10 (string) dc err toString] cat
                 /httpd.result set
               } ifelse
   
               httpd.result send-page-result  exit  %% exit the loop LOOP-A
             } { exit } ifelse  %% metaCommand
           } ifelse
     } loop  %% LOOP-A
     ] pop
     popVariables
   } def
   
   
 /metaCommand {  /metaCommand {
   /arg1 set    /arg1 set
   [/in-metaCommand /msg /result /msg2 /nn    [/in-metaCommand /msg /result /msg2 /nn
Line 202  oxNoX 
Line 347  oxNoX 
   arg1    arg1
 } def  } def
   
    [
     (Input example---factorization:<font color="blue"> fctr(x^3-1)</font>)
     (<br>)
     [(<font color="blue">
       <a href=) httpd.asirman ( > AsirManual (En) </a> </font>, )] cat
     [(<font color="blue">
       <a href=) httpd.asirman.ja ( > AsirManual (Ja) </a> </font>)] cat
      httpd.oxasir.timer {
       (<br> It accepts only one command. The limit of CPU time is 30 seconds.
             <font color="red"> Do not put <font color="blue"> ; </font>
                                (semi-colon) after the command.
             </font>)
      }{ } ifelse
      (<br>)
     [(You can also retrieve the result by GET /?) httpd.textarea.name (=) ( encoded_codes  HTTP/1.0)]
      (<br>)
    ] cat /httpd.msg1 set
   
 /send-page-usage {  /send-page-usage {
   [/in-send-page-usage ] pushVariables    [/in-send-page-usage ] pushVariables
   [    [
Line 210  oxNoX 
Line 373  oxNoX 
    (Content-Type: text/html) sendln     (Content-Type: text/html) sendln
    0 sendln     0 sendln
   
   (<H1><font color="green">OpenXM/Risa/Asir Online</font></H2><br>) sendln    httpd.title sendln
   [(getenv) (OXWEB_POST)] extension tag 0 eq {    [(getenv) (OXWEB_POST)] extension tag 0 eq {
     (<FORM NAME="myFORM">) sendln  % use get      (<FORM NAME="myFORM">) sendln  % use get
   }{    }{
Line 221  oxNoX 
Line 384  oxNoX 
     ( rows=7 cols="80" wrap="soft"></textarea>)] cat sendln      ( rows=7 cols="80" wrap="soft"></textarea>)] cat sendln
    (</FORM>) sendln     (</FORM>) sendln
   
   (Input example---factorization:<font color="blue"> fctr(x^3-1)</font>) sendln     httpd.msg1 sendln
   (<br>) sendln  
   [(<font color="blue">  
     <a href=) httpd.asirman ( > AsirManual (En) </a> </font>, )] cat sendln  
   [(<font color="blue">  
     <a href=) httpd.asirman.ja ( > AsirManual (Ja) </a> </font>)] cat sendln  
    httpd.oxasir.timer {  
     (<br> It accepts only one command. The limit of CPU time is 30 seconds.  
           <font color="red"> Do not put <font color="blue"> ; </font>  
                              (semi-colon) after the command.  
           </font>) sendln  
    }{ } ifelse  
    (<br>) sendln  
   [(You can also retrieve the result by GET /?) httpd.textarea.name (=) ( encoded_codes  HTTP/1.0)] cat  
   sendln  
    (<br>) sendln  
    [$<a href="http://$ [(sm1.socket) (gethostname) []] extension     [$<a href="http://$ [(sm1.socket) (gethostname) []] extension
     $:$ httpd.port toString      $:$ httpd.port toString
     $/?msg=httpdAsirMeta+quit"> Shutdown the oxserver (and restart it). </a>$      $/?msg=httpdAsirMeta+quit"> Shutdown the oxserver (and restart it). </a>$
Line 258  oxNoX 
Line 407  oxNoX 
    (HTTP/0.9 200 OK) sendln     (HTTP/0.9 200 OK) sendln
    (Connection: close) sendln     (Connection: close) sendln
    [(Content-length: ) result length toString ] cat sendln     [(Content-length: ) result length toString ] cat sendln
    (Content-Type: text/plain) sendln     (Content-Type: text/html) sendln
      %(Content-Type: text/plain) sendln  % It does not work on some browsers.
    0 sendln     0 sendln
   
      (<html> <body> <pre>) sendln
    result sendln     result sendln
      (</pre> </body> </html>) sendln
    0 sendln     0 sendln
    [(flush)] extension     [(flush)] extension
   ] pop    ] pop

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.12

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>