Skip to content

Commit

Permalink
Version 1.1.1
Browse files Browse the repository at this point in the history
o  HTTP chunk data


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@593 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
aamine committed Dec 20, 1999
1 parent 1f7ea56 commit 47f5803
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 10 deletions.
51 changes: 45 additions & 6 deletions lib/net/http.rb
Expand Up @@ -19,7 +19,7 @@ class HTTPBadResponse < HTTPError; end

class HTTPSession < Session

Version = '1.1.0'
Version = '1.1.1'

session_setvar :port, '80'
session_setvar :command_type, 'HTTPCommand'
Expand Down Expand Up @@ -61,8 +61,8 @@ def initialize( sock )
@in_header = {}
@in_header[ 'Host' ] = sock.addr
#@in_header[ 'User-Agent' ] = "Ruby http version #{HTTPSession::Version}"
#@in_header[ 'Connection' ] = 'Keep-Alive'
#@in_header[ 'Accept' ] = '*/*'
@in_header[ 'Connection' ] = 'Keep-Alive'
@in_header[ 'Accept' ] = '*/*'

super sock
end
Expand All @@ -75,7 +75,13 @@ def get( path, u_header = nil, ret = '' )
write_header u_header
check_reply SuccessCode
header = read_header
@socket.read content_length( header ), ret
if chunked? header then
clen = read_chunked_body( ret )
header.delete 'transfer-encoding'
header[ 'content-length' ] = "Content-Length: #{clen}"
else
@socket.read content_length( header ), ret
end
@socket.close unless keep_alive? header

return header, ret
Expand Down Expand Up @@ -140,15 +146,15 @@ def content_length( header )
unless str = header[ 'content-length' ] then
raise HTTPBadResponce, "content-length not given"
end
unless /content-length:\s*(\d+)/i === str then
unless /\Acontent-length:\s*(\d+)/i === str then
raise HTTPBadResponce, "content-length format error"
end
$1.to_i
end

def keep_alive?( header )
if str = header[ 'connection' ] then
if /connection:\s*keep-alive/i === str then
if /\Aconnection:\s*keep-alive/i === str then
return true
end
else
Expand All @@ -160,6 +166,16 @@ def keep_alive?( header )
false
end

def chunked?( header )
if str = header[ 'transfer-encoding' ] then
if /\Atransfer-encoding:\s*chunked/i === str then
return true
end
end

false
end


def read_header
header = {}
Expand Down Expand Up @@ -194,6 +210,29 @@ def write_header( user )
end
end

def read_chunked_body( ret )
line = nil
len = nil
total = 0

while true do
line = @socket.readline
unless /[0-9a-hA-H]+/ === line then
raise HTTPBadResponce, "chunk size not given"
end
len = $&.hex
break if len == 0
@socket.read( len, ret ); total += len
@socket.read 2 # \r\n
end
while true do
line = @socket.readline
break if line.empty?
end

total
end

end


Expand Down
2 changes: 2 additions & 0 deletions lib/net/pop.rb
Expand Up @@ -52,6 +52,8 @@ module Net

class POP3Session < Session

Version = '1.1.1'

session_setvar :port, '110'
session_setvar :command_type, 'POP3Command'

Expand Down
6 changes: 3 additions & 3 deletions lib/net/session.rb
@@ -1,6 +1,6 @@
=begin
= net/session.rb version 1.1.0
= net/session.rb version 1.1.1
written by Minero Aoki <aamine@dp.u-netsurf.ne.jp>
Expand Down Expand Up @@ -30,7 +30,7 @@ module Net
: Version
The version of Session class. It is a string like "1.1.0".
The version of Session class. It is a string like "1.1.1".
=== Class Methods
Expand Down Expand Up @@ -77,7 +77,7 @@ module Net

class Session

Version = '1.1.0'
Version = '1.1.1'

class << self

Expand Down
2 changes: 1 addition & 1 deletion lib/net/smtp.rb
Expand Up @@ -58,7 +58,7 @@ module Net

class SMTPSession < Session

Version = '1.1.0'
Version = '1.1.1'

session_setvar :port, '25'
session_setvar :command_type, 'SMTPCommand'
Expand Down

0 comments on commit 47f5803

Please sign in to comment.