]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blobdiff - lib/rbot/core/utils/httputil.rb
filters: DataStream can now be initialized with a String followed by a Hash
[user/henk/code/ruby/rbot.git] / lib / rbot / core / utils / httputil.rb
index d9b88839716d2a20f87611637ca7c50a454e1a89..3d4133e0a80a2b52ebd0878072272d9db94717e6 100644 (file)
@@ -101,6 +101,18 @@ module ::Net
           end
           return ret
         end
+      when 'deflate'
+        debug "inflating body"
+        # From http://www.koders.com/ruby/fid927B4382397E5115AC0ABE21181AB5C1CBDD5C17.aspx?s=thread: 
+        # -MAX_WBITS stops zlib from looking for a zlib header
+        inflater = Zlib::Inflate.new(-Zlib::MAX_WBITS)
+        begin
+          return inflater.inflate(str)
+        rescue Zlib::Error => e
+          raise e
+          # TODO
+          # debug "full inflation failed (#{e}), trying to recover as much as possible"
+        end
       else
         raise "Unhandled content encoding #{method}"
       end
@@ -137,6 +149,10 @@ module Utils
 # this class can check the bot proxy configuration to determine if a proxy
 # needs to be used, which includes support for per-url proxy configuration.
 class HttpUtil
+    Bot::Config.register Bot::Config::IntegerValue.new('http.read_timeout',
+      :default => 10, :desc => "Default read timeout for HTTP connections")
+    Bot::Config.register Bot::Config::IntegerValue.new('http.open_timeout',
+      :default => 20, :desc => "Default open timeout for HTTP connections")
     Bot::Config.register Bot::Config::BooleanValue.new('http.use_proxy',
       :default => false, :desc => "should a proxy be used for HTTP requests?")
     Bot::Config.register Bot::Config::StringValue.new('http.proxy_uri', :default => false,
@@ -265,9 +281,9 @@ class HttpUtil
     @cache = Hash.new
     @headers = {
       'Accept-Charset' => 'utf-8;q=1.0, *;q=0.8',
-      'Accept-Encoding' => 'gzip;q=1, identity;q=0.8, *;q=0.2',
+      'Accept-Encoding' => 'gzip;q=1, deflate;q=1, identity;q=0.8, *;q=0.2',
       'User-Agent' =>
-        "rbot http util #{$version} (http://linuxbrit.co.uk/rbot/)"
+        "rbot http util #{$version} (#{Irc::Bot::SOURCE_URL})"
     }
     debug "starting http cache cleanup timer"
     @timer = @bot.timer.add(300) {
@@ -333,8 +349,8 @@ class HttpUtil
   #
   def get_proxy(uri, options = {})
     opts = {
-      :read_timeout => 10,
-      :open_timeout => 20
+      :read_timeout => @bot.config["http.read_timeout"],
+      :open_timeout => @bot.config["http.open_timeout"]
     }.merge(options)
 
     proxy = nil