summaryrefslogtreecommitdiff
path: root/lib/soap/streamHandler.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/soap/streamHandler.rb')
-rw-r--r--lib/soap/streamHandler.rb219
1 files changed, 0 insertions, 219 deletions
diff --git a/lib/soap/streamHandler.rb b/lib/soap/streamHandler.rb
deleted file mode 100644
index d6b9c3bdca..0000000000
--- a/lib/soap/streamHandler.rb
+++ /dev/null
@@ -1,219 +0,0 @@
-# SOAP4R - Stream handler.
-# Copyright (C) 2000, 2001, 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
-
-# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
-# redistribute it and/or modify it under the same terms of Ruby's license;
-# either the dual license version in 2003, or any later version.
-
-
-require 'soap/soap'
-require 'soap/property'
-
-
-module SOAP
-
-
-class StreamHandler
- Client = begin
- require 'http-access2'
- if HTTPAccess2::VERSION < "2.0"
- raise LoadError.new("http-access/2.0 or later is required.")
- end
- HTTPAccess2::Client
- rescue LoadError
- STDERR.puts "Loading http-access2 failed. Net/http is used." if $DEBUG
- require 'soap/netHttpClient'
- SOAP::NetHttpClient
- end
-
- RUBY_VERSION_STRING = "ruby #{ RUBY_VERSION } (#{ RUBY_RELEASE_DATE }) [#{ RUBY_PLATFORM }]"
-
- class ConnectionData
- attr_accessor :send_string
- attr_accessor :send_contenttype
- attr_accessor :receive_string
- attr_accessor :receive_contenttype
-
- def initialize
- @send_string = nil
- @send_contenttype = nil
- @receive_string = nil
- @receive_contenttype = nil
- @bag = {}
- end
-
- def [](idx)
- @bag[idx]
- end
-
- def []=(idx, value)
- @bag[idx] = value
- end
- end
-
- attr_accessor :endpoint_url
-
- def initialize(endpoint_url)
- @endpoint_url = endpoint_url
- end
-
- def self.parse_media_type(str)
- if /^#{ MediaType }(?:\s*;\s*charset=([^"]+|"[^"]+"))?$/i !~ str
- raise StreamError.new("Illegal media type.");
- end
- charset = $1
- charset.gsub!(/"/, '') if charset
- charset || 'us-ascii'
- end
-
- def self.create_media_type(charset)
- "#{ MediaType }; charset=#{ charset }"
- end
-end
-
-
-class HTTPPostStreamHandler < StreamHandler
- include SOAP
-
-public
-
- attr_reader :client
- attr_accessor :wiredump_file_base
-
- NofRetry = 10 # [times]
-
- def initialize(endpoint_url, options)
- super(endpoint_url)
- @client = Client.new(nil, "SOAP4R/#{ Version }")
- @wiredump_file_base = nil
- @charset = @wiredump_dev = nil
- @options = options
- set_options
- @client.debug_dev = @wiredump_dev
- end
-
- def inspect
- "#<#{self.class}:#{endpoint_url}>"
- end
-
- def send(soap_string, soapaction = nil, charset = @charset)
- send_post(soap_string, soapaction, charset)
- end
-
- def reset
- @client.reset(@endpoint_url)
- end
-
-private
-
- def set_options
- @client.proxy = @options["proxy"]
- @options.add_hook("proxy") do |key, value|
- @client.proxy = value
- end
- @client.no_proxy = @options["no_proxy"]
- @options.add_hook("no_proxy") do |key, value|
- @client.no_proxy = value
- end
- if @client.respond_to?(:protocol_version=)
- @client.protocol_version = @options["protocol_version"]
- @options.add_hook("protocol_version") do |key, value|
- @client.protocol_version = value
- end
- end
- set_cookie_store_file(@options["cookie_store_file"])
- @options.add_hook("cookie_store_file") do |key, value|
- set_cookie_store_file(value)
- end
- set_ssl_config(@options["ssl_config"])
- @options.add_hook("ssl_config") do |key, value|
- set_ssl_config(@options["ssl_config"])
- end
- @charset = @options["charset"] || XSD::Charset.charset_label($KCODE)
- @options.add_hook("charset") do |key, value|
- @charset = value
- end
- @wiredump_dev = @options["wiredump_dev"]
- @options.add_hook("wiredump_dev") do |key, value|
- @wiredump_dev = value
- @client.debug_dev = @wiredump_dev
- end
- basic_auth = @options["basic_auth"] ||= ::SOAP::Property.new
- set_basic_auth(basic_auth)
- basic_auth.add_hook do |key, value|
- set_basic_auth(basic_auth)
- end
- @options.lock(true)
- basic_auth.unlock
- end
-
- def set_basic_auth(basic_auth)
- basic_auth.values.each do |url, userid, passwd|
- @client.set_basic_auth(url, userid, passwd)
- end
- end
-
- def set_cookie_store_file(value)
- return unless value
- raise NotImplementedError.new
- end
-
- def set_ssl_config(value)
- return unless value
- raise NotImplementedError.new
- end
-
- def send_post(soap_string, soapaction, charset)
- data = ConnectionData.new
- data.send_string = soap_string
- data.send_contenttype = StreamHandler.create_media_type(charset)
-
- if @wiredump_file_base
- filename = @wiredump_file_base + '_request.xml'
- f = File.open(filename, "w")
- f << soap_string
- f.close
- end
-
- extra = {}
- extra['Content-Type'] = data.send_contenttype
- extra['SOAPAction'] = "\"#{ soapaction }\""
-
- @wiredump_dev << "Wire dump:\n\n" if @wiredump_dev
- begin
- res = @client.post(@endpoint_url, soap_string, extra)
- rescue
- @client.reset(@endpoint_url)
- raise
- end
- @wiredump_dev << "\n\n" if @wiredump_dev
-
- receive_string = res.content
-
- if @wiredump_file_base
- filename = @wiredump_file_base + '_response.xml'
- f = File.open(filename, "w")
- f << receive_string
- f.close
- end
-
- case res.status
- when 405
- raise PostUnavailableError.new("#{ res.status }: #{ res.reason }")
- when 200, 500
- # Nothing to do.
- else
- raise HTTPStreamError.new("#{ res.status }: #{ res.reason }")
- end
-
- data.receive_string = receive_string
- data.receive_contenttype = res.contenttype
-
- return data
- end
-
- CRLF = "\r\n"
-end
-
-
-end