home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Spezial / SPEZIAL2_97.zip / SPEZIAL2_97.iso / ANWEND / ONLINE / SREFV12J / SREFAST4.CMD < prev    next >
OS/2 REXX Batch file  |  1997-06-30  |  5KB  |  179 lines

  1. /* SREFAST post filter procedurer main program, ver 1.2i
  2. */
  3.  
  4. /*     ---------- User Changeable Parameters     ------------- */
  5.  
  6.  
  7. /* ---------Get stuff sent from SREFAST -----------------*/
  8. sref_fast_postf:
  9. parse arg source, request , seloriginal,enmadd,basesem,mysem,myqueue,servername,host_nickname, ,
  10.     response_status,verbose,tempfile,used_file
  11.  
  12. source0=source ; request0=request ; selrec=seloriginal
  13. parse var source myaddr port transaction who whoport . /* Often useful */
  14. parse var request verb uri protocol .        /* split up the request line */
  15.  
  16. post_filter_message='SREFAST post-filter.'
  17.  
  18. /*check for 400 status */
  19. are1=strip(word(response_status,1))
  20. if are1>399 then
  21.    record_option='NO'
  22. else
  23.    record_option=strip(get_value('RECORD_OPTION'))
  24.  
  25. if verbose>2 then say " Status message: " post_filter_message
  26. /* check for owner suppression */
  27.  
  28. call check_owner_suppress
  29. if is_owner_suppress=1 then do
  30.        record_option='NO'
  31.        if verbose>2 then say " Not recording OWNER or SUPERUSER request "
  32. end
  33.  
  34. post_filter=strip(get_value('POST_FILTER'))
  35. write_logs=strip(get_value('WRITE_LOGS'))
  36.  
  37.  
  38. if (record_option="NO" & post_filter=0  & write_logs=0) then do /* nothing to do in post filter */
  39.     return ' '
  40. end
  41.  
  42. record_all_file=get_value('RECORD_ALL_FILE',0)
  43. post_filter=get_value('POST_FILTER')
  44. postfilter_name=get_value('POSTFILTER_NAME')
  45.  
  46. selrec=sref_replacestrg(selrec,',','%2c','ALL')
  47. request0=sref_replacestrg(request0,',','%2c','ALL')
  48. post_filter_message=sref_replacestrg(post_filter_message,',','%2c','ALL')
  49.  
  50. browser=' ';authuser=' '
  51. thereferer=reqfield('referer')
  52. if write_logs=1 then do
  53.  
  54.   clientname0=sref_clientname(who,mysem,myqueue,basesem,enmadd,transaction)
  55.  
  56.   browser=reqfield('user-agent')
  57.   goo=reqfield('AUTHORIZATION:')
  58.   authuser='-'
  59.   if goo<>" "  then do
  60.       parse var goo . m64 .              /* get the encoded cookie */
  61.       dec=pack64(m64)                       /* and decode it */
  62.       parse upper var dec authuser ':' .      /* split to userid */
  63.   end
  64. end
  65.  
  66. fust=' '
  67. afield=reqfield('Authorization')
  68. authuser=' '
  69. if afield<>' ' then do
  70.   parse var afield . m64 .              /* get the encoded cookie */
  71.   dec=pack64(m64)                       /* and decode it */
  72.   parse upper var dec authuser ':' .
  73. end
  74. therefer=reqfield('Referer')
  75. browser=reqfield('User-agent')
  76. got_def=0
  77.  
  78. a=rxqueue('s',enmadd||'POSTF')
  79. queue  record_option ',' record_all_file ',' post_filter ',' postfilter_name ',' port ',' ,
  80.                  post_filter_message ',' source0 ',' request0 ',' got_def' 'selrec ',' ,
  81.                 tempfile ','  servername ',' host_nickname ',' used_file ',' who ',' ,
  82.                 enmadd ',' thereferer ',' fuse ',' RESPONSE_STATUS ',' write_logs ',' ,
  83.                 clientname0 ',' authuser ',' browser ',' verbose
  84. aa=eventsem_post(basesem||'POSTF')
  85. return ' '  /* note that postfilter and recorder don't need to tell the filter anything*/
  86.  
  87. /***********/
  88. /* check on owner suppression */
  89. check_owner_suppress:
  90. chkowner=get_value('HIT_OWNER_SUPPRESS')
  91.  
  92. is_owner_suppress=0
  93. if chkowner=1 then do
  94.   if owners=' ' then owners=get_value('Owners')
  95.   if wordpos(who,owners)>0  then do
  96.        is_owner_suppress=1
  97.   end
  98. end
  99. return is_owner_suppress
  100.  
  101.  
  102.  
  103. /* ------------------------------------------------------ */
  104. /* query and wait on helper threads */
  105. /* ------------------------------------------------------*/
  106. wait_queue: procedure expose os2e mysem myqueue enmadd basesem  ,
  107.           mytid verbose  transaction no_virtual servername host_nickname 
  108. parse arg athread,args,extra1
  109. athread=strip(athread) ; args=strip(args)
  110. /* check to see if no need to call queue */
  111.  
  112. a1=check_queue_do(athread,enmadd,args,extra1)
  113. parse var a1 istat ',' ires
  114. if istat=1 then do
  115.    ires=strip(ires)
  116.    return ires
  117. end
  118.  
  119. again1t:
  120.  
  121. goober=enmadd||athread
  122.   a=rxqueue('s',goober)
  123.   queue  transaction ' ' host_nickname ',' myqueue ',' mysem ','  ARGS
  124.  
  125.   a=eventsem_reset(mysem)
  126.   dothread=basesem||athread
  127.  
  128.   a=eventsem_post(dothread)
  129. again2t:
  130.   a=eventsem_wait(mysem)
  131.  
  132.   if a<>0 then do
  133.         call pmprintf_sref(mytid','athread' A Fatal Semaphore failure: 'a)
  134.         String 'Web server is temporarily busy '
  135.         exit ' '
  136.   end
  137.   a=rxqueue('s',myqueue)
  138.  
  139.   parse pull aline
  140.   PARSE VAR ALINE idnum ',' aline
  141.   idnum=strip(translate(idnum,' ','000d0a'x));TRANSACTION=STRIP(TRANSACTION)
  142.   if idnum<>transaction then  do /*wierd error: got someone else's message! */
  143.       say ' Read odd id from queue 'athread ':' transaction ',' idnum
  144.       if eventsem_query(mysem)=1 then aa=eventsem_reset(mysem)
  145.      signal again2t
  146.   end
  147.  
  148.   aline=strip(aline)
  149.   return aline
  150.  
  151.  
  152.  
  153.  
  154. /* ----------- */
  155. /* get environment value, possibly host specific
  156. hname=0 -- do not look under hostname
  157. hname=1 -- do not look under default
  158.  */
  159. /* ------------ */
  160. get_value: procedure expose enmadd host_nickname
  161. parse upper arg vname,hname0
  162. if hname0=0 then
  163.         hname=' '
  164. else
  165.     hname=strip(host_nickname)
  166.  
  167. vname=strip(vname) ;
  168. if hname<>' ' then do
  169.    booger=strip(enmadd||vname||'.'||hname)
  170.    aval=value(booger,,'os2environment')
  171.    if aval<>' ' | hname0=1 Then
  172.         return aval
  173. end
  174. aval=value(enmadd||vname,,'os2environment')
  175. return aval
  176.  
  177.  
  178.  
  179.