summaryrefslogtreecommitdiffstats
path: root/lib/net
diff options
context:
space:
mode:
authorshugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-07-17 17:35:53 +0000
committershugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-07-17 17:35:53 +0000
commitf43e273a71d17d7fe48ae145436db1132de412c5 (patch)
treeebde0916791cbff11fb8f6ca920c396d67d8b99f /lib/net
parent880d2da36b9fef8008f5ecaab616f915e4edd713 (diff)
downloadruby-f43e273a71d17d7fe48ae145436db1132de412c5.tar.gz
ruby-f43e273a71d17d7fe48ae145436db1132de412c5.tar.xz
ruby-f43e273a71d17d7fe48ae145436db1132de412c5.zip
* lib/net/imap.rb (receive_responses): return if a LOGOUT response
received. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@6665 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/net')
-rw-r--r--lib/net/imap.rb15
1 files changed, 13 insertions, 2 deletions
diff --git a/lib/net/imap.rb b/lib/net/imap.rb
index 033e0987b..7e8d574fb 100644
--- a/lib/net/imap.rb
+++ b/lib/net/imap.rb
@@ -898,12 +898,13 @@ module Net
@response_handlers = []
@tagged_response_arrival = new_cond
@continuation_request_arrival = new_cond
+ @logout_command_tag = nil
@debug_output_bol = true
@greeting = get_response
- if /\ABYE\z/ni =~ @greeting.name
+ if @greeting.name == "BYE"
@sock.close
- raise ByeResponseError, resp[0]
+ raise ByeResponseError, @greeting.raw_data
end
@client_thread = Thread.current
@@ -928,12 +929,19 @@ module Net
when TaggedResponse
@tagged_responses[resp.tag] = resp
@tagged_response_arrival.broadcast
+ if resp.tag == @logout_command_tag
+ return
+ end
when UntaggedResponse
record_response(resp.name, resp.data)
if resp.data.instance_of?(ResponseText) &&
(code = resp.data.code)
record_response(code.name, code.data)
end
+ if resp.name == "BYE" && @logout_command_tag.nil?
+ @sock.close
+ raise ByeResponseError, resp.raw_data
+ end
when ContinuationRequest
@continuation_request_arrival.signal
end
@@ -998,6 +1006,9 @@ module Net
send_data(i)
end
put_string(CRLF)
+ if cmd == "LOGOUT"
+ @logout_command_tag = tag
+ end
if block
add_response_handler(block)
end