midrange.com code scratchpad
Name:
Persistent CGI example
Scriptlanguage:
Plain Text
Tabwidth:
4
Date:
12/12/2018 06:04:07 pm
IP:
Logged
Description:
An example of a persistent CGI program and config.
Code:
  1. Apache config.
  2.  
  3. # Configuration originally created by Create HTTP Server wizard on Wed Dec 12 07:39:42 CST 2018
  4. Listen *:8081                                                                                  
  5. DocumentRoot /www/cgitest/htdocs                                                               
  6. TraceEnable Off                                                                                
  7. Options +ExecCGI -FollowSymLinks -Includes                                                     
  8. LogFormat "%h %T %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined           
  9. LogFormat "%{Cookie}n \"%r\" %t" cookie                                                        
  10. LogFormat "%{User-agent}i" agent                                                               
  11. LogFormat "%{Referer}i -> %U" referer                                                          
  12. LogFormat "%h %l %u %t \"%r\" %>s %b" common                                                   
  13. CustomLog logs/access_log combined                                                             
  14. LogMaint logs/access_log 7 0                                                                   
  15. LogMaint logs/error_log 7 0                                                                    
  16. SetEnvIf "User-Agent" "Mozilla/2" nokeepalive                                                  
  17. SetEnvIf "User-Agent" "JDK/1\.0" force-response-1.0                                            
  18. SetEnvIf "User-Agent" "Java/1\.0" force-response-1.0                                           
  19. SetEnvIf "User-Agent" "RealPlayer 4\.0" force-response-1.0                                     
  20. SetEnvIf "User-Agent" "MSIE 4\.0b2;" nokeepalive                  
  21. SetEnvIf "User-Agent" "MSIE 4\.0b2;" force-response-1.0           
  22. CgiConvMode %%EBCDIC/EBCDIC%%                                     
  23. ScriptAlias /cgi-bin/erros /QSYS.LIB/E310PRDOBJ.LIB/E310H00000.PGM
  24. ScriptAliasMatch ^/cgi-bin/(.*) /QSYS.LIB/E310PRDOBJ.LIB/$1       
  25. <Directory />                                                     
  26.    Require all denied                                             
  27. </Directory>                                                      
  28. <Directory /www/cgitest/htdocs>                                   
  29.    Require all granted                                            
  30. </Directory>                                
  31. <Directory /QSYS.LIB/E310PRDOBJ.LIB>        
  32.    SetEnv QIBM_CGI_LIBRARY_LIST "E310PRDOBJ"
  33.    AuthName "Password Required"             
  34.    AuthType Basic                           
  35.    PasswdFile %%SYSTEM%%                    
  36.    UserID %%CLIENT%%                        
  37.    Require valid-user                       
  38.    Options +ExecCGI                         
  39.    SetHandler cgi-script                    
  40.   SetEnv QIBM_CGI_LIBRARY_LIST "E310PRDOBJ"
  41.   AuthName "Password Required"             
  42.   AuthType Basic                           
  43.   PasswdFile %%SYSTEM%%                    
  44.   UserID %%CLIENT%%                        
  45.   Require valid-user                       
  46.   Options +ExecCGI                         
  47.   SetHandler cgi-script                    
  48.   Order allow,deny                         
  49.   Allow from all                           
  50. </Directory>                               
  51.  
  52.  
  53. Initial CGI program.
  54.  
  55. **Free
  56.    Ctl-opt Dftactgrp(*NO) Actgrp('CGI');
  57.    Dcl-Pr E31RPP ExtPgm('E31RPP');
  58.      *N Char(5) Const;
  59.    End-Pr;
  60.  
  61.    E31RPP('*INIT');
  62.  
  63.    Return;   
  64.  
  65. Second CGI program.
  66.  
  67. **Free
  68.    Ctl-opt Dftactgrp(*NO) Actgrp('CGI') Bnddir('E310PRDOBJ/CGIBND');
  69.    // Needs QTCP/QTMHCGI added during compile. I put it in the CGIBND binding directory.
  70.  
  71.    // *ENTRY
  72.    Dcl-Pr E31RPP ExtPgm;
  73.      *N Char(5);
  74.    End-Pr;
  75.  
  76.    Dcl-Pi *N;
  77.      Init Char(5);
  78.    End-Pi;
  79.  
  80.    Dcl-Pr WriteStdOut Extproc('QtmhWrStout');
  81.      *N Char(2048) Const Options(*VarSize); // Buffer
  82.      *N Int(10) Const;                      // Buffer Length
  83.      *N LikeDs(Qusec) Options(*VarSize);    // Error
  84.    End-Pr;
  85.  
  86.    Dcl-S Buffer VarChar(2048);
  87.    Dcl-S Count Int(10);
  88.    Dcl-S Handle Char(15);
  89.    Dcl-C LineFeed Const(x'0D25');
  90.  
  91.    Dcl-Ds Qusec;
  92.      BytesProvided Int(10) Inz(%Size(Qusec));
  93.      ByteAvailable Int(10);
  94.      ErrorId Char(7);
  95.      Filler Char(1);
  96.      MessageData Char(500);
  97.    End-Ds;
  98.             
  99.  
  100.  
  101.    If %Parms() = 1;  // Called from E310H00000
  102.      Handle = '081895345701239';
  103.      Count = 0;
  104.    EndIf;
  105.  
  106.    Count += 1;
  107.  
  108.    Buffer = 'Accept-HTSession:' + Handle + LineFeed;
  109.    WriteStdOut(Buffer:%Len(Buffer):Qusec);
  110.    Buffer = 'Content-type: text/html' + LineFeed + LineFeed;
  111.    WriteStdOut(Buffer:%Len(Buffer):Qusec);
  112.    Buffer = '<html><head><title>CGI Example</title></head>' + LineFeed;
  113.    WriteStdOut(Buffer:%Len(Buffer):Qusec);
  114.    Buffer = '<body><br><br>Current Count is - ' + %Char(Count) + LineFeed;
  115.    WriteStdOut(Buffer:%Len(Buffer):Qusec);
  116.    Buffer = '<br><br><form name="cgiform" method="post" action="/cgi-bin/E31RPP.pgm/'
  117.      + Handle + '">' + LineFeed;
  118.    WriteStdOut(Buffer:%Len(Buffer):Qusec);
  119.    Buffer = '<input type="submit" value="Again"></form>' + LineFeed;
  120.    WriteStdOut(Buffer:%Len(Buffer):Qusec);
  121.    Buffer = '</body></html>' + LineFeed;
  122.    WriteStdOut(Buffer:%Len(Buffer):Qusec);
  123.  
  124.    Return;   
© 2004-2019 by midrange.com generated in 0.006s valid xhtml & css