Forum Discussion

andreoli_4699's avatar
andreoli_4699
Icon for Nimbostratus rankNimbostratus
Jan 13, 2010

HTTP::payload replace with MORE data?

Hi all, I have the following code:

 

 

      
      when HTTP_REQUEST priority 300 {      
      set original_payload [HTTP::payload]      
      set original_length [HTTP::header value Content-Length]      
      if { [lindex $session_var 7] == 1  and not ( [info exists all_done] ) } {      
      set original_request [HTTP::request]      
      HTTP::uri "/lookup.asp?id=[lindex $session_var 6]"      
      snatpool legacy-connect_snat      
      pool lookup.pool      
      event HTTP_REQUEST disable      
      } elseif { [info exists all_done] and $all_done == 1 } {      
      lset session_var 7 2      
      HTTP::header replace SOFTCERT_NUM $authkey      
      unset all_done      
      }      
      }      
            
      when HTTP_RESPONSE priority 300 {      
      if { [lindex $session_var 7] == 1  and not ( [info exists all_done] ) } {      
      HTTP::collect 1      
      }      
      }      
            
      when HTTP_RESPONSE_DATA priority 300 {      
      if { [lindex $session_var 7] == 1 and not ( [info exists all_done] ) } {      
      set authkey [HTTP::payload]      
      set all_done 1      
      event HTTP_REQUEST enable      
      HTTP::header replace "Content-Length" $original_length      
      HTTP::payload replace 0 $original_length $original_payload      
      HTTP::retry $original_request      
      }      
      }      
      

 

 

(Note that a few things, like session_var, are set by another script)

 

 

The purpose of this is to intercept a request, store the payload and length (1665 bytes) to a local variable, then take certificate information, and, by replacing the URI and doing a "pool" statement, go off and look up some data on another server. Upon return, it takes the reply data (10 bytes), stuffs it into another header, then HTTP::payload replace with what was originally gathered at the beginning. It then does a HTTP::retry with the original request.

 

 

Everything seems to be working great until I go to replace the payload, then it bombs with a "list index out of range". By playing around, it seems that since my payload went from 1665 bytes down to 10 through the lookup, it won't let me replace the payload with anything more than 10 bytes.

 

 

Does anyone have any idea how I can increase the buffer size that's allocated to this new payload so that I can replace it with the original data for my http::retry?

 

 

This is my first post, and I've been looking at this until my eyes bled, so be gentle 😉

 

 

Thanks!

 

Tony

15 Replies