>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