Tobias Pape uploaded a new version of WebClient-Core to project The Trunk: http://source.squeak.org/trunk/WebClient-Core-topa.110.mcz
==================== Summary ====================
Name: WebClient-Core-topa.110 Author: topa Time: 18 September 2017, 4:35:29.15331 pm UUID: 943ee269-4662-4ae7-ad63-2e5b9fce11b1 Ancestors: WebClient-Core-topa.109
fix handling of IPv6 literals in urls
=============== Diff against WebClient-Core-topa.109 ===============
Item was changed: ----- Method: WebClient>>proxyConnect (in category 'initialize') ----- proxyConnect "Send a proxy CONNECT request to connect to a remote host via the chosen proxy server"
| uri request repeatAuth response | + uri := self serverUrlName,':', self serverPort. - uri := self serverName,':', self serverPort. request := self newRequest. request method: 'CONNECT'. request rawUrl: uri.
[repeatAuth := false.
"The proxy response may use Connection: Close; reconnect when that happens" self isConnected ifFalse:[ stream := SocketStream openConnectionToHostNamed: lastServer port: lastPort. stream timeout: timeout. ].
debugLog ifNotNil:[ request writeOn: debugLog. debugLog flush. ].
"Don't use 'self writeRequestOn:' since this will insert both cookies as well as modify the url target when a proxy is present" request writeOn: stream. stream flush.
response := request newResponse readFrom: stream.
debugLog ifNotNil:[ response writeOn: debugLog. debugLog flush. ].
"Handle authentication if needed" (self allowAuth and:[response code = 407]) ifTrue:[ "Eat up the content of the previous response" response content. repeatAuth := self authenticate: request from: response. ]. repeatAuth] whileTrue.
^response!
Item was changed: ----- Method: WebClient>>sendRequest:contentBlock: (in category 'sending') ----- sendRequest: request contentBlock: contentBlock "Send an http request"
| response repeatRedirect repeatAuth |
"XXXX: Fixme. Pre-authenticate the request if we have valid auth credentials"
redirections := Dictionary new. ["The outer loop handles redirections" repeatRedirect := false.
"Always update the host header due to redirect" request headerAt: 'Host' put: server.
["The inner loop handles authentication" repeatAuth := false.
"Connect can fail if SSL proxy CONNECT is involved" self connect ifNotNil:[:resp| ^resp]. "Write the request to the debugLog if present" debugLog ifNotNil:[self writeRequest: request on: debugLog].
"Send the request itself" self writeRequest: request on: stream. contentBlock value: stream.
response := request newResponse readFrom: stream. response url: (scheme, '://', server, request rawUrl).
debugLog ifNotNil:[ response writeOn: debugLog. debugLog flush. ]. response setCookiesDo:[:cookie| + self acceptCookie: cookie host: self serverUrlName path: request url. - self acceptCookie: cookie host: self serverName path: request url. ]. accessLog ifNotNil:[ WebUtils logRequest: request response: response on: accessLog ]. "Handle authentication if needed" (self allowAuth and:[response code = 401 or:[response code = 407]]) ifTrue:[ "Eat up the content of the previous response" response content. repeatAuth := self authenticate: request from: response. ].
repeatAuth] whileTrue.
"Flush previous authState. XXXX: Fixme. authState must be preserved for pre-authentication of requests." self flushAuthState.
"Handle redirect if needed" (self allowRedirect and:[response isRedirect]) ifTrue:[ "Eat up the content of the previous response" response content. repeatRedirect := self redirect: request from: response. ]. repeatRedirect] whileTrue:[ "When redirecting, remove authentication headers" request removeHeader: 'Authorization'. request removeHeader: 'Proxy-Authorization'. ].
"If the response is not a success, eat up its content" (response isSuccess or:[response isInformational]) ifFalse:[response content].
^response!
Item was changed: ----- Method: WebClient>>serverName (in category 'accessing') ----- serverName "Returns the name part of the server:port description" + + | serverUrlName | + serverUrlName := self serverUrlName. + ^ (serverUrlName includes: $[) + ifTrue: [serverUrlName copyFrom: 2 to: serverUrlName size - 1] + ifFalse: [serverUrlName]! - - ^server copyUpTo: $:!
Item was changed: ----- Method: WebClient>>serverPort (in category 'accessing') ----- serverPort "Returns the port of the server:port description"
+ (self server copyAfterLast: $:) + ifNotEmpty:[:portString| + portString isAllDigits + ifTrue: [^ portString asInteger]]. + ^ self defaultPort! - ^(server copyAfter: $:) - ifEmpty:[self defaultPort] - ifNotEmpty:[:portString| portString asInteger]. - !
Item was added: + ----- Method: WebClient>>serverUrlName (in category 'accessing') ----- + serverUrlName + "Returns the name part of the server:port description in the way it would appear in an Url" + + ^ (self server includes: $[) + ifTrue: [self server copyUpThrough: $] ] + ifFalse: [self server copyUpToLast: $:]!
squeak-dev@lists.squeakfoundation.org