From 005f12582975d8382851b740690f97dba35aaa2a Mon Sep 17 00:00:00 2001 From: aamine Date: Fri, 21 Jan 2000 12:52:24 +0000 Subject: [PATCH] Version 1.1.4 o (HTTP) allow no content-length data git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@608 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/net/http.rb | 16 +++++++++------- lib/net/pop.rb | 2 -- lib/net/session.rb | 47 +++++++++++++++++++++++++++++----------------- lib/net/smtp.rb | 2 -- 4 files changed, 39 insertions(+), 28 deletions(-) diff --git a/lib/net/http.rb b/lib/net/http.rb index 3f0f47e31e..4847f88bf7 100644 --- a/lib/net/http.rb +++ b/lib/net/http.rb @@ -57,8 +57,6 @@ class HTTPBadResponse < HTTPError; end class HTTP < Protocol - Version = '1.1.3' - protocol_param :port, '80' protocol_param :command_type, '::Net::HTTPCommand' @@ -143,7 +141,7 @@ class HTTPBadResponse < HTTPError; end @in_header = {} @in_header[ 'Host' ] = sock.addr - @in_header[ 'Connection' ] = 'keep-alive' + @in_header[ 'Connection' ] = 'Keep-Alive' @in_header[ 'Accept' ] = '*/*' super sock @@ -161,7 +159,11 @@ class HTTPBadResponse < HTTPError; end header.delete 'transfer-encoding' header[ 'content-length' ] = "Content-Length: #{clen}" else - @socket.read content_length( header ), ret + if clen = content_length( header ) then + @socket.read clen, ret + else + @socket.read_all ret + end end header @@ -229,10 +231,10 @@ class HTTPBadResponse < HTTPError; end def content_length( header ) unless str = header[ 'content-length' ] then - raise HTTPBadResponce, "content-length not given" + return nil end unless /\Acontent-length:\s*(\d+)/i === str then - raise HTTPBadResponce, "content-length format error" + raise HTTPBadResponse, "content-length format error" end $1.to_i end @@ -289,7 +291,7 @@ class HTTPBadResponse < HTTPError; end while true do line = @socket.readline unless /[0-9a-hA-H]+/ === line then - raise HTTPBadResponce, "chunk size not given" + raise HTTPBadResponse, "chunk size not given" end len = $&.hex break if len == 0 diff --git a/lib/net/pop.rb b/lib/net/pop.rb index 772c46ac23..0ec2481557 100644 --- a/lib/net/pop.rb +++ b/lib/net/pop.rb @@ -48,8 +48,6 @@ Net::Protocol class POP3 < Protocol - Version = '1.1.3' - protocol_param :port, '110' protocol_param :command_type, '::Net::POP3Command' diff --git a/lib/net/session.rb b/lib/net/session.rb index e3a30afb2c..7cf423ce3a 100644 --- a/lib/net/session.rb +++ b/lib/net/session.rb @@ -1,6 +1,6 @@ =begin -= net/session.rb version 1.1.3 += net/session.rb written by Minero Aoki @@ -15,6 +15,7 @@ require 'socket' module Net + Version = '1.1.4' =begin @@ -29,7 +30,7 @@ Object === Constants : Version - The version of Session class. It is a string like "1.1.3". + The version of Session class. It is a string like "1.1.4". === Class Methods @@ -73,8 +74,6 @@ Object class Protocol - Version = '1.1.3' - class << self def start( address = 'localhost', port = nil, *args ) @@ -470,7 +469,7 @@ Object def reopen unless closed? then @socket.close - flush_rbuf + @buffer = '' end @socket = TCPsocket.new( @addr, @port ) end @@ -511,25 +510,43 @@ Object @pipe << "reading #{len} bytes...\n" if pre = @pipe ; @pipe = nil rsize = 0 - while rsize + @buffer.size < len do - rsize += @buffer.size - ret << fetch_rbuf( @buffer.size ) + rsize += writeinto( ret, @buffer.size ) fill_rbuf end - ret << fetch_rbuf( len - rsize ) + writeinto( ret, len - rsize ) @pipe << "read #{len} bytes\n" if @pipe = pre ret end + def read_all( ret = '' ) + @pipe << "reading all...\n" if pre = @pipe; @pipe = nil + + rsize = 0 + begin + while true do + rsize += writeinto( ret, @buffer.size ) + fill_rbuf + end + rescue EOFError + ; + end + + @pipe << "read #{rsize} bytes\n" if @pipe = pre + ret + end + + def readuntil( target ) until idx = @buffer.index( target ) do fill_rbuf end - fetch_rbuf( idx + target.size ) + ret = '' + writeinto( ret, idx + target.size ) + ret end @@ -583,17 +600,13 @@ Object @buffer << @socket.sysread( READ_BLOCK ) end - def fetch_rbuf( len ) + def writeinto( ret, len ) bsi = @buffer.size - ret = @buffer[ 0, len ] + ret << @buffer[ 0, len ] @buffer = @buffer[ len, bsi - len ] @pipe << %{read "#{Net.quote ret}"\n} if @pipe - ret - end - - def flush_rbuf - @buffer = '' + len end diff --git a/lib/net/smtp.rb b/lib/net/smtp.rb index 3f999efd50..7a04aa2aa2 100644 --- a/lib/net/smtp.rb +++ b/lib/net/smtp.rb @@ -55,8 +55,6 @@ Net::Protocol class SMTP < Protocol - Version = '1.1.3' - protocol_param :port, '25' protocol_param :command_type, '::Net::SMTPCommand'