summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraamine <aamine@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-09-21 06:58:01 +0000
committeraamine <aamine@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-09-21 06:58:01 +0000
commit616c1cd971695ed74df6e3a98fa9d584f3783e8b (patch)
tree39397ba4b5072501b5e178f45637529f07ecade7
parent13243e5ad15f5d0d259b4850199183fdf9572f46 (diff)
aamine
* lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.28. * lib/net/http.rb: HTTPReadAdapter -> HTTPResponseReceiver * lib/net/http.rb (connecting): response is got in receive() git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@951 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog8
-rw-r--r--lib/net/http.rb195
-rw-r--r--lib/net/pop.rb10
-rw-r--r--lib/net/protocol.rb10
-rw-r--r--lib/net/smtp.rb13
5 files changed, 153 insertions, 83 deletions
diff --git a/ChangeLog b/ChangeLog
index 61f18b226b..539ce186ce 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Thu Sep 21 15:59:23 2000 Minero Aoki <aamine@dp.u-netsurf.ne.jp>
+
+ * lib/net/protocol.rb, smtp.rb, pop.rb, http.rb: 1.1.28.
+
+ * lib/net/http.rb: HTTPReadAdapter -> HTTPResponseReceiver
+
+ * lib/net/http.rb (connecting): response is got in receive()
+
Wed Sep 20 23:21:38 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
* ruby.c (load_file): two Ctrl-D was required to stop ruby at the
diff --git a/lib/net/http.rb b/lib/net/http.rb
index 447e88c992..a5ccb70b8c 100644
--- a/lib/net/http.rb
+++ b/lib/net/http.rb
@@ -1,6 +1,6 @@
=begin
-= net/http.rb version 1.1.28
+= net/http.rb version 1.1.29
maintained by Minero Aoki <aamine@dp.u-netsurf.ne.jp>
This file is derived from "http-access.rb".
@@ -9,6 +9,10 @@ This program is free software.
You can distribute/modify this program under
the terms of the Ruby Distribute License.
+Japanese version of this document is in "net" full package.
+You can get it from RAA
+(Ruby Application Archive: http://www.ruby-lang.org/en/raa.html).
+
= class HTTP
@@ -33,7 +37,7 @@ the terms of the Ruby Distribute License.
: start {|http| .... }
creates a new Net::HTTP object and starts HTTP session.
- When this method is called with a block, gives HTTP object to block
+ When this method is called with block, gives HTTP object to block
and close HTTP session after block call finished.
: get( path, header = nil, dest = '' )
@@ -46,22 +50,21 @@ the terms of the Ruby Distribute License.
# example
response, body = http.get( '/index.html' )
- If called with a block, give a part String of entity body.
+ If called with block, give a part String of entity body.
Note:
If status is not 2xx(success), ProtocolError exception is
- raised. At that time, you can get Response object from
+ raised. At that time, you can get HTTPResponse object from
execption object. (same in head/post)
# example
begin
- response, body = http.get(...)
+ response, body = http.get( '/index.html' )
rescue Net::ProtoRetriableError
response = $!.data
...
end
-
: head( path, header = nil )
get only header from "path" on connecting host.
"header" is a Hash like { 'Accept' => '*/*', ... }.
@@ -81,45 +84,75 @@ the terms of the Ruby Distribute License.
"header" must be a Hash like { 'Accept' => '*/*', ... }.
This method returns Net::HTTPResponse object and "dest".
- If called with a block, gives a part String of entity body.
+ If called with block, gives a part String of entity body.
-: get2( path, header = nil ) {|adapter| .... }
+: get2( path, header = nil )
+: get2( path, header = nil ) {|recv| .... }
send GET request for "path".
"header" must be a Hash like { 'Accept' => '*/*', ... }.
- This method gives HTTPReadAdapter object to block.
+ If this method is called with block, one gives
+ a HTTPResponseReceiver object to block.
- ex.
-
- http.get2( '/index.html' ) do |f|
- # f is a HTTPReadAdapter object
- f.header
- f.body
+ # example
+ http.get2( '/index.html' ) do |recv|
+ # "recv" is a HTTPResponseReceiver object
+ recv.header
+ recv.body
+ end
+
+ # another way
+ response = http.get2( '/index.html' )
+ response['content-type']
+ response.body
+
+ # this is wrong
+ http.get2( '/index.html' ) do |recv|
+ print recv.header.body # body is not read yet!!!
+ end
+
+ # but this is ok
+ http.get2( '/index.html' ) do |recv|
+ recv.body # read body and set recv.header.body
+ print recv.header.body # ref
end
: head2( path, header = nil )
+: head2( path, header = nil ) {|recv| .... }
send HEAD request for "path".
"header" must be a Hash like { 'Accept' => '*/*', ... }.
The difference between "head" method is that
"head2" does not raise exceptions.
- ex.
-
- http.head2( '/index.html' ) do |f|
- f.header
+ If this method is called with block, one gives
+ a HTTPResponseReceiver object to block.
+
+ # example
+ response = http.head2( '/index.html' )
+
+ # another way
+ http.head2( '/index.html' ) do |recv|
+ recv.response
end
-: post2( path, data, header = nil ) {|adapter| .... }
+: post2( path, data, header = nil )
+: post2( path, data, header = nil ) {|recv| .... }
post "data"(must be String now) to "path".
"header" must be a Hash like { 'Accept' => '*/*', ... }.
- This method gives HTTPReadAdapter object to block.
+ If this method is called with block, one gives
+ a HTTPResponseReceiver object to block.
- ex.
-
- http.post2( '/index.html', 'data data data...' ) do |adapter|
- adapter.header
- adapter.body
+ # example
+ http.post2( '/anycgi.rb', 'data data data...' ) do |recv|
+ # "recv" is a HTTPResponseReceiver object
+ recv.header
+ recv.body
end
+ # another way
+ response = http.post2( '/anycgi.rb', 'important data' )
+ response['content-type']
+ response.body
+
= class HTTPResponse
@@ -152,7 +185,8 @@ All "key" is case-insensitive.
: message
HTTP result message. For example, 'Not Found'
-= class HTTPReadAdapter
+
+= class HTTPResponseReceiver
== Methods
@@ -165,8 +199,8 @@ All "key" is case-insensitive.
entity body. A body is written to "dest" using "<<" method.
: body {|str| ... }
- get entity body by using block.
- If this method is called twice, block is not called and
+ gets entity body with block.
+ If this method is called twice, block is not executed and
returns first "dest".
@@ -283,8 +317,9 @@ module Net
end
def get2( path, u_header = nil, &block )
- connecting( u_header, block ) {|uh|
+ connecting( u_header ) {|uh|
@command.get edit_path(path), uh
+ receive true, block
}
end
@@ -295,10 +330,10 @@ module Net
resp
end
- def head2( path, u_header = nil )
- connecting( u_header, nil ) {|uh|
+ def head2( path, u_header = nil, &block )
+ connecting( u_header ) {|uh|
@command.head edit_path(path), uh
- @command.get_response_no_body
+ receive false, block
}
end
@@ -311,8 +346,9 @@ module Net
end
def post2( path, data, u_header = nil, &block )
- connecting( u_header, block ) {|uh|
+ connecting( u_header ) {|uh|
@command.post edit_path(path), uh, data
+ receive true, block
}
end
@@ -325,8 +361,9 @@ module Net
end
def put2( path, src, u_header = nil, &block )
- connecting( u_header, block ) {|uh|
+ connecting( u_header ) {|uh|
@command.put path, uh, src
+ receive true, block
}
end
@@ -334,14 +371,7 @@ module Net
private
- # called when connecting
- def do_finish
- unless @socket.closed? then
- head2 '/', { 'Connection' => 'close' }
- end
- end
-
- def connecting( u_header, ublock )
+ def connecting( u_header )
u_header = procheader( u_header )
if not @socket then
u_header['Connection'] = 'close'
@@ -351,12 +381,7 @@ module Net
end
resp = yield( u_header )
- if ublock then
- adapter = HTTPReadAdapter.new( @command )
- ublock.call adapter
- resp = adapter.off
- end
-
+
unless keep_alive? u_header, resp then
@socket.close
end
@@ -396,22 +421,37 @@ module Net
end
end
+
+ def receive( body_exist, block )
+ recv = HTTPResponseReceiver.new( @command, body_exist )
+ block.call recv if block
+ recv.terminate
+ recv.header
+ end
+
+
+ # called when connecting
+ def do_finish
+ unless @socket.closed? then
+ head2 '/', { 'Connection' => 'close' }
+ end
+ end
+
def edit_path( path )
path
end
- class << self
- def Proxy( p_addr, p_port )
- klass = super
- klass.module_eval %-
- def edit_path( path )
- 'http://' + address +
- (@port == #{self.port} ? '' : ':' + @port.to_s) + path
- end
- -
- klass
- end
+ def HTTP.Proxy( p_addr, p_port = nil )
+ klass = super
+ klass.module_eval %-
+ def edit_path( path )
+ 'http://' + address +
+ (@port == HTTP.port ? '' : ":#{@port}") +
+ path
+ end
+ -
+ klass
end
end
@@ -521,10 +561,11 @@ module Net
HTTPVersionNotSupported = HTTPFatalErrorCode.mkchild
- class HTTPReadAdapter
+ class HTTPResponseReceiver
- def initialize( command )
+ def initialize( command, body_exist )
@command = command
+ @body_exist = body_exist
@header = @body = nil
end
@@ -534,7 +575,9 @@ module Net
def header
unless @header then
- @header = @command.get_response
+ stream_check
+ @header = @body_exist ? @command.get_response :
+ @command.get_response_no_body
end
@header
end
@@ -543,20 +586,31 @@ module Net
def body( dest = nil, &block )
dest, ret = HTTP.procdest( dest, block )
unless @body then
- @body = @command.get_body( response, dest )
+ stream_check
+ @body = @command.get_body( header, dest )
end
@body
end
alias entity body
- def off
- body
+ def terminate
+ header
+ body if @body_exist
@command = nil
- @header
+ end
+
+ private
+
+ def stream_check
+ unless @command then
+ raise IOError, 'receiver was used out of block'
+ end
end
end
+ HTTPReadAdapter = HTTPResponseReceiver
+
module NetPrivate
@@ -570,11 +624,8 @@ module Net
@http_version = HTTPVersion
@in_header = {}
- if sock.port == HTTP.port
- @in_header[ 'Host' ] = sock.addr
- else
- @in_header[ 'Host' ] = sock.addr + ':' + sock.port
- end
+ @in_header[ 'Host' ] = sock.addr +
+ ((sock.port == HTTP.port) ? '' : ":#{sock.port}")
@in_header[ 'Connection' ] = 'Keep-Alive'
@in_header[ 'Accept' ] = '*/*'
diff --git a/lib/net/pop.rb b/lib/net/pop.rb
index 61f7b52cad..a9d13ccb31 100644
--- a/lib/net/pop.rb
+++ b/lib/net/pop.rb
@@ -1,6 +1,6 @@
=begin
-= net/pop.rb version 1.1.28
+= net/pop.rb version 1.1.29
written by Minero Aoki <aamine@dp.u-netsurf.ne.jp>
@@ -8,6 +8,10 @@ This program is free software.
You can distribute/modify this program under
the terms of the Ruby Distribute License.
+Japanese version of this document is in "net" full package.
+You can get it from RAA
+(Ruby Application Archive: http://www.ruby-lang.org/en/raa.html).
+
== Net::POP3
@@ -31,7 +35,7 @@ Net::Protocol
: start( account, password ) {|pop| .... }
starts POP3 session.
- When called with a block, give a POP3 object to block and
+ When called with block, give a POP3 object to block and
close session after block call is finished.
: each {|popmail| .... }
@@ -80,7 +84,7 @@ Object
end
: all {|str| .... }
- You can use all/pop/mail with a block.
+ You can call all/pop/mail with block.
argument 'str' is a read string (a part of mail).
# usage example
diff --git a/lib/net/protocol.rb b/lib/net/protocol.rb
index 3eced45d3a..3cf20f8e44 100644
--- a/lib/net/protocol.rb
+++ b/lib/net/protocol.rb
@@ -1,6 +1,6 @@
=begin
-= net/protocol.rb version 1.1.28
+= net/protocol.rb version 1.1.29
written by Minero Aoki <aamine@dp.u-netsurf.ne.jp>
@@ -8,6 +8,10 @@ This program is free software.
You can distribute/modify this program under
the terms of the Ruby Distribute License.
+Japanese version of this document is in "net" full package.
+You can get it from RAA
+(Ruby Application Archive: http://www.ruby-lang.org/en/raa.html).
+
== Net::Protocol
@@ -46,7 +50,7 @@ Object
'*args' are specified in subclasses.
- When is called with a block, gives Protocol object to block and
+ When is called with block, gives Protocol object to block and
close session when block finished.
: finish
@@ -65,7 +69,7 @@ module Net
class Protocol
- Version = '1.1.28'
+ Version = '1.1.29'
class << self
diff --git a/lib/net/smtp.rb b/lib/net/smtp.rb
index f7af92d635..4ea9a2f221 100644
--- a/lib/net/smtp.rb
+++ b/lib/net/smtp.rb
@@ -1,6 +1,6 @@
=begin
-= net/smtp.rb version 1.1.28
+= net/smtp.rb version 1.1.29
written by Minero Aoki <aamine@dp.u-netsurf.ne.jp>
@@ -8,6 +8,10 @@ This program is free software.
You can distribute/modify this program under
the terms of the Ruby Distribute License.
+Japanese version of this document is in "net" full package.
+You can get it from RAA
+(Ruby Application Archive: http://www.ruby-lang.org/en/raa.html).
+
== Net::SMTP
@@ -33,7 +37,7 @@ Net::Protocol
opens TCP connection and starts SMTP session.
If protocol had been started, do nothing and return false.
- When this methods is called with a block, give a SMTP object to block and
+ When this methods is called with block, give a SMTP object to block and
close session after block call finished.
If account and password are given, is trying to get authentication
@@ -42,7 +46,7 @@ Net::Protocol
: send_mail( mailsrc, from_addr, *to_addrs )
: sendmail( mailsrc, from_addr, *to_addrs )
This method sends 'mailsrc' as mail. SMTP read strings
- from 'mailsrc' by calling 'each' method, and convert them
+ from 'mailsrc' by calling 'each' iterator, and convert them
into "\r\n" terminated string when write.
from_addr must be String.
@@ -62,8 +66,7 @@ Net::Protocol
: ready( from_addr, to_addrs ) {|adapter| .... }
This method stands by the SMTP object for sending mail.
- In the block of this method, you can call ONLY 'write' method
- for 'adapter'.
+ "adapter" object accepts only "write" method.
# usage example