>From a0bdf65d33aa63ec97a646d1b767c529ad89da6d Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Mon, 21 Mar 2011 11:12:26 +0100 Subject: [PATCH 0/5] *** SUBJECT HERE *** *** BLURB HERE *** Paolo Bonzini (5): add NetClients exception descriptions remove useless overrides of #checkResponse: pass a response to ProtocolError exceptions use ProtocolError for invalid redirects, add location to redirect notification reorder ProtocolError handlers for ANSI compatibility packages/net/Base.st | 114 +++++++++++++++++++++++++++++++++++++++++-- packages/net/ChangeLog | 29 +++++++++++ packages/net/FTP.st | 8 +--- packages/net/HTTP.st | 35 ++++++++----- packages/net/IMAP.st | 2 +- packages/net/NNTP.st | 13 ++--- packages/net/POP.st | 6 -- packages/net/SMTP.st | 2 +- packages/net/URIResolver.st | 50 ++++++++----------- 9 files changed, 189 insertions(+), 70 deletions(-) -- 1.7.4 >From 4c2ccb7522fd1256d5a008e6a53e07b145939537 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Mon, 21 Mar 2011 10:44:39 +0100 Subject: [PATCH 1/5] add NetClients exception descriptions packages/net: 2011-03-21 Paolo Bonzini * Base.st: Add exception descriptions. Add WrongStateError. * IMAP.st: Use WrongStateError. --- packages/net/Base.st | 30 ++++++++++++++++++++++++++++++ packages/net/ChangeLog | 5 +++++ packages/net/IMAP.st | 2 +- 3 files changed, 36 insertions(+), 1 deletions(-) diff --git a/packages/net/Base.st b/packages/net/Base.st index 4ef04b4..eaaa8a3 100644 --- a/packages/net/Base.st +++ b/packages/net/Base.st @@ -1405,6 +1405,12 @@ NetClientError subclass: ConnectionFailedError [ + + description [ + + + ^'The connection attempt failed.' + ] ] @@ -1413,6 +1419,12 @@ NetClientError subclass: ConnectionClosedError [ + + description [ + + + ^'The server closed the connection.' + ] ] @@ -1434,5 +1446,23 @@ NetClientError subclass: LoginIncorrectError [ + + description [ + + + ^'The server rejected your login attempt.' + ] +] + + +NetClientError subclass: WrongStateError [ + + + + description [ + + + ^'This command cannot be executed in the client''s current state.' + ] ] diff --git a/packages/net/ChangeLog b/packages/net/ChangeLog index 7c5a792..20bd1a7 100644 --- a/packages/net/ChangeLog +++ b/packages/net/ChangeLog @@ -1,3 +1,8 @@ +2011-03-21 Paolo Bonzini + + * Base.st: Add exception descriptions. Add WrongStateError. + * IMAP.st: Use WrongStateError. + 2011-03-12 Paolo Bonzini * gnutls-wrapper.c: Remove dead code signaled by clang analyzer. diff --git a/packages/net/IMAP.st b/packages/net/IMAP.st index c6a2d14..6a7cc91 100644 --- a/packages/net/IMAP.st +++ b/packages/net/IMAP.st @@ -1494,7 +1494,7 @@ Object subclass: IMAPState [ signalError [ - ^self protocolError: 'wrong state' + ^WrongStateError signal ] client: aValue [ -- 1.7.4 >From 8e8b53fea56ece87f03d416a04f1b5d1e9da4d65 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Mon, 21 Mar 2011 10:46:25 +0100 Subject: [PATCH 2/5] remove useless overrides of #checkResponse: packages/net: 2011-03-21 Paolo Bonzini * FTP.st: Remove useless override. * HTTP.st: Remove useless override. * POP.st: Remove useless override. --- packages/net/ChangeLog | 6 ++++++ packages/net/FTP.st | 6 ------ packages/net/HTTP.st | 6 ------ packages/net/POP.st | 6 ------ 4 files changed, 6 insertions(+), 18 deletions(-) diff --git a/packages/net/ChangeLog b/packages/net/ChangeLog index 20bd1a7..71d9b2f 100644 --- a/packages/net/ChangeLog +++ b/packages/net/ChangeLog @@ -1,5 +1,11 @@ 2011-03-21 Paolo Bonzini + * FTP.st: Remove useless override. + * HTTP.st: Remove useless override. + * POP.st: Remove useless override. + +2011-03-21 Paolo Bonzini + * Base.st: Add exception descriptions. Add WrongStateError. * IMAP.st: Use WrongStateError. diff --git a/packages/net/FTP.st b/packages/net/FTP.st index 42f423a..e5987fb 100644 --- a/packages/net/FTP.st +++ b/packages/net/FTP.st @@ -537,12 +537,6 @@ NetProtocolInterpreter subclass: FTPProtocolInterpreter [ self checkResponse ] - checkResponse: response [ - - ^self checkResponse: response - ifError: [self protocolError: response statusMessage] - ] - checkResponse: response ifError: errorBlock [ | status | diff --git a/packages/net/HTTP.st b/packages/net/HTTP.st index dc0653c..2aa1832 100644 --- a/packages/net/HTTP.st +++ b/packages/net/HTTP.st @@ -298,12 +298,6 @@ Copyright (c) Kazuki Yasumatsu, 1995. All rights reserved. ^self readResponseInto: aStream ] - checkResponse: response [ - - ^self checkResponse: response - ifError: [self protocolError: response statusMessage] - ] - checkResponse: response ifError: errorBlock [ | status | diff --git a/packages/net/POP.st b/packages/net/POP.st index b37d4de..0537d30 100644 --- a/packages/net/POP.st +++ b/packages/net/POP.st @@ -357,12 +357,6 @@ Copyright (c) Kazuki Yasumatsu, 1995. All rights reserved. self checkResponse ] - checkResponse: response [ - - ^self checkResponse: response - ifError: [self protocolError: response statusMessage] - ] - checkResponse: response ifError: errorBlock [ | status | -- 1.7.4 >From 55b6d21b3712de1c5815f572f4deda1cd11c265e Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Mon, 21 Mar 2011 10:49:48 +0100 Subject: [PATCH 3/5] pass a response to ProtocolError exceptions packages/net: 2011-03-21 Paolo Bonzini * Base.st: Add response variable to ProtocolError. Add UnexpectedResponseError. * FTP.st: Use #unexpectedResponse:. * NNTP.st: Use #errorResponse: and #unexpectedResponse:. * SMTP.st: Use #errorResponse: --- packages/net/Base.st | 53 ++++++++++++++++++++++++++++++++++++++++++++--- packages/net/ChangeLog | 7 ++++++ packages/net/FTP.st | 2 +- packages/net/NNTP.st | 13 +++-------- packages/net/SMTP.st | 2 +- 5 files changed, 62 insertions(+), 15 deletions(-) diff --git a/packages/net/Base.st b/packages/net/Base.st index eaaa8a3..b767187 100644 --- a/packages/net/Base.st +++ b/packages/net/Base.st @@ -765,7 +765,7 @@ Object subclass: NetProtocolInterpreter [ checkResponse: response [ self checkResponse: response - ifError: [self protocolError: response statusMessage] + ifError: [self errorResponse: response] ] checkResponse: reponse ifError: errorBlock [ @@ -799,11 +799,18 @@ Object subclass: NetProtocolInterpreter [ signal: 'Login incorrect: ' , messageText ] - protocolError: messageText [ + errorResponse: aResponse [ ^(ProtocolError new) - tag: messageText; - signal: 'Protocol error: ' , messageText + response: aResponse; + signal + ] + + unexpectedResponse: aResponse [ + + ^(UnexpectedResponseError new) + response: aResponse; + signal ] lineEndConvention [ @@ -1431,9 +1438,27 @@ NetClientError subclass: ConnectionClosedError [ NetClientError subclass: ProtocolError [ + | response | + + description [ + + ^'Protocol Error' + ] + + response [ + + ^response + ] + + response: aResponse [ + + response := aResponse. + self messageText: '%1: %2' % {self description. response statusMessage} + ] + isResumable [ ^true @@ -1442,6 +1467,26 @@ NetClientError subclass: ProtocolError [ +NetClientError subclass: UnexpectedResponseError [ + + | response | + + + + + description [ + + ^'Unexpected Response' + ] + + isResumable [ + + ^false + ] +] + + + NetClientError subclass: LoginIncorrectError [ diff --git a/packages/net/ChangeLog b/packages/net/ChangeLog index 71d9b2f..d4afc91 100644 --- a/packages/net/ChangeLog +++ b/packages/net/ChangeLog @@ -1,3 +1,10 @@ + + * Base.st: Add response variable to ProtocolError. Add + UnexpectedResponseError. + * FTP.st: Use #unexpectedResponse:. + * NNTP.st: Use #errorResponse: and #unexpectedResponse:. + * SMTP.st: Use #errorResponse: + 2011-03-21 Paolo Bonzini * FTP.st: Remove useless override. diff --git a/packages/net/FTP.st b/packages/net/FTP.st index e5987fb..d1ae0a1 100644 --- a/packages/net/FTP.st +++ b/packages/net/FTP.st @@ -429,7 +429,7 @@ NetProtocolInterpreter subclass: FTPProtocolInterpreter [ response := self getResponse. self checkResponse: response. response status = 227 - ifFalse: [^self protocolError: response statusMessage]. + ifFalse: [^self unexpectedResponse: response]. "227 Entering Passive Mode (h1,h2,h3,h4,p1,p2)" stream := response statusMessage readStream. diff --git a/packages/net/NNTP.st b/packages/net/NNTP.st index 272002e..b32062d 100644 --- a/packages/net/NNTP.st +++ b/packages/net/NNTP.st @@ -523,12 +523,10 @@ Copyright (c) Kazuki Yasumatsu, 1995. All rights reserved. | textFollows | textFollows := self checkResponse: response - ifError: - [self protocolError: response statusMessage. - false]. + ifError: [self errorResponse: response. ^self]. textFollows ifFalse: [^self]. self skipMessageUntilPeriod. - ^self protocolError: 'Unexpected reply: ' , response statusMessage + self unexpectedResponse: response ] checkResponse: response ifError: errorBlock [ @@ -745,11 +743,8 @@ Copyright (c) Kazuki Yasumatsu, 1995. All rights reserved. | textFollows | textFollows := self checkResponse: response - ifError: - [self protocolError: response statusMessage. - false]. - textFollows - ifFalse: [^self protocolError: 'Unexpected reply: ' , response statusMessage] + ifError: [self errorResponse: response. ^self]. + textFollows ifFalse: [self unexpectedResponse: response. ^self] ] defaultPortNumber [ diff --git a/packages/net/SMTP.st b/packages/net/SMTP.st index 59a6b4d..8b15875 100644 --- a/packages/net/SMTP.st +++ b/packages/net/SMTP.st @@ -425,7 +425,7 @@ Copyright (c) Kazuki Yasumatsu, 1995. All rights reserved. ["User not local; please try" self noSuchRecipientNotify: forwardPath] - ifFalse: [self protocolError: response statusMessage]] + ifFalse: [self errorResponse: response]] ] smtpReset [ -- 1.7.4 >From 77368283a0184c9e8d9a1b09cda8530ad3c8f7c8 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Mon, 21 Mar 2011 11:02:07 +0100 Subject: [PATCH 4/5] use ProtocolError for invalid redirects, add location to redirect notification packages/net: 2011-03-21 Paolo Bonzini * Base.st: Add ProtocolNotification. * HTTP.st: Use it for redirects. * URIResolver.st: Simplify. 2011-03-21 Paolo Bonzini --- packages/net/Base.st | 31 +++++++++++++++++++++++++++++++ packages/net/ChangeLog | 7 +++++++ packages/net/HTTP.st | 29 +++++++++++++++++++++-------- packages/net/URIResolver.st | 42 ++++++++++++++++++------------------------ 4 files changed, 77 insertions(+), 32 deletions(-) diff --git a/packages/net/Base.st b/packages/net/Base.st index b767187..fced264 100644 --- a/packages/net/Base.st +++ b/packages/net/Base.st @@ -1436,6 +1436,37 @@ NetClientError subclass: ConnectionClosedError [ +Notification subclass: ProtocolNotification [ + + | response | + + + + + description [ + + ^'Protocol Notification' + ] + + response [ + + ^response + ] + + response: aResponse [ + + response := aResponse. + self messageText: '%1: %2' % {self description. response statusMessage} + ] + + isResumable [ + + ^true + ] +] + + + NetClientError subclass: ProtocolError [ | response | diff --git a/packages/net/ChangeLog b/packages/net/ChangeLog index d4afc91..522916f 100644 --- a/packages/net/ChangeLog +++ b/packages/net/ChangeLog @@ -1,3 +1,10 @@ +2011-03-21 Paolo Bonzini + + * Base.st: Add ProtocolNotification. + * HTTP.st: Use it for redirects. + * URIResolver.st: Simplify. + +2011-03-21 Paolo Bonzini * Base.st: Add response variable to ProtocolError. Add UnexpectedResponseError. diff --git a/packages/net/HTTP.st b/packages/net/HTTP.st index 2aa1832..e839de1 100644 --- a/packages/net/HTTP.st +++ b/packages/net/HTTP.st @@ -346,9 +346,7 @@ Copyright (c) Kazuki Yasumatsu, 1995. All rights reserved. status = 302 "Moved Temporarily"]) ifTrue: - [| location | - location := response fieldAt: 'Location' ifAbsent: [nil]. - ^self redirectionNotify: location value]. + [^self redirectionNotify: response ifInvalid: errorBlock]. status = 303 ifTrue: ["Method" @@ -438,11 +436,16 @@ Copyright (c) Kazuki Yasumatsu, 1995. All rights reserved. ^errorBlock value ] - redirectionNotify: redirectLocation [ + redirectionNotify: aResponse ifInvalid: errorBlock [ - ^(HTTPRedirection new) - tag: redirectLocation; - signal + | ex | + ex := HTTPRedirection new. + ex response: aResponse. + ex location isNil + ifTrue: [ ^errorBlock value ] + ifFalse: [ + ex tag: ex location. "backwards compatibility" + ex signal ]. ] ] @@ -547,10 +550,20 @@ Copyright (c) Kazuki Yasumatsu, 1995. All rights reserved. Namespace current: NetClients.HTTP [ -Notification subclass: HTTPRedirection [ +ProtocolNotification subclass: HTTPRedirection [ + + | location | + + location [ + location isNil ifFalse: [^location]. + response isNil ifTrue: [^nil]. + location := response fieldAt: 'Location' ifAbsent: [nil]. + location isNil ifFalse: [location := location value]. + ^location + ] ] ] diff --git a/packages/net/URIResolver.st b/packages/net/URIResolver.st index 247f2d8..b5cf81a 100644 --- a/packages/net/URIResolver.st +++ b/packages/net/URIResolver.st @@ -529,18 +529,15 @@ Copyright (c) Kazuki Yasumatsu, 1995. All rights reserved. do: [:ex | | location | - location := ex tag. - location isNil - ifTrue: [^self errorContents: 'Moved elsewhere'] - ifFalse: - [client reporter statusString: 'Redirecting'. - stream close. - stream := nil. - tmpFile exists ifTrue: [tmpFile remove]. - ^(self class on: (url construct: (URL fromString: location))) - noCache: self noCache; - reporter: self reporter; - contents]]] + location := ex location. + client reporter statusString: 'Redirecting'. + stream close. + stream := nil. + tmpFile exists ifTrue: [tmpFile remove]. + ^(self class on: (url construct: (URL fromString: location))) + noCache: self noCache; + reporter: self reporter; + contents]] ensure: [stream isNil ifFalse: [stream close]]. ^protocolError ifTrue: @@ -609,18 +606,15 @@ Copyright (c) Kazuki Yasumatsu, 1995. All rights reserved. do: [:ex | | location | - location := ex tag. - location isNil - ifTrue: [^self errorContents: 'Moved elsewhere'] - ifFalse: - [client reporter statusString: 'Redirecting'. - stream close. - stream := nil. - tmpFile exists ifTrue: [tmpFile remove]. - ^(self class on: (url construct: (URL fromString: location))) - noCache: self noCache; - reporter: self reporter; - getHead]]] + location := ex location. + client reporter statusString: 'Redirecting'. + stream close. + stream := nil. + tmpFile exists ifTrue: [tmpFile remove]. + ^(self class on: (url construct: (URL fromString: location))) + noCache: self noCache; + reporter: self reporter; + getHead]] ensure: [stream isNil ifFalse: [stream close]]. ^protocolError ifTrue: -- 1.7.4 >From a0bdf65d33aa63ec97a646d1b767c529ad89da6d Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Mon, 21 Mar 2011 11:02:46 +0100 Subject: [PATCH 5/5] reorder ProtocolError handlers for ANSI compatibility packages/net: 2011-03-21 Paolo Bonzini * URIResolver.st: Reorder exceptions. --- packages/net/ChangeLog | 4 ++++ packages/net/URIResolver.st | 8 ++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/net/ChangeLog b/packages/net/ChangeLog index 522916f..165fefe 100644 --- a/packages/net/ChangeLog +++ b/packages/net/ChangeLog @@ -1,5 +1,9 @@ 2011-03-21 Paolo Bonzini + * URIResolver.st: Reorder exceptions. + +2011-03-21 Paolo Bonzini + * Base.st: Add ProtocolNotification. * HTTP.st: Use it for redirects. * URIResolver.st: Simplify. diff --git a/packages/net/URIResolver.st b/packages/net/URIResolver.st index b5cf81a..a01d80d 100644 --- a/packages/net/URIResolver.st +++ b/packages/net/URIResolver.st @@ -518,13 +518,13 @@ Copyright (c) Kazuki Yasumatsu, 1995. All rights reserved. [ [response := requestBlock value: requestHeaders value: stream] ensure: [client close]] - on: NetClientError - do: [:ex | ^self errorContents: ex messageText] on: ProtocolError do: [:ex | protocolError := true. ex pass] + on: NetClientError + do: [:ex | ^self errorContents: ex messageText] on: HTTP.HTTPRedirection do: [:ex | @@ -595,13 +595,13 @@ Copyright (c) Kazuki Yasumatsu, 1995. All rights reserved. requestHeaders: requestHeaders into: stream] ensure: [client close]] - on: NetClientError - do: [:ex | ^self errorContents: ex messageText] on: ProtocolError do: [:ex | protocolError := true. ex pass] + on: NetClientError + do: [:ex | ^self errorContents: ex messageText] on: HTTP.HTTPRedirection do: [:ex | -- 1.7.4