Welcome to the "trac"-ing site of soap4r!
[soap4r] [httpclient] [openpgp4u] [pkcs1] [logger] [csv] [vtr]

Changeset 1822

Show
Ignore:
Timestamp:
05/31/07 22:38:50 (2 years ago)
Author:
nahi
Message:
  • now you can access to HTTP-Cookies with SOAP::RPC::SOAPlet.cookies from servant implementation (MT-safe). added cookies client / server sample. closes #321.
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lib/soap/mapping/mapping.rb

    r1810 r1822  
    506506 
    507507  class << Mapping 
     508  public 
     509 
     510    def protect_threadvars(*symbols) 
     511      backup = {} 
     512      begin 
     513        symbols.each do |sym| 
     514          backup[sym] = Thread.current[sym] 
     515        end 
     516        yield 
     517      ensure 
     518        symbols.each do |sym| 
     519          Thread.current[sym] = backup[sym] 
     520        end 
     521      end 
     522    end 
     523 
    508524  private 
    509525 
     
    524540    end 
    525541 
    526     def protect_threadvars(*symbols) 
    527       backup = {} 
    528       begin 
    529         symbols.each do |sym| 
    530           backup[sym] = Thread.current[sym] 
    531         end 
    532         yield 
    533       ensure 
    534         symbols.each do |sym| 
    535           Thread.current[sym] = backup[sym] 
    536         end 
    537       end 
    538     end 
    539  
    540542    def add_md_ary(md_ary, ary, indices, registry) 
    541543      for idx in 0..(ary.size - 1) 
  • trunk/lib/soap/rpc/cgistub.rb

    r1731 r1822  
    3535 
    3636    def meta_vars; end 
     37 
     38    def cookies; end 
    3739  end 
    3840 
     
    5456      } 
    5557    end 
     58 
     59    def cookies 
     60      if cookie = ENV['HTTP_Cookie'] || ENV['Cookie'] 
     61        [WEBrick::Cookie.parse(cookie)] 
     62      end 
     63    end 
    5664  end 
    5765 
     
    7280        'HTTP_SOAPACTION' => @request.env['HTTP_SOAPAction'] 
    7381      } 
     82    end 
     83 
     84    def cookies 
     85      if cookie = @request.env['HTTP_Cookie'] || @request.env['Cookie'] 
     86        [WEBrick::Cookie.parse(cookie)] 
     87      end 
    7488    end 
    7589  end 
  • trunk/lib/soap/rpc/soaplet.rb

    r1817 r1822  
    8686      setup_req(conn_data, req) 
    8787      @router.external_ces = @options[:external_ces] 
    88       conn_data = @router.route(conn_data) 
    89       setup_res(conn_data, req, res) 
     88      Mapping.protect_threadvars(:SOAPlet) do 
     89        SOAPlet.cookies = req.cookies 
     90        conn_data = @router.route(conn_data) 
     91        setup_res(conn_data, req, res) 
     92      end 
    9093    rescue Exception => e 
    9194      conn_data = @router.create_fault_response(e) 
     
    100103      logger.debug { "SOAP response: " + res.body } if logger 
    101104    end 
     105  end 
     106 
     107  def self.cookies 
     108    if var = Thread.current[:SOAPlet] 
     109      var[:Cookies] 
     110    else 
     111      nil 
     112    end 
     113  end 
     114 
     115  def self.cookies=(cookies) 
     116    var = Thread.current[:SOAPlet] = {} 
     117    var[:Cookies] = cookies 
    102118  end 
    103119 
     
    115131 
    116132  def setup_res(conn_data, req, res) 
     133    res['content-type'] = conn_data.send_contenttype 
     134    if cookies = SOAPlet.cookies 
     135      res['set-cookie'] = cookies.to_s 
     136    end 
    117137    if conn_data.is_nocontent 
    118138      res.status = WEBrick::HTTPStatus::RC_ACCEPTED 
     
    120140      return 
    121141    end 
    122     res['content-type'] = conn_data.send_contenttype 
    123142    if conn_data.is_fault 
    124143      res.status = WEBrick::HTTPStatus::RC_INTERNAL_SERVER_ERROR 
  • trunk/lib/soap/streamHandler.rb

    r1817 r1822  
    137137  def send(endpoint_url, conn_data, soapaction = nil, charset = @charset) 
    138138    conn_data.soapaction ||= soapaction # for backward conpatibility 
    139     send_post(endpoint_url, conn_data, charset) 
     139    conn_data = send_post(endpoint_url, conn_data, charset) 
     140    @client.save_cookie_store if @cookie_store 
     141    conn_data 
    140142  end 
    141143