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: $:]! |
Free forum by Nabble | Edit this page |