diff --git a/repository/Zinc-HTTP.package/ZnMultiThreadedServer.class/instance/readRequestTerminationExceptionSet.st b/repository/Zinc-HTTP.package/ZnMultiThreadedServer.class/instance/readRequestTerminationExceptionSet.st
index bc3806eb..5d75fad0 100644
--- a/repository/Zinc-HTTP.package/ZnMultiThreadedServer.class/instance/readRequestTerminationExceptionSet.st
+++ b/repository/Zinc-HTTP.package/ZnMultiThreadedServer.class/instance/readRequestTerminationExceptionSet.st
@@ -1,8 +1,8 @@
private
readRequestTerminationExceptionSet
- "Return the set of exceptions which, when they occur while reading a request,
+ "Return the set of exceptions which, when they occur while reading a request,
are interpreted as equivalent to a timeout or connection close."
- ^ self
- exceptionSet:
- #(#ConnectionClosed #ConnectionTimedOut #PrimitiveFailed)
\ No newline at end of file
+ ^ self
+ exceptionSet:
+ #(#'ConnectionClosed' #'ConnectionTimedOut' #'PrimitiveFailed' #'SpSocketError')
\ No newline at end of file
diff --git a/repository/Zinc-HTTP.package/ZnMultiThreadedServer.class/instance/writeResponseTerminationExceptionSet.st b/repository/Zinc-HTTP.package/ZnMultiThreadedServer.class/instance/writeResponseTerminationExceptionSet.st
index 06e8cdc9..02b10718 100644
--- a/repository/Zinc-HTTP.package/ZnMultiThreadedServer.class/instance/writeResponseTerminationExceptionSet.st
+++ b/repository/Zinc-HTTP.package/ZnMultiThreadedServer.class/instance/writeResponseTerminationExceptionSet.st
@@ -1,6 +1,8 @@
private
writeResponseTerminationExceptionSet
- "Return the set of exceptions which, when they occur while writing a response,
+ "Return the set of exceptions which, when they occur while writing a response,
are interpreted as equivalent to a timeout or connection close."
- ^ self exceptionSet: #(#ConnectionClosed #ConnectionTimedOut #PrimitiveFailed)
\ No newline at end of file
+ ^ self
+ exceptionSet:
+ #(#'ConnectionClosed' #'ConnectionTimedOut' #'PrimitiveFailed' #'SpSocketError')
\ No newline at end of file
diff --git a/repository/Zinc-HTTP.package/ZnMultiThreadedServer.class/methodProperties.json b/repository/Zinc-HTTP.package/ZnMultiThreadedServer.class/methodProperties.json
index 62c545cf..5f0dd53f 100644
--- a/repository/Zinc-HTTP.package/ZnMultiThreadedServer.class/methodProperties.json
+++ b/repository/Zinc-HTTP.package/ZnMultiThreadedServer.class/methodProperties.json
@@ -11,9 +11,9 @@
"notifyUnreportableError:" : "dkh 06/29/2014 23:12",
"readRequestBadExceptionSet" : "SvenVanCaekenberghe 5/14/2013 10:43",
"readRequestSafely:" : "dkh 12/11/2014 06:26",
- "readRequestTerminationExceptionSet" : "SvenVanCaekenberghe 5/27/2013 14:57",
+ "readRequestTerminationExceptionSet" : "dkh 12/11/2014 14:41",
"serveConnectionsOn:" : "dkh 12/06/2014 12:37",
"workerProcessName" : "SvenVanCaekenberghe 12/13/2010 16:33",
"writeResponseBad:on:" : "SvenVanCaekenberghe 5/14/2013 10:48",
"writeResponseSafely:on:" : "dkh 06/29/2014 10:49",
- "writeResponseTerminationExceptionSet" : "SvenVanCaekenberghe 5/14/2013 10:39" } }
+ "writeResponseTerminationExceptionSet" : "dkh 12/11/2014 14:42" } }
diff --git a/repository/Zinc-HTTP.package/monticello.meta/version b/repository/Zinc-HTTP.package/monticello.meta/version
index 88fa2a5b..602a12a5 100644
--- a/repository/Zinc-HTTP.package/monticello.meta/version
+++ b/repository/Zinc-HTTP.package/monticello.meta/version
@@ -1 +1 @@
-(name 'Zinc-HTTP-dkh.406' message 'Issue #58: fix calling logic for ZnGemServerLogSupport>>handleBreakpointException:resumeIfResumable:' id '02b441e3-2f57-4cdd-b2eb-7d663d9c53c7' date '12/11/2014' time '14:20:39' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.405' message 'moved UUID>>asString36 to GLASS1 (see https://github.com/GsDevKit/zinc/issues/43)' id '2de0a436-81e1-4fd4-864e-f524a2ef5906' date '12/11/2014' time '13:47:28' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.404' message 'Issue #58: some tweaks to implementation as I flesh out ZnSeasideGemServer for seaside ... fine tune logging and honor debugMode in terms of passing exceptions when set ....' id '93d104da-763a-4c0a-a88f-948051c130e4' date '12/11/2014' time '06:58:08' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.403' message 'Issue #58: make SocketStream and friends continuation friendly by wrapping GsSocket references in a TransientStackValue. Add ZnTransactionSafeManagingMultiThreadedServer a subclass of ZnManagingMultiThreadedServer where all references to GsSockets are wrapped by a TransientStackValue ... including places where GsSockets are passed as arguments ... this makes the server instance transaction safe, so continuations can be snapped off and transactions can be safely used in delegates ...' id '0f71b3bd-51e8-4147-a86d-e304e0c1bbeb' date '12/09/2014' time '11:21:17' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.402' message 'Issue #58: fix typo' id '7b2f8914-dec9-4199-9ad3-86e354d28f27' date '12/07/2014' time '07:50:44' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.401' message 'Issue #58: flesh out remote breakpoint work ... cannot switch back to native threads, but for development of servers, it can still be useful ... continue following this thread ...' id '3dcf0fc7-510d-4beb-957f-924a845fa5d0' date '12/06/2014' time '15:02:52' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.400' message 'Issue #58: ZnLogSupport>>breakpointExceptionSet needed ... ZnRestServerDelegate>>handleRequest: should not handle Exception!' id '7f2f3b66-3cad-4189-a5d4-9f0c2f36e16f' date '12/05/2014' time '16:30:33' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.399' message 'Issue #58: GemServer class>>handleBreakpointException: moved to ZnGemServerLogSupport, so breakpoing exceptions can be under enableContinuations control .... and breakpointExceptionSet controlled vi ZnGemServer ' id 'd02fc4b2-a7d0-4365-b64d-f69abe945c22' date '12/05/2014' time '15:02:46' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.398' message 'Issue #58: fix sent but not implemented' id '719304b2-c0bd-4636-9bdb-f4629952a46d' date '12/04/2014' time '08:08:04' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.397' message 'Issue #58: fixed{?) an accept problem whereby an accept error in SocketStreamSocket would lead to an infinite loop creating processes and then running out of memory ... Fix Rest test error ... only pass exceptions in debugMode for ZnServer' id 'b5faca58-86c1-45ab-9553-1294e1af0ded' date '12/04/2014' time '07:52:23' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.396' message 'Issue #58: add ZnLogSupport>>object: ... for dropping an object into the object log...refactor REST tests to allow for testing using remote ZnGemServer and add persistence to ZnExampleStorageRestServerDelegate ... a bit of house cleaning in ZnGemServer' id '15078ceb-f99a-45da-a878-afaf6dd47bf4' date '12/04/2014' time '06:38:36' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.395' message 'Issue #58: add halt/breakpoint handlers to ZnSingleThreadedServer>>serveConnectionOn: and ZnMultiThreadedServer>>executeRequestResponseLoopOn: ' id '9dc2976d-a30a-459a-bf27-38e0cd344e2e' date '12/03/2014' time '15:04:20' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.394' message 'Issue #58: ZnSingleThreadedServer>>logServerError: to unconditionally log an error: and handleError: for GemStone so we make sure that all errors make it to the log (object log and continuation) AND the gem file .... add gobs of log helper methods to ZnGemServer ... control logging method and filter and whether or not continuations are created for errors from ZnGemServer' id 'adfc58cc-0093-4497-aa69-4bd5882c9fea' date '12/03/2014' time '14:38:54' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.393' message 'Issue #58: ZnSingleThreadedServer>>handleRequestProtected: don''t pass the exception ... debugMode doesn''t quite appy to GemStone ... need different granularity I think ... GsPharo 0.9.2 needs to be used' id 'baa8f9c1-8596-499c-b756-8b7c9d805bad' date '12/02/2014' time '16:29:11' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.392' message 'Issue #58: ZnWebSocketTests>>testEcho test passing ... in debugMode, use ZnObjectLogLogger ... practical to debug ZnGemServer using object log logging and continuations' id '56012f4e-e24d-4274-9480-464e39e012c3' date '11/30/2014' time '20:18:37' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.391' message 'Issue #58: a log can be specified for an instance of ZnGemServer. By default errors are logged to transcript and continuation commmited to object log.... ' id '287b4e2c-f842-43d8-b260-e19a3b059342' date '11/30/2014' time '11:19:10' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.390' message 'Issue #58:
- always snap off continuation when an error event occurs
- add some error handling a bit higher up the zn stack ...
to catch application errors as well ... might be able to
continue processing without passing error ... still passing at
the moment...
- ZnTranscriptLogger for all ZnGemServer guys ... might want to
make this easier to customize
' id 'de82eb89-74dc-466c-990f-8f5ceae284f4' date '11/30/2014' time '10:39:44' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.389' message 'Issue #53: barring any new sent but not implmented messages, this bug should be fixed .... of course Issue #61 and Issue #62 were opened to implement the missing behavior' id '1fbac59e-9a7d-4d63-831c-a268f4ec664d' date '11/17/2014' time '16:17:42' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.388' message 'client forwarder safe tests for interactive session' id '5be60a6d-65b2-4738-a753-e5adff4864ac' date '06/29/2014' time '23:15:39' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.387' message 'remove extra tracing code ... tests greeen for GemStone 3.2' id '829b5fe3-3585-4b20-9a64-27cf084bd5da' date '06/29/2014' time '15:48:14' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.386' message 'logging for travix ZnServerTests>>testReadEvalPrint failures ' id 'f9fb3b5b-7c9d-44eb-8366-b06db2cc5f42' date '06/29/2014' time '15:17:53' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.385' message 'improve error reporting for ZnUnknownHttpMethod (tracking an error during tests) ... fix test case logging for non-interactive tests' id 'd0e4a2de-762b-432d-8600-a6dcf1bac062' date '06/29/2014' time '12:09:43' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.384' message 'significant work on Zinc logging...
- add ZnObjectLogLogger to record ZnLogEvents in Object log
- add ability to log errors for additional filter granularity
in log.
- install error event in the several(!) in Zinc client/server code
where exceptions are silently ignored - exceptions logged as
debug event along with hundreds of other non-exception based
events)
- use error event in ZnSingleThreadedServer>>logServerError:
which also swallows errors ... returns an error response
- Zinc tests refactored to:
1. turn on logging Transscript or ObjectLog depending upon
whether tests are being run interactively or not
2. trace test running in object log to make it possible to
correlate client/server log errors with the test being run.' id 'bb1e03f0-1ee1-4fb3-a05b-43e5961a28c6' date '06/29/2014' time '11:52:48' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.383' message 'checkpoint: 282 run, 274 passes, 0 expected defects, 6 failures, 2 errors, 0 unexpected passes' id '984043a7-e539-429c-8846-c7d1abec9505' date '06/27/2014' time '21:06:25' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.382' message 'strip ZnByteStringBecameWideString out of the zinc code (leave in tests) ... test fixes
- 282 run, 272 passes, 0 expected defects, 8 failures, 2 errors, 0 unexpected passes' id 'c53c907d-0262-4d69-8d39-5a9e78c52cc2' date '06/27/2014' time '16:22:44' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.381' message '282 run, 269 passes, 0 expected defects, 11 failures, 2 errors, 0 unexpected passes
- beef up server error handling
- logic to bring up debugger when running
interactively (clientForwarder defined for
Transcript)
- object log dumps ... no transactions at this point' id '8daec818-73e2-44d6-b558-55aa188cc061' date '06/27/2014' time '15:15:10' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.380' message 'Checkpoint: 282 run, 258 passes, 0 expected defects, 10 failures, 14 errors, 0 unexpected passes
' id '37891947-eb1c-417b-9228-2271d81a1a57' date '06/25/2014' time '21:52:54' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.379' message 'remove `(Delay forMilliseconds: 10) wait.` from ZnSingleThreadedServer>>releaseServerSocket ... not good result in GemStone3.x ..' id '124768f5-46a3-4d2b-ad55-82c44b1f56b1' date '06/25/2014' time '07:45:02' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.378' message 'port some changes made to improve stability for ZnMultiThreadedServer (i.e., error handling) ' id '3b13d0a2-2cf8-494f-a67e-878ca5953b57' date '06/24/2014' time '20:16:20' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.377' message 'move forkAt:named: to BlockClosure ... a shared class between 2.x and 3.x' id '632ea1bf-96f5-4838-b45b-bebfb4cafb3d' date '06/24/2014' time '19:42:59' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.376' message '' id 'b62843de-3718-4d88-b0e1-06af996ff809' date '05/24/2014' time '17:35:07' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.375' message 'zinc is dependent upon GLASS1 now ...' id '484f343c-dd72-4f02-8462-120cba385cec' date '05/23/2014' time '17:17:27' author 'dkh' ancestors ((name 'Zinc-HTTP-JohanBrichau.374' message 'fix WideString ref' id 'de950444-0140-45de-96af-238a26e4af0f' date '05/02/2014' time '23:52:37' author 'JohanBrichau' ancestors ((name 'Zinc-HTTP-JohanBrichau.373' message 'republish to get rid of bad utf8 encoding' id '3428f845-911a-4b51-a3a0-948c6d1eb449' date '01/05/2014' time '21:08:20' author 'JohanBrichau' ancestors ((name 'Zinc-HTTP-JohanBrichau.372' message 'porting code' id '2582ccc3-63aa-443d-859a-b90b9ed5b137' date '01/05/2014' time '15:27:28' author 'JohanBrichau' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.371' message 'Added an optimalization to ZnUTF8Encoder>>#readInto:startingAt:count:fromStream: to avoid the price of #becomeForward: when a ByteString to WideString conversion happens' id 'ef28893e-9902-4f96-bd30-1c97796df7f5' date '06/11/2013' time '04:34:04' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.370' message 'Two optimalizations: ZnStringEntity>>#readFrom: and ZnUtils class>>#readUpToEnd:limit: (if all contents read fits in the first buffer, take a fast path) - bis' id '78ad6f26-8414-47d1-980e-f1df75d91b2b' date '06/11/2013' time '02:06:42' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.369' message 'Two optimalizations: ZnStringEntity>>#readFrom: and ZnUtils class>>#readUpToEnd:limit: (if all contents read fits in the first buffer, take a fast path)' id '6ad9e454-799e-4d99-bd39-92f12cc41bef' date '06/11/2013' time '01:59:24' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.368' message 'Added/refactored some ZnHeaderTests
Fixed ZnClientTests>>#testGetGeoIP' id '313a504c-dee4-49c8-8541-bdcdda740273' date '06/11/2013' time '11:41:49' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.367' message 'Introduction of ZnEntity class>>#matches: to fix ZnEntity class>>#concreteSubclassForType:binary: and
ZnEntity>>#contentType: (Thanks Andy Kellens)' id '04dcc6f1-361f-46c1-a734-746b71460eb2' date '06/04/2013' time '04:28:29' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.366' message 'Updated some class comments' id 'ab163d28-d657-479b-90e3-b12566dfcb34' date '06/04/2013' time '01:52:17' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.365' message 'Further performance tuning of ZnEntity reading/writing' id '42e083e5-cad8-4800-b439-18bdb755909b' date '05/28/2013' time '01:25:34' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.364' message 'Optimized ZnHeaders>>#normalizeHeaderKey: using a CommonHeaders set' id '5564fa6a-bcde-4cfd-817c-3fd49f51d34d' date '05/28/2013' time '12:09:48' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.363' message 'Implemented ZnTestRunnerDelegate (original idea by Norbert Hartl - Thx)
Minor optimalization to ZnUtils class>>#nextPutAll:on:' id 'a1fa8795-eb44-4812-81e7-3da28fa9bda9' date '05/28/2013' time '10:38:03' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.362' message 'Changed ZnMultiThreadedServer>>#readRequestTerminationSet to a more sane value (this was probably forgotten in the last refactoring)
Added a CRLF to /echo in ZnDefaultServerDelegate' id '0ec0f1da-d41f-4b7a-9911-7111341cad51' date '05/27/2013' time '04:21:34' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.361' message 'A new implementation of ZnStringEntity>>#readFrom: based on buffer wise delegation to ZnCharacterEncoder>>#readInto:startingAt:count:fromStream' id '109ed743-caf5-410c-9162-72933240fa53' date '05/23/2013' time '12:37:04' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.360' message 'Performance enhancement in ZnMessage/ZnEntity writing (more intelligent buffering, more intelligent encoding)
Implemented #= and #hash for all Zn Core objects
Tracking ZnMimeType>>#= and #match: changes
Added new tests and benchmarks
' id '9ee5d56f-fd93-4115-976f-371df43dd56d' date '05/22/2013' time '04:35:36' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.359' message 'Fixed a typo in ZnNetworkingUtils>>#initialize' id '455db906-7f02-4451-80e5-1efb8573609a' date '05/20/2013' time '03:31:56' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.358' message 'FIx ZnResponse>>#setTransferEncodingChuked to send a #clearContentLength' id 'd4a01cc3-c7b5-440c-8cfd-7f10b395816e' date '05/20/2013' time '03:02:58' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.357' message 'Added ZnServer>>#useGzipCompressionAndChunking[:] option and implementation (disabled by default)' id '3586cb96-51a2-4c00-b120-1ec622e2505a' date '05/19/2013' time '09:25:43' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.356' message 'Refactored ZnEntity subclasses #writeOn: to use the newly introduced ZnUtils class>>#nextPutAll:on:
ZnEntityWriter now uses a buffered stream when there is chunking without gzip compression for text (otherwise each character would become a chunk)
Switched ZnNetworkingUtils to use ZdcSocketStream when it is available' id '3c079a63-a106-4254-aa8c-81bc9a64aa69' date '05/19/2013' time '11:49:28' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.355' message 'Introduction of ZnEntityWriter with support for gzip/chunked encoding' id '69d9f0c8-d113-41e9-ab0d-8ba97e296597' date '05/18/2013' time '02:06:11' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.354' message 'Added #chunkCount to ZnChunked[Read|Write]Stream
Added #position to ZnChunkedWriteStream' id '9dcbc597-fb19-4469-937f-9dc504b5d02d' date '05/18/2013' time '12:42:31' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.353' message 'Optimized ZnChunkedReadStream>>#upToEnd' id '79dce0bc-490e-4364-b138-584728356cc6' date '05/17/2013' time '11:57:22' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.352' message 'Added ZnChunkedWriteStream
Reorganized ZnChunkedStreamTests' id '2ac8bc6d-5fdd-408b-8212-93df128a777a' date '05/17/2013' time '05:06:57' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.351' message 'Improved and simplified ZnReadEvalPrintDelegate.' id 'a4a8cbaf-2c42-485b-b442-8f982d8e08a4' date '05/16/2013' time '01:16:21' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.350' message 'Added ZnReadEvalPrintDelegate, a REPL Web Service.' id 'd18e631a-94e4-4803-9549-beff989ff14b' date '05/15/2013' time '10:46:07' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.349' message 'Changed exception handling in ZnMultiThreadedServer: parse errors while reading an incoming request now result in a bad request response ' id 'b77fabc9-a1e3-462a-8c1a-e18b4b017f25' date '05/14/2013' time '01:42:46' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.348' message 'Added ZnClient>>#curl debugging utility which generates a curl command line invocation from the current request' id 'c238e1b9-84f9-4960-bca4-6c0fae43db50' date '05/07/2013' time '05:05:47' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.347' message 'Extended ZnClient>>#noteRedirect to take the target URL as argument and log it' id '145d12ff-c4af-446a-9666-db575fcb7ff8' date '04/19/2013' time '01:24:07' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.346' message 'Bugfix to ZnApplicationFormUrlEncodedEntity>>#addAll: (#invalidateRepresentation was no longer called after a recent refactoring) - Thanks Paul DeBruicker' id 'fe87820c-7859-4abe-8258-2e93c9b2611b' date '02/24/2013' time '11:07:46' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.345' message 'Added a #prepareRequestHook to ZnClient (see #prepareRequest: to set, #prepareRequestHook to access and #prepareRequest for the invocation);
the request preparation hook is an object conforming to the #value: protocol that gets the final chance to change a request right before it gets executed. Typically used to sign requests.' id '5429a096-2d7d-4bc6-9b41-ab845c52a2c7' date '02/21/2013' time '05:10:04' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.344' message 'Switch the internal lastUsed instance variable of ZnClient from using full TimeStamp to Time totalSeconds' id 'b241e90f-e64d-4a16-89f7-b484d9a21ca8' date '02/11/2013' time '11:53:16' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.343' message 'Bugfix in ZnSingleThreadedServer>>#logServerError:' id 'a6ebbdf3-96b6-48fd-82ca-663bddafeeea' date '02/01/2013' time '04:22:47' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.342' message 'ZnServer''s #handleRequestProtected: will now also do a #logServerError unless #logServerDetails is false - this gives exception, signaller context details and a stack trace of depth 8 when an unhandled error occurs.' id 'c2255d27-bd92-4e23-965c-7be405ac857e' date '01/31/2013' time '11:56:38' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.341' message 'Moving ZnMonticelloServerDelegate from Zinc-HTTP-Client-Server to Zinc-FileSystem and Zinc-FileSystem-Legacy' id '6459b7f2-49d1-4e4e-80cf-fff3f83a7969' date '01/30/2013' time '07:56:27' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.340' message 'Extended ZnClient>>#url: to accept the new user info (username and password) component of ZnUrl when present;
ZnRequestLine>>#uri: now explicitely calls #enforceKnownScheme' id '46c6777e-07a4-41e9-8505-26f3db1f0438' date '01/30/2013' time '07:45:09' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.339' message 'Bugfix to ZnApplicationFormUrlEncodedEntity>>#readFrom: which failed when content-length was not specified (Thx Jan van de Sandt)' id '60911520-b3de-4382-89bb-aa6376640012' date '01/25/2013' time '02:46:15' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.338' message 'added ZnMessage>>#writeToTranscript' id '6fc88bfa-6111-4190-8ced-939a040c67ef' date '01/24/2013' time '10:07:31' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.337' message 'fix ZnUtils class>>#signalProgress:total: bug when total was nil: #format: index should be 1 not 0 (Thx Camillo Bruni !)' id '0cfbd214-abe9-4f6e-8a14-7184b312428b' date '01/15/2013' time '04:02:00' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.336' message 'Some internal ZnServer refactoring/cleanup; primary change is that ZnCurrentServer is now set over the whole request/response cycle including the reading/writing and not just the handleRequest (this was needed for WebSockets)' id 'd8ac8c4a-3914-4295-bcb3-e0ce7b22f745' date '01/10/2013' time '03:56:00' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.335' message 'ZnResponse class>>#redirect: and #created: now accept absolute URLs as well (thx Jan van de Sandt)
New ZnRequest API (all suggested by Jan van de Sandt):
#host to return the Host: header field as ZnUrl
#relativeUrl to explicitely request the request line uri as a relative URL
#absoluteUrl to combine the request line URL with the host URL into an absolute URL
#mergedFields to return a multi value dictionary combining query fields and application url encoded form fields
ZnClient>>#redirectUrl now uses ZnUrl>>#inContextOf:
Reimplemented ZnApplicationUrlEncodedEntity>>#addAll: and ZnHeaders>>#addAll: using ZnMultiValueDictionary>>#addAllMulti:
' id '085c1ffd-3ce3-46a7-81ab-d504bd7f0dd8' date '01/07/2013' time '12:37:54' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.334' message 'Added ZnServer>>#url and the #serverUrl option, as well as #scheme.
Now sorting all handlers in ZnDefaultServerDelegate>>#generateHelp ' id '4db52577-5ad9-4194-acf8-68abbcff67a3' date '01/04/2013' time '02:25:43' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.333' message 'refactored ZnSingleThreadedServer and subclasses (added #authenticateAndDelegateRequest: and protocol ''request handling'');
added ZnServer #route option;
extended ZnServerSessionManager>>#newSessionId to use the server route when set' id '2391f87a-1b49-4491-bd8f-722a1257d12e' date '12/31/2012' time '05:06:10' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.332' message 'fixed a typo/bug in ZnServerSessionManager>>#sessionFor: (expired sessions were not removed correctly)' id '89ca824f-fd84-4c63-aed7-d581dcca5a93' date '12/25/2012' time '09:28:10' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.331' message 'Backported a Pharo 2.0 patch: ZnNetworkingUtils>>#shouldProxyUrl: now takes the new NetworkSystemSettings class>>#isAnExceptionFor: API into account, when it is available (for pre 2.0 compatibility)' id 'b1ec8d0d-1367-4de3-94e6-c6e8fe1a8831' date '12/24/2012' time '02:30:59' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.330' message 'added ZnSingleThreadedServer>>#handleRequestProtected: with a general and global error handler that normally returns an HTTP server error unless the server is in #debugMode' id 'e049c94f-6d29-4d21-a235-7b4ce689b090' date '12/23/2012' time '06:27:48' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.329' message 'added ZnServerSession>>#attributeKeys and #removeAttribute:' id 'afc731a8-d1f6-4f5a-846d-c13ade5ab68a' date '12/21/2012' time '12:03:00' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.328' message 'Replaced ZnPercentEncodingWrong with ZnCharacterEncodingError;
Using #beLenient ZnCharacterEncoder instanciation in ZnStringEntity>>#initializeEncoder since apparently even Google sends spurious Latin1 characters' id 'a6d2358e-3ca9-43c5-b4dc-8e885ad9895d' date '12/17/2012' time '04:22:16' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.327' message 'creation of Zinc-Character-Encoding-[Core|Tests] by moving various classes out of Zinc-HTTP' id '501cdb52-158d-4020-b01e-cab709a4cab6' date '12/16/2012' time '05:02:53' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.326' message 'introduction and usage of ZnCharacterEncodingError exception;
rewrote ZnBufferedReadStream>>#upToEnd and ZnCharacterReadStream>>#upToEnd' id 'a384cd05-21fe-4e48-b5fd-1ed7e7c73cf4' date '12/16/2012' time '04:35:39' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.325' message 'fixed a typo in a ZnBase64Encoder class method' id '55fd39e4-2495-4a6b-8db3-135cc9ba6f3b' date '12/16/2012' time '12:59:27' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.324' message 'changed the implementation of ZnByteEncoder to correctly honor and dleal with holes in official mappings' id '50d334f7-91c4-479b-8d44-1e76a945754f' date '12/15/2012' time '10:02:55' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.323' message 'modified ZnByteEncoder to use its own byte to Unicode mapping tables;
this includes the change that latin1 is no longer mapped to a null encoder' id '819adf4a-fa93-4994-9a80-640fdf069311' date '12/15/2012' time '08:09:25' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.322' message 'finished the implementation of ZnBase64Encoder' id '95c632af-ec48-489c-bb94-8d44cc989787' date '12/15/2012' time '02:11:13' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.321' message 'added empty ZnBase64Encoder' id 'cc44a426-3f95-4b1c-9e3c-095bba14632e' date '12/14/2012' time '07:53:38' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.320' message 'added ZnPercentEncoder' id 'a32bf1d1-469c-4274-9d5c-efeeb2443df4' date '12/13/2012' time '11:31:31' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.319' message 'reworked/simplified some ZnClient internals
- removed the state concept and instance variable
- removed the #resetRequestIfNeeded concept and method;
added ZnClient>>#resetEntity;
added ZnClient>>#isCreated and #isNotFound
note: this might make some semantic differences for people heavily reusing ZnClient instances' id '0da03bdc-ec26-42c0-b04b-f1cd13f6f9bc' date '12/12/2012' time '10:40:34' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.318' message 'moved HierarchicalUrl>>#asZnUrl from Zinc-Resource-Meta-Core back to Zinc-HTTP' id 'b7c4b025-6901-428f-9a4d-04544f32b6dd' date '12/11/2012' time '10:15:27' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.317' message 'added ZnResponse>>#isNotFound' id 'c7b7a02b-2b16-4b98-9d41-1115e6fac2f9' date '12/10/2012' time '09:33:44' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.316' message 'moving ZnUrl, ZnMimeType and related support classes to a new, independent package Zinc-Resource-Meta-Core (and unit tests to Zinc-Resource-Meta-Tests);
extended ZnUrl to allow for some simple file:// URLs' id '9e15776d-4fc6-4b0b-91be-8552bc8cfe29' date '12/08/2012' time '09:15:34' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.315' message 'added ZnServerSession>>#attributeAt:ifAbsentPut:' id '4790203a-4259-4a33-a31f-dc867a2a38ab' date '12/07/2012' time '01:27:17' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.314' message 'Improved performance of ZnUTF8Encoder #nextFromStream: and #nextPut:toStream: by making the ASCII path really fast and by unrolling the block closure creation and usage;
Added ZnCharacterReadStream>>#peekFor:;
FIxed ZnCharacterReadStream>>#encoding:' id 'edc26e38-09d5-4e60-9c66-3ff28fe9bdd1' date '12/03/2012' time '03:00:01' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.313' message 'Added ZnBufferedReadStream>>#peekFor:
Added ZnBufferedReadStream class>>on:do:
improved some comments' id 'ec815554-cc36-435d-805d-67a2ad49465f' date '12/02/2012' time '08:03:06' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.312' message 'added ZnBufferedReadStream (from STON);
extended ZnBufferedWriteStream (with #next:putAll:startingAt: logic);
added tests for these' id '6ac64f4c-3d4b-4d29-bfab-8b181d8668b6' date '11/30/2012' time '10:59:36' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.311' message 'initial version of optional server session management;
ZnMessage and subclasses now implement #server and #session implemented via dynamic & process local variables respectively;
moved ZnHTTPSocketFacaded to deprecated;
started new category Zinc-HTTP-Variables;
extended some default server delegate responses, added ''session'' response with counter test' id 'aa1d7f79-a906-4a72-a1f6-675ed32982f6' date '11/11/2012' time '08:14:30' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.310' message 'bugfix: ZnManagingMultiThreadedServer was overwriting the wrong #stop method (thx Pavel Krivanek)' id 'a50aebff-8910-4553-95d7-b89a9e97a8f4' date '10/10/2012' time '10:48:30' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.309' message 'merged with 305 (thx paul)' id '3da1e6fc-76e0-4efa-8abe-7f334d9644bc' date '10/02/2012' time '06:59:51' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.308' message 'added ZnClient>>#setAcceptEncodingGzip as well as ZnClient>>#isNotModified' id '25811184-aeab-4d41-88f0-59277712dac0' date '09/30/2012' time '09:03:35' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.307' message 'Modified ZnServer class>>#startUp: to use a deferred startup action to start all registered servers; this should allow for normal error handling when something goes wrong initializing server sockets (thanks Igor Stasenko for the fix; thanks Denis Kudriashov for the error report)' id '9387492b-daa2-4ebf-a49d-44950586bda3' date '09/29/2012' time '09:00:49' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.306' message 'extended ZnResponse>>isRedirect with 303 and 307' id '26b8c486-2b3b-46be-942e-d6ac67f0ac62' date '09/27/2012' time '10:07:25' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-MarcusDenker.305' message 'Issue 6697: Zn+Zdc Update 2012-09-19
http://code.google.com/p/pharo/issues/detail?id=6697
Issue 6699: Share binding of metaclass methods
http://code.google.com/p/pharo/issues/detail?id=6699
' id '04e33e2c-1223-4626-87fb-3f4d73052504' date '09/21/2012' time '01:50:10' author 'MarcusDenker' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())(name 'Zinc-HTTP-SvenVanCaekenberghe.305' message 'added extra guards to prevent ZnClent options #beOneShot and #streaming: true to be used at the same time because that would result in the stream being closed too soon;
added ZnMimeType class>>#imageSvg (thx Paul DeBruicker)' id '3e1c02b0-b966-4d0d-96fb-ab90e7c1dc44' date '09/27/2012' time '02:45:26' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.304' message 'Added option ZnServer class>>#alwaysRestart: to fine tune the shutDown/startUp behavior, defaults to previous behavior' id 'dc02fe1f-869b-49a9-a281-f297b576181e' date '09/18/2012' time '01:51:37' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.303' message 'Refactored ZnNetworkingUtils>>#socketStreamToUrlDirectly: to honor/use the correct timeout both when doing a DNS lookup as well as during connect by using NetNameResolver directly as well as using #openConnectionToHost:port:timeout' id '9f5a3863-fc08-470d-b8a1-d44169952a66' date '09/18/2012' time '10:03:40' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.302' message 'Added HTTPProgress signalling to ZnByteArrayEntity, ZnStringEntity as well as ZnUtils class>>#readUpToEnd:limit:
Refactored streaming and HTTPProgress signalling in ZnUtils by addition of ZnUtils class>>#[streamingBufferSize|signalProgress:total:]' id 'd3e6d62a-ed00-40c7-aa9a-476111595f2f' date '09/17/2012' time '04:08:37' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.301' message 'Fixed a bug where HTTPProgress notifications would trigger a retry.
Thanks Camillo Bruni for finding this problem and suggesting a solution.
Now, retries are only triggered by (NetworkError, ZnParseError), while the #ifFailBlock will be trigger on any Error.
Furthermore, #noteRetrying: and noteIgnoringExceptionOnReusedConnection: will report on the actual exception.
The default #ifFailBlock is now [ :exception | exception pass ] for some cleaner code.
' id '85632c09-a6c4-40e9-b29b-1c5e86d07ead' date '09/17/2012' time '10:10:49' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.300' message 'removal of all classes in Zinc-HTTP-Deprecated
- ZnClientOld
- ZnFixedClient
- ZnExtendedFixedClient
- ZnUserAgent
- ZnHttpClient
- ZnUserAgentSettings
as well as all their unit test classes' id 'a09fb75e-0ba5-489c-bc1b-435481a08164' date '09/05/2012' time '01:59:02' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.299' message 'changed maximumEntitySize concept from a normal class variable on ZnConstants to a dynamic/process-specific variable ZnMaximumEntitySize;
added the option #maximumEntitySize to ZnServer' id 'f16b9f44-38a7-403e-9743-57fe2e25e800' date '09/05/2012' time '01:21:19' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.298' message 'introduction of options in ZnServer;
refactored port, bindingAddress, delegate, authenticator and reader as options' id '9f5f3ab5-6fc9-43f3-9815-579cb01d954c' date '09/05/2012' time '11:24:50' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.297' message '#includesSubString: becomes #includesSubstring:' id '1b207b45-8524-4e16-b2c4-64337eadb784' date '08/27/2012' time '09:41:58' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.296' message 'added [ZnDefaultServerDelegate|ZnMonticelloServerDelegate]>>#value:' id '8f44e26a-2144-48ce-8e30-6239fcf3d50d' date '08/22/2012' time '03:00:39' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.295' message 'fixed type (wws should be wss);
patched ZnNetworkingUtils>>#socketStreamToUrlDirectly: to treat wss as needing a #connect' id '233bcdca-806d-4bce-b09f-13ab7b81c9b0' date '08/22/2012' time '11:15:01' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.294' message 'extended ZnMultithreadedServer>>#executeRequestResponseLoopOn: with two new features related to the response objects generated by delegates:
- the response object now also can answer whether or not it #wantsConnectionClose
- after a response is written (flushed and logged), the response objects gets a chance to continue using the connection in the current thread/process for its own custom purposes through #useConnection: ' id 'c0e261d1-ad93-46e1-8b01-c5eedc7d32af' date '08/21/2012' time '01:29:19' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.293' message 'changed ZnSingleThreadedServer>>#serveConnectionOn: to no longer fork a worker thread/process as this is against the key idea of the class (this in not really active code, so this cleanup in more theoretical)' id '03d30d07-c250-483b-8525-91f709584ce7' date '08/20/2012' time '02:10:54' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.292' message 'fixed an offset bug in ZnUtils>>#streamFrom:to: (thx again, Chris Bailey)' id '932b7c3b-0892-48e0-a156-87cd9c4661cf' date '08/03/2012' time '10:49:38' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.291' message 'various fixes to ZnChunkedReadStream>>#readInto:startingAt:count: (thx Chris Bailey for reporting the problem);
added ZdcALimitedReadStream>>#nextInto: as it is used by Fuel' id '3d8c50cd-2d7b-459f-89f3-b77a23dccfdd' date '08/02/2012' time '11:26:02' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.290' message 'added ZnUtils class>>#streamFrom:to: to copy one stream to another using a buffer without knowing the size upfront and thus using #atEnd;
patched ZnStreamingEntity>>#writeOn: to use the new method when the content-length is nil or 0' id 'b7c44798-970d-4ab0-9da4-e73a095c91c3' date '07/20/2012' time '01:11:50' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.289' message 'allow for the schemes ws and wss to be equivalent to http and https' id '894699cd-a923-4fe0-b71c-6c629dde4f89' date '07/20/2012' time '10:33:30' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.288' message 'removed usage of OS version from ZnUserAgentSettings class>>#platformDetails' id '9811cc67-6a03-4c46-a67a-952727699d1c' date '07/16/2012' time '11:49:14' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.287' message 'Changed ZnStreamingEntity>>#readFrom: to no longer switch to non-binary - this was wrong anyway since no encoding was used' id '285ffb16-c7b3-4f82-9c19-7db828769d6e' date '07/13/2012' time '08:30:16' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.286' message 'trying to restore ancestry and some lost changes: merged Zinc-HTTP-SvenVanCaekenberghe.282 and Zinc-HTTP-SvenVanCaekenberghe.283' id '55810020-2df7-4b64-9872-4eccb8db92da' date '07/12/2012' time '10:12:57' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.285' message 'enabled HTTPProgress signalling during streaming up/downloads.
introduction of ZnSignalProgress with #enabled method' id 'e992fd76-efde-4b31-b4b4-bd468f8176f2' date '07/12/2012' time '09:58:00' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.284' message 'bugfix related to Pharo 2.0 - changed ZnClient>>#dowloadEntityTo: to use ZnFileSystemUtils class>>#newFileNamed:do: instead of #fileNamed:do:' id 'e71138c5-9577-4315-bbb9-19101b1a44cb' date '07/12/2012' time '01:23:15' author 'SvenVanCaekenberghe' ancestors () stepChildren ())) stepChildren ())(name 'Zinc-HTTP-SvenVanCaekenberghe.282' message 'killed a (comment) reference to mac.com' id 'de6f7d59-22da-4612-937b-07111df60678' date '07/04/2012' time '05:56:31' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.281' message 'introduction of the Zinc-FileSystem-Legacy package (including the new ZnFileSystemUtils class) to deal with pre/post FIleSystem introduction in Pharo 2.0 - this is the old code' id '1fcf9d84-c2c3-4e70-b45a-6c68a381329d' date '07/03/2012' time '01:48:02' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.280' message 'clean up ZnClient option setter methods to return self for easy chaining (thx Sean DeNigris)' id '00d1da5e-18a2-4f96-afe7-c7f7d6fe0c6c' date '05/30/2012' time '22:14:53' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.279' message 'added ZnMimeType class>>#applicationPdf as a convenience accessor as well .pdf as recognized file extension' id 'd636e0ff-907e-4299-bf7f-4328840ba225' date '05/27/2012' time '06:50:12' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.278' message 'added multiline/continuation header line parsing to ZnHeaders;
added some extra guards to ZnDigestAuthenticator class>>#parseAuthRequest' id '5c5f70f9-0f04-4941-a09a-cbf28ba154e4' date '05/22/2012' time '10:48:12' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.277' message 'simplified the example in the class comment of ZnDispatcherDelegate' id 'c4263c43-acf8-44b7-a3cb-6731e8d1a125' date '05/21/2012' time '10:02:55' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.276' message 'minor fix to ZnStaticFileServerDelegate' id '388a9cd6-b0b8-41ee-a24a-00aae254fa48' date '05/15/2012' time '13:15:34' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.275' message 'refactored ZnStaticFileServerDelegate a bit:
- store expiration times as seconds in #defaultMimeTypeExpiration & #mimeTypeExpiration map
- add not only Cache-Control but Expires header as well
- removed unused #responseForFile:
fixed a bug in ZnMessage>>#clearEntity (didn''t #close streaming entities with HEAD requests)
' id '94f2451b-b7e0-4d74-866b-d55b01c98ed9' date '05/14/2012' time '10:59:51' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-PaulDeBruicker.274' message 'Added handling for If-Modified-Since and Not-Modified headers to the ZnStaticFileServerDelegate' id '3f7f92c3-1ae8-4bd4-b4e2-5421cf49614a' date '05/12/2012' time '10:15:58' author 'PaulDeBruicker' ancestors ((name 'Zinc-HTTP-PaulDeBruicker.273' message 'Added the ability to set expiration headers when serving static files with the ZnStaticFileServerDelegate. Can probably adapt it to work when returning files from a WAFileLibrary if there isn''t already a mechanism for that. ' id '7684ed9a-80b2-47bb-a165-6e7ef40d555e' date '05/11/2012' time '03:26:02' author 'PaulDeBruicker' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.272' message 'updated ZnServer welcome page' id '1511b44d-a8f8-4a66-9ab7-0c5d3b0ca955' date '05/11/2012' time '15:22:56' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.271' message 'added ZnClient>>setIfModifiedSince:
refactored #downloadTo: using #downloadEntityTo:' id 'deabc112-7505-4072-9116-16200a9ea513' date '05/10/2012' time '22:46:26' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.270' message 'merged ZnUtils class>>#parseHttpDate: improvements by Sean DeNigris' id 'eec865bb-4103-4a28-9e55-5d3c471f26c7' date '05/10/2012' time '20:30:06' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SeanDeNigris.269' message 'Fix the HTTP date parsing to comply with the HTTP/1.1 standard. See discussion at http://forum.world.st/Parsing-HTTP-dates-td4623688.html.
Matching update to the tests (which all pass): Zinc-Tests-SeanDeNigris.140' id 'c7d98308-0259-4d69-a273-0572a06d9d0f' date '05/10/2012' time '12:25:56' author 'SeanDeNigris' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.268' message 'added ZnClient>>#uploadEntityFrom: and #contentType: as a convencience to easier do a direct PUT or POST of a file.' id 'e4dabff1-c4ef-4630-85d3-f00afbb516e7' date '05/09/2012' time '09:57:01' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.267' message 'first, not yet integrated versions of ZnCharacter[Read|Write]Stream;
added iso-8859-15 to known encodings in ZnByteEncoder;
added some optimizations to ZnNullEncoder' id 'e25c20c3-e14a-493d-88fa-7c9717455beb' date '05/03/2012' time '22:15:14' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.266' message 'added #match: and #contents to ZnChunkedReadStream and ZnLimitedReadStream;
added some convenience methods to ZnCharacterEncoder: #encodeString: #decodeBytes: and #encodedByteCountForString:' id '72b9579d-c272-417f-8949-2e66714574ba' date '05/02/2012' time '16:43:52' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.265' message 'finalized switch from ZnClient>>#downloadToFileNamed: to ZnClient>>#downloadTo: which also accepts directories and creates a file there like wget or curl can (as suggested by Sean P. DeNigris). Roll back FileSystem usage for now.' id '618f4d2b-35ee-4c05-a495-e74b8a793399' date '04/26/2012' time '16:45:21' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.264' message 'fixed ZnClient>>#downloadTo: using old school FileDirectory/FileStream' id '4d6a0d40-0927-4b6b-9c98-a583922b58b2' date '04/26/2012' time '14:34:09' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.263' message 'added experimental ZnClient>>#downloadTo:' id '2d0dd4da-87a0-44d5-b4aa-410041e67897' date '04/26/2012' time '14:19:23' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.262' message 'added ZnClient>>#downloadToFileNamed: ' id '483455c8-f370-40e8-8848-036044211929' date '04/25/2012' time '21:19:35' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.261' message 'timezone offsets should be Durations' id '070fd646-c4ee-451c-94f4-bf67010ada05' date '04/23/2012' time '15:41:34' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.260' message 'updated ZnEasy comment' id 'af3c61c1-498c-430a-9136-ddaf1d5537fe' date '04/21/2012' time '11:13:54' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.259' message 'Zinc-HTTP-PaulDeBruicker.257' id '67dd4881-a30f-4051-b052-f07774efec8c' date '04/20/2012' time '10:27:51' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.258' message 'merging forgotten 255 & 256 into 257' id '0c026aa8-59d1-42db-a714-8079feca26d3' date '04/16/2012' time '06:25:41' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.257' message 'minor allocation improvement to ZnStringEntity>>#readLimitedFrom:' id 'bc3d146e-dca8-4245-be9c-25f3fb76c1cb' date '04/15/2012' time '19:23:24' author 'SvenVanCaekenberghe' ancestors () stepChildren ())) stepChildren ())(name 'Zinc-HTTP-PaulDeBruicker.257' message '
Added ZnResponse>>#isError which checks if the ZnStatusLine code is >399. ' id '63eca7f3-2b5b-4112-b91e-b76ddcf0453c' date '04/19/2012' time '05:05:46' author 'PaulDeBruicker' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.256' message 'renamed ZnServer>>#interface[:] to ZnServer>>#bindingAddress[:] following a suggestion by Norbert Hartl, Thx!' id 'a3d6638c-d5c4-4c20-a6c1-566e00b752fb' date '04/13/2012' time '13:20:15' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.255' message 'added technology to allow entities to be read binary even when they are textual, thus disabling Zn''s normal decoding behavior;
this is what Seaside expects (as Seaside does its own conversions);
added ZnEntityReader>>#[is]Binary;
added ZnMessage[class]>>#readBinaryFrom:
added ZnEntity class>>#readBinaryFrom:usingType:andLength:
added ZnSingleThreadedServer>>#reader[:] to allow customizing entity reading' id 'e0d6d894-7fbb-41dd-8376-f87e4ca9da32' date '04/07/2012' time '18:29:44' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.254' message 'ZnBivalentWriteStream has to forward #flush to its wrapped stream' id '3b82b4f5-a0ed-44b4-bcd1-a5ec129d9d42' date '04/04/2012' time '16:08:44' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.253' message 'modified the implementation of ZnUtils class>>#streamFrom:to:size: to use a larger buffer when necessary and to flush the output stream each time through the loop except for the last one (this is need because we use SocketStream with autoflush false and this results in internal buffer overflow on very large writes).' id '183dc82c-6011-45b4-8a56-2c8415d381fe' date '04/04/2012' time '13:46:20' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.252' message 'changed ZnDefaultServerDelegate>>generateDWBench to use a date/time timestamp with a constant space representation ' id '94aee4dc-7124-485c-a70d-2d8f2831b35f' date '03/18/2012' time '19:23:19' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.251' message 'added ZnServer>>#localUrl ' id 'c56ae9d6-6fb1-481c-94fe-fc9ee8fa59b9' date '03/12/2012' time '22:23:47' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.250' message 'added the option to restrict ZnServers to only listen on a specific interface;
added Zn[SingleThreaded]Server>>interface[:];
added ZnNetworkingUtils [class]>>#serverSocketOn:interface' id '5097d852-2887-45ca-9f2f-5dc50ffc95f4' date '03/12/2012' time '19:50:44' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.249' message 'added some extra API to ZnMimeType to manipulate parameters and charSets' id '209986ca-144b-46d7-8449-f34b0e9c1864' date '03/06/2012' time '11:10:35' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.248' message 'Switched ZnServer class>>#defaultServerClass to ZnManagingMultiThreadedServer;
Add ZnStandardOutputLogger and ZnSingleThreadedServer>>#logToStandardOutput' id 'aaab5645-ed48-4174-bdb5-53037fb297db' date '03/04/2012' time '20:25:19' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.247' message 'changed usage of #deprecated: to #deprecated:on:in:' id '5ae403b7-a4cb-4ca9-a49a-0e71b6bd036a' date '03/04/2012' time '10:35:23' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.246' message 'extended ZnDefaultServerDelegate>>#generateStatus' id 'e1714401-1e45-4d67-97cd-7b735be277a2' date '03/01/2012' time '13:58:26' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.245' message 'fixed a bug related to sending multiple cookies;
fixed a bug related to receiving and sending cookies during redirects;
thank you Sean DeNigris;
ZnClient>>#prepareRedirect now receives and sends cookies;
ZnClient>>#sendCookies now uses a single Set-Cookie header containing multiple cookies instead of multiple Set-Cookie headers;
added ZnClient>>#resetCookies;
extended ZnClient logging with #debug printing of headers and processed cookies;
minor changes to ZnClient internal state variable' id '35bf1aac-cf81-479a-8683-8ad057b7566a' date '02/29/2012' time '20:10:13' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.244' message 'refactored/extended ZnRequest with authorization and basic authentication access' id 'b2397b7f-ec54-4461-999d-90bfa1fd517a' date '02/23/2012' time '22:17:43' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-MarcusDenker.243' message 'Issue 5299: Yet another Zn update
http://code.google.com/p/pharo/issues/detail?id=5299' id '583fa1ec-e230-4a83-8a67-12cb734c2bdb' date '02/17/2012' time '15:13:00' author 'MarcusDenker' ancestors ((name 'Zinc-HTTP-StephaneDucasse.236' message '- Issue 5149: add line in comment of VirtualMachine class>>parameterAt:. ThanksLuc Fabresse and Mariano Martinez-Peck.
http://code.google.com/p/pharo/issues/detail?id=5149
- Issue 5132: CommentReference SourcedMethodReference MethodReference are now deprecated
http://code.google.com/p/pharo/issues/detail?id=5132
- Issue 2560: Convenient methods from Grease for Strings. Thanks Sven van Caekenberghe. Part one.
http://code.google.com/p/pharo/issues/detail?id=2560' id 'f47fd8ea-3884-4572-9af9-d9f6eb4457c9' date '01/09/2012' time '17:23:41' author 'StephaneDucasse' ancestors ((name 'Zinc-HTTP-StephaneDucasse.235' message '- Issue 5157: Finder > Class > right-click > Hierarchy opens not on Class but on FinderClassNode. Tx Benjamin van Ryseghem.
http://code.google.com/p/pharo/issues/detail?id=5157
- Issue 5151: Recategorization of PanelMorph. Thanks Benjamin van Ryseghem. There is no useless cleans. Even small steps are cool and important.
http://code.google.com/p/pharo/issues/detail?id=5151
- Issue 5154: It would be great to have a setting to allow the Debugger to open centered and be 3/4 of screen. Thanks Alain Plantec.
http://code.google.com/p/pharo/issues/detail?id=5154
- Issue 5148: LimitNumberOfEntriesInZnMultiValueDictionary. Thanks Sven van Caekenberghe.
http://code.google.com/p/pharo/issues/detail?id=5148
' id 'c1c64007-e1ae-4347-b059-eb64071c1845' date '01/07/2012' time '19:13:20' author 'StephaneDucasse' ancestors ((name 'Zinc-HTTP-ZincUpdate.234' message '- Issue 5127: Zinc update
http://code.google.com/p/pharo/issues/detail?id=5127
- last bit of Issue 4688: progress bar disappears on image save
http://code.google.com/p/pharo/issues/detail?id=4688' id '96fb41c6-6187-4572-82d5-88acaff58417' date '12/25/2011' time '23:01:50' author 'ZincUpdate' ancestors ((name 'Zinc-HTTP-StephaneDucasse.233' message '- Issue 5117: MNU: Transcripter class>>open. Thanks vpnbecmann.
http://code.google.com/p/pharo/issues/detail?id=5117
- Issue 5122: ZnUpdate-Dec-20. Thanks sven van caekenberghe.
http://code.google.com/p/pharo/issues/detail?id=5120' id '49c87187-0e9e-41aa-a78d-f2eeba91da2f' date '12/25/2011' time '11:47:49' author 'StephaneDucasse' ancestors ((name 'Zinc-HTTP-MarcusDenker.227' message 'Issue 5063: Zinc uses default encoding of utf-8 when encoding url safe encoded strings
http://code.google.com/p/pharo/issues/detail?id=5063' id '3a35f66b-1807-4525-be31-56999a7ec249' date '12/09/2011' time '13:17:57' author 'MarcusDenker' ancestors ((name 'Zinc-HTTP-MarcusDenker.224' message 'Issue 5048: Move Transcript to Tools Package
http://code.google.com/p/pharo/issues/detail?id=5048
Issue 5047: Stream should not print its contents in printOn:
http://code.google.com/p/pharo/issues/detail?id=5047
Issue 5053: ZnChunkedReadStream doesNotUnderstand: #next:into:
http://code.google.com/p/pharo/issues/detail?id=5053' id '545d1d37-4bce-4a96-a438-cc7ad16618f9' date '12/04/2011' time '13:38:23' author 'MarcusDenker' ancestors ((name 'Zinc-HTTP-MarcusDenker.222' message 'Issue 4998: ContextPart>>#runUntilErrorOrReturnFrom:
(for testing)
http://code.google.com/p/pharo/issues/detail?id=4998
Issue 4994: Two failing test in ProcessTest
http://code.google.com/p/pharo/issues/detail?id=4994
Issue 5014: zn updates
http://code.google.com/p/pharo/issues/detail?id=5014' id '0eaf0a8a-f842-4a22-83d9-b1c65bf2b853' date '11/25/2011' time '16:03:18' author 'MarcusDenker' ancestors ((name 'Zinc-HTTP-StephaneDucasse.221' message ' Issue 4903: New version of Zinc
http://code.google.com/p/pharo/issues/detail?id=4903' id '37c68635-515f-43fb-8665-9d7674c0aee3' date '11/18/2011' time '15:18:42' author 'StephaneDucasse' ancestors () stepChildren ())(name 'Zinc-HTTP-SvenVanCaekenberghe.215' message 'modified ZnNeoClient>>#contents to return the stream when streaming is requested (more specifically: do not call #contents on the ZnStreamingEntity by default as this would defeat the whole idea of streaming; note that when there is a #contentReader it should do the right thing)' id 'c94ae1c2-5cc3-4ce6-9f04-28155f6834c9' date '10/26/2011' time '14:45:52' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.214' message 'moved deprecated classes to category Zinc-HTTP-Deprecated, noted deprecation in class comments' id '248c4eaf-ca0f-4584-99f4-d399438fd2ed' date '10/04/2011' time '19:11:17' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.213' message 'small fix to ZnUrl>>#inContextOf: (don''t take over the port when the scheme''s differ)' id '54792b4f-3ff6-479d-950f-91fb8052c960' date '10/04/2011' time '16:07:54' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.212' message 'deprecated instance creation (#new) of ZnFixedClient (and ZnExtendedFixedClient) and ZnUserAgent (and ZnHttpClient)' id '4fa83eba-2814-4b9c-8a71-5376eb1feaf5' date '10/04/2011' time '14:23:43' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.211' message 'added basic ZnNeoClient>>#signalProgress support' id '1f875569-9635-4039-bd9a-43b2ceb46400' date '10/04/2011' time '13:48:05' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.210' message 'added logging support to ZnNeoClient' id '6d7ff297-2967-413a-95d6-c0af0c0720d4' date '10/04/2011' time '12:53:36' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.209' message 'added some Pharo 1.2 compatibility (ZnMultiThreadedServer>>#exceptionSet:)' id 'b4d77e24-8821-4cac-b32d-f0f1412cf0f5' date '10/04/2011' time '09:57:30' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.208' message 'made ZnClient deprecations proceedable and added a test for this behavior' id '7990b131-582c-4c3b-8077-ef408ae802fb' date '10/03/2011' time '14:44:33' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.207' message 'added some logging to #closeDelegate' id '2900a3fc-3677-49d4-98c0-4b6b1ffe772b' date '09/27/2011' time '20:37:56' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.206' message 'added internal ZnNeoClient>>#resetRequestIfNeeded and ''state'' instance variable to try to properly reset after a first request is executed and a second one starts (the idea is to only keep using scheme/host/port and the connection)' id '9d23f62f-0d10-451a-ac95-ca8acd5b0780' date '09/23/2011' time '14:58:34' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.205' message 'modified ZnHeaders>>#contentLength to allow for the special case when there are multiple content-length headers, but only when they are identical;
fixed some typos in ZnHTTPSocketFacade where some arguments where ignored (thx Olivier Auverlot for reporting this)
' id '135d43af-b715-45d4-bd28-85323f49999d' date '09/20/2011' time '13:58:59' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.204' message 'made ZnTooManyRedirects an Exception instead of an Error subclass so that it is resumable;
fixed ZnNeoClient>>executeWithRedirectsRemaining: to allow for a resumed ZnTooManyRedirects exception' id '1183d199-1245-4e35-ac40-a0d52576deb3' date '09/19/2011' time '13:30:06' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.203' message 'added redirect support to ZnNeoClient (throws ZnTooManyRedirects when needed);
reworked ZnEntity #entity: #resetEntity: to allow nil as argument (see ZnHeaders>>#acceptEntityDescription:) added #clearEntity as well' id '90d7081c-2bb7-4a94-b45c-58e28dadf242' date '09/19/2011' time '11:09:57' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.202' message 'added ZnNeoClient>>#setIfModifiedSince: and test' id 'f02072f8-e33a-429d-8e27-169372fbc7f6' date '09/17/2011' time '20:42:50' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.201' message 'added time limit to ZnNeoClient connection reuse;
added ZnNeoClient>>#headerAddAll: and #queryAddAll:' id 'a5b92040-b404-4fca-951d-9d5253156cbb' date '09/17/2011' time '14:05:36' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.200' message 'added optional delegate #close-ing to ZnServer hierarchy' id '915cab3c-eddb-44f0-b38e-61a5e83185ff' date '09/16/2011' time '17:40:45' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.199' message 'patched ZnRequest>>#setBasicAuthenicationUsername:password: to allow nil arguments for clearing the Authorization header' id 'c8cce21a-86d4-4a8d-bd03-21ea97514ce1' date '09/16/2011' time '13:52:16' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.198' message 'introducing ZnEasy to take over the class side functionality of ZnClient;
ZnClient class side protocol being deprecated' id '37a8ac41-bd8c-4d7d-9d8c-3ef5d0c2fc0a' date '09/15/2011' time '20:42:57' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.197' message 'Modifed ZnNeoClient>>#isContentTypeAcceptable to allways accept empty responses;
Added ZnResponse>>#isCreated test' id 'efcd6b46-0332-4a34-8523-8470bcfa6764' date '09/14/2011' time '15:30:47' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.196' message 'added ZnUtils class>>#parseHttpDate: for use in ZnCookie>>#expiresTimeStamp' id '0f0b5286-c002-45f2-9ec6-9b21a7c8eb13' date '09/13/2011' time '11:51:12' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.195' message 'added extra guard to ZnLineReader>>#processNext for when #next returns nil' id 'cab4a65f-52f8-ce41-996c-a1c2a6b1bb95' date '09/12/2011' time '14:27:14' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.194' message 'added a nice example to ZnClient class>>#getPng: (Thx Lukas Renggli)' id 'f90ea18e-4d80-4d8d-aff1-ecb917f191ce' date '09/12/2011' time '09:32:07' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.193' message 'Changed ZnManagingMultiThreadedServer class comment' id '64e3aa90-0672-4f41-9093-6e5c97b16a79' date '09/06/2011' time '12:32:56' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.192' message 'pushed down the connection management functionality of ZnMultiThreadedServer to a new subclass called ZnManagingMultiThreadedServer' id '859098cb-28ff-453a-b8ec-dc41d10f7859' date '09/05/2011' time '14:24:54' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.191' message 'changed ZnMultiThreadServer''s lock and connections instance variable to be lazy initialized, removed the initialize code' id '9f394e71-7904-40bd-9551-03faf2f1be98' date '09/05/2011' time '12:06:45' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.190' message 'added a guard clause to ZnMultiThreadedServer>>#closeConnections so that nothing is done when there are no connections' id 'f7bdca17-3172-45cf-969d-531845cb9e35' date '09/05/2011' time '11:40:06' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.189' message 'Added some new internal functionality to ZnMultiThreadedServer:
To keep track of all its open client connections (socket streams) (#socketStreamOn: and #closeSocketStream) so that they can all be force closed (#closeAllConnections) when the server stops (#stop). This is necessary because on image save the worker processes and socket streams are frozen and fail when they start up afterwards due to illegal socket handles.
Note that #readRequestSafely: was extended and #writeResponseSafely:on: was introduced to handle several exceptions, most notably PrimitiveFailed, in the situation where a socket stream is force closed on a live process using that stream. This can be observed in #testTimeout.
The timeouts on reading/writing socket streams take care of closing connections that are kept open too long. Maybe the server side timeouts should be even shorter to conserve resources.
' id 'b4f2d979-0097-4dc8-bde9-23edda15a3f9' date '09/04/2011' time '15:20:15' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.188' message 'some simplifications to ZnNeoClient
removed some dead code from ZnUserAgent' id 'a81a6b6f-ad24-4c3f-aa91-120a404fa082' date '08/31/2011' time '22:06:26' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.187' message 'added basic cookie support to ZnNeoClient;
refactored some cookie related code;
ZnMessage subclasses ZnRequest and ZnResponse each implement #addCookie: and #cookies for different headers;
removed ZnHeaders>>#cookies;
replaced ZnCookie>>#asString with ZnCookie>>#nameValueString and ZnCookie>>#fullString;
added ZnNeoClient>>#get: and friends as convenience protocol' id '13e276c0-e257-4004-ad61-2e2fc6b5d829' date '08/30/2011' time '22:53:17' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.186' message 'added contentReader/contentWriter options to ZnNeoClient to use in #contents and #contents:
fixed general ZnNeoClient>>#execute result to be either #contents on success or the result of the #ifFailBlock on failure' id '09f5880c-8b8e-4de1-9cc2-0e3306c987a1' date '08/19/2011' time '17:27:35' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.185' message 'reimplemented ZnHTTPSocketFacade using ZnNeoClient' id 'c969791c-20ec-483d-b053-edc9c44c946b' date '08/19/2011' time '11:45:37' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.184' message 're-implemented ZnClient class side methods using ZnNeoClient;
revised ZnConnectionTimeout handling to allow nesting/overriding by changing the default to nil (see ZnNeoClient>>#withTimeoutDo:);
changed ZnUrl>>#authority to not return a default port;
added basic authentication support to ZnNeoClient;
added ZnNeoClient>>#entity[:]' id '2dea8f25-4226-476c-ad33-6108bad5183b' date '08/18/2011' time '23:11:28' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.183' message 'listening to the code critics (mostly formatting)' id 'a1062344-e54b-46b5-be1e-e12e39932a62' date '08/18/2011' time '14:50:08' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.182' message 'added empty ZnEntity>>#close
added ZnStreamingEntity>>#close to close the underlying stream if any
ZnMessage>>#resetEntity: now sends close to the enity being replaced if necessary
added ZnResponse class>>#methodNotAllowed:
ZnStaticFileServerDelegate now refuses not GET/HEAD requests
ZnSingleThreadedServer>>#handleRequest: now does a #resetEntity: on HEAD requests
implemented ZnNeoClient>>#head
streamlined the responses of ZnNeoClient operations to return #contents, except for #head' id 'e9ce39cf-0dde-447a-af48-69d07048c9d1' date '08/18/2011' time '13:57:03' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.181' message 'added ZnMimeType wildcard constants #any and #text;
added ZnHttpUnsuccessful and ZnUnexpectedContentType exceptions;
extended ZnNeoClient with #ifFail:, #enforceHttpSuccess, #enforceAcceptContentType and retry behavior' id 'cfaa0963-4bb7-49d8-a3b1-f89527ee2bc2' date '08/17/2011' time '21:42:51' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.180' message 'added ZnMimePart class>>#fieldName:entity: and #fieldName:fileNamed:
added ZnNeoClient timeout option, more url building api,
support for applicationFormUrlEncoded and multiPartFormData encoded entities for post/put' id 'ea58662e-243e-4eff-ad90-7ac4ff58e9a3' date '08/17/2011' time '14:24:50' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.179' message 'added ZnUrl>>#inContextOf:
extended ZnHeaders>>#request: to handle urls without a host
added request url building to ZnNeoClient
added oneShot option to ZnNeoClient' id '97d7e216-e0ff-4931-9dcf-498e2a938465' date '08/12/2011' time '13:52:04' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.178' message 'added code to throw a ZnMissingHost exception when a bogus ZnUrl is used to connect to a HTTP host' id '6b9c0a42-5a10-4b68-9c4c-efc33a7f52a4' date '08/11/2011' time '19:42:44' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.177' message 'added support for dealing with certain defaults in ZnUrl:
- new ZnUrl class>>#fromString:defaultScheme: and ZnUrl>>#parseFrom:defaultScheme (while #readFrom: and #parseFrom: are still using nil as default scheme, like before)
- new ZnUrl>>#asZnUrlWithDefaults (and private #setDefaults)
- new ZnUrl>>#schemeOrDefault (along the lines of #portOrDefault)
- improved support for parsing relative URLs' id '82463b1e-0ceb-494f-a9fd-ac7e043d1307' date '08/11/2011' time '15:29:00' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.176' message 'Merged Damien Pollet''s changes regarding the misspelling of ''Unknow[n]'' in exception class names (thx);
First definition of ZnNeoClient;
added support for better HTML Doc Types in some generated HTML pages of ZnDefaultServerDelegate' id '333bbc02-577c-44e3-9ef1-7489a5586f57' date '08/11/2011' time '10:33:51' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.175' message 'Changed ZnMimePart>>#fieldValueString to return an empty string instead of ''nil'' when the field is empty or absent (Thx Lukas Renggli)' id 'b95d0734-62d3-4de6-8a94-03816784d360' date '07/29/2011' time '14:23:01' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-MarcusDenker.172' message 'Issue 4326: Connection timeout problem
http://code.google.com/p/pharo/issues/detail?id=4326
Issue 4417: Zinc does not honour network proxy configuration
http://code.google.com/p/pharo/issues/detail?id=4417
Issue 4428: New mechanism for Zinc servers start/stop handling after system startUp/shutDown
http://code.google.com/p/pharo/issues/detail?id=4428' id '190ce930-79bf-4a7e-b0fa-60d1fbaecfe0' date '06/21/2011' time '16:08:49' author 'MarcusDenker' ancestors () stepChildren ())) stepChildren ())(name 'Zinc-HTTP-DamienPollet.175' message 'Fix typo in exception names.' id '82fd6138-b87e-4e81-93ff-4c874ff72e03' date '08/04/2011' time '14:22:04' author 'DamienPollet' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.174' message 'ZnDefaultServerDelegate>>#echoRequest: added option to delay the response to /echo with a specified number of seconds, as in echo?delay=60' id 'bec35859-b638-42c1-9689-3f1d7a540c8b' date '07/14/2011' time '09:54:57' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.173' message 'added ZnSingleThreadedServer>>#onRequestRespond: convenience method' id '75b3a711-a7ff-430d-a049-95a5dd1a1c3c' date '07/01/2011' time '14:17:08' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.172' message 'implemented client side support for If-Modified-Since and Not Modified:
- added ZnRequest>>#setIfModifiedSince:
- refactored ZnMessage>>#readFrom to call #readEntityFrom:
- overwritten ZnResponse>>#readEntityFrom: to take special no content response into account
- extended ZnUtils class>>#httpDate: to accept any argument that understands #asTimeStamp
' id '64fe262e-fd77-4b45-8f6a-f874995d07ec' date '06/28/2011' time '11:05:10' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.171' message 'removed some bogus class variable from ZnConnectionTimeout' id '11c76430-7cc0-4885-b4a0-709f3fbf4f57' date '06/20/2011' time '14:50:35' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.170' message 'fixed undeclared in ZnNetworkingUtils class>>#initialize (SocketStreamTimeout was renamed to DefaultSocketStreamTimeout)' id '15682e90-31ca-40e3-b26f-a4df4aab8814' date '06/19/2011' time '16:38:01' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.169' message 'implementation of a new mechanism for system #startUp/#shutDown handling by ZnServer(s):
ZnServer holds a class variable ManagedServers, clients can #register/#unregister to receive #start/#stop when the system #startUp/#shutDown is sent;
currently only the default server (of which there is only one instance per ZnServer subclass) is automatically registered/unregistered in #defaultOn: and #stopDefault,
other instances must do this explicitely themselves ' id 'ebc443eb-7ce9-488c-92cb-05a67179c4f4' date '06/19/2011' time '14:21:38' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.168' message 'introduction of ZnConnectionTimeout which is used by ZnNetworkingUtils class>>#socketStreamTimeout
and defaults to ZnNetworkingUtils class>>#defaultSocketStreamTimeout
Now you can do
ZnConnectionTimeout value: 60 seconds during: [ ZnClient get: ''http://slowhost.com/foo'' ]' id 'dbe15895-070d-4a2f-8d62-dd40c5ba028a' date '06/18/2011' time '23:12:18' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.167' message 'merged' id 'cb16cb7a-5fac-494d-ab2a-97d4261f04ae' date '06/17/2011' time '15:51:56' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.165' message 'modified #on: Error do: to #on: Exception do:' id 'ccb2d275-7dd3-44f4-ace4-12fc2217f9a3' date '06/17/2011' time '15:46:54' author 'SvenVanCaekenberghe' ancestors () stepChildren ())(name 'Zinc-HTTP-MarcoSchmidt.166' message 'Patch to work behind firewall with basic authorization' id 'acb7f2fc-d621-5d4b-983f-25d217623f11' date '06/17/2011' time '15:31:11' author 'MarcoSchmidt' ancestors ((name 'Zinc-HTTP-MarcoSchmidt.165' message 'Corrected wrong method send in NetworkUtils' id '4290066c-4367-794e-bb95-c058f1a268a0' date '06/17/2011' time '15:26:54' author 'MarcoSchmidt' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.164' message 'implemented support for proxies that require authorization;
ZnHeaders class>>#requestHeadersFor: will add a Proxy-Authorization header when needed;
added public API ZnNetworkingUtils class>>#proxyAuthorizationHeaderValueToUrl:
removed public API ZnNetworkingUtils class>>#httpProxy and #isProxySet;
upgraded public API ZnNetworkingUtils class>>#shouldProxyUrl: to be a primary interface;
refactored internals of ZnNetworkUtils to use NetworkSystemSettings directly instead of HTTPSocket;
this code still has to be tested and validated with real world proxies ' id '90d57d3d-fc41-4548-a2fd-dcd7c22a3a1f' date '06/17/2011' time '09:16:22' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.163' message 'taking over a patch from Pharo (http://code.google.com/p/pharo/issues/detail?id=4326):
adding SocketStreamTimeout as class variable to ZnNetworkingUtils to make this ''constant'' settable;
the new default is now 30 seconds' id '3622d15d-b15a-4398-a9e6-0027e600a78a' date '06/09/2011' time '21:14:27' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.162' message 'extended ZnStringEntity>>#readUpToEndFrom: to deal with the weird SocketStream>>#atEnd issue by added an extra #peek;
added ZnChunkedReadStream>>#peek;
added chunk buffer reuse to ZnChunkedReadStream' id '0205b561-44a9-4434-b40b-976b5d9a65a6' date '05/19/2011' time '12:57:24' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.161' message 'a small change to improve Squeak compatibility' id '018ccd1d-2321-4dcb-b468-722a42b9d605' date '05/17/2011' time '21:34:03' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.160' message 'fixing support for HTTP proxies (thanks Alexandre Bergel for reporting this)
requests to localhost are excluding from being proxied
- ZnRequestLine>>#writeOn: now outputs absolute URLs when proxying
- added ZnNetWorkingUtils class #isProxySet #shouldProxyUrl: and #httpProxy
- added ZnUrl>>#isLocalHost
- changed ZnUrl>>#host: to lowerCase its argument
' id '619a8697-4d71-4c1c-a99e-fe5e07f3dbb4' date '05/13/2011' time '11:07:48' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-NickAger.159' message 'minor refactoring to ZnDispatcherDelegate to use:
ZnStatusLine ok
rather than:
ZnStatusLine code: 200 ' id 'e5ab93a6-b254-4ba2-bbd9-41ecf500f584' date '05/10/2011' time '15:53:33' author 'NickAger' ancestors ((name 'Zinc-HTTP-NickAger.158' message 'refactored cookie support:
ZnResponse>>#setCookie: has been renamed to ZnResponse>>#addCookie:
ZnResponse>>#setCookies: has been removed
ZnHeaders>>#cookies now returns a dictionary rather than a ZnCookieJar
ZnCookieJar>>#cookieAt: a helper method I added, I''ve removed.
The tests have been updated as required.' id '75f5dd45-9dcf-4491-a28c-4f8cbe8e784a' date '05/10/2011' time '11:39:41' author 'NickAger' ancestors ((name 'Zinc-HTTP-NickAger.157' message 'added ZnStatusLine creation constants and refactored ZnResponse to use the constants' id '3fa86243-d119-4ab5-b87d-3c8622aa9257' date '05/10/2011' time '09:13:37' author 'NickAger' ancestors ((name 'Zinc-HTTP-NickAger.156' message 'created ZnResponse>>#setCookie: and refactored ZnResponse>>#setCookies: to use #setCookie:' id 'ac85f148-5de7-4b04-8a81-d8e7222e1f78' date '05/10/2011' time '08:37:25' author 'NickAger' ancestors ((name 'Zinc-HTTP-NickAger.155' message 'added:
Request cookie accessor
Response cookie setter' id '41a8f7a2-dbda-45bd-a831-03b7c0d6ca37' date '05/10/2011' time '02:52:47' author 'NickAger' ancestors ((name 'Zinc-HTTP-NickAger.154' message 'added ZnDispatcherDelegate for straight-forward dispatching to mapped urls.
Modelled after Ruby''s WEBrick API:
server = WEBrick::HTTPServer.new(:Port => 2000)
server.mount_proc("/heresy"){|req, res| Application.new.handle(req, res)}
server.mount_proc("/favicon.ico"){|req,res| res.status = 404}
ZnDispatcherDelegate API:
server := (ZnServer startDefaultOn: 9090)
delegate: (ZnDispatcherDelegate new
map: ''/hello'' to: [ :request :response | response entity: (ZnStringEntity html: ''
hello server
'') ];
map: ''/counter'' to: [ :request :response | counterApplication handleRequest: request response: response ]).' id '87d63347-b4ab-4c50-86a4-8d7d89d24e32' date '05/09/2011' time '21:44:58' author 'NickAger' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.153' message 'made ZnNetworkingUtils>>#socketStreamToHostNamed:port: private' id '44a98753-fe58-40bc-8a88-5887c0872212' date '05/09/2011' time '13:32:56' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.152' message 'extended ZnFixedClient with a scheme instance variable, adjusted the instance creation protocol, added a #baseUrl accessor for use in #newConnection;
added ZnUrl class>>#defaultPortForScheme:;
removed ZnNetworkingUtils class>>#socketStreamToHostNamed: to simplify the socket [stream] factory API' id '69fc77af-dddd-44c5-9119-11f9db4f85db' date '05/09/2011' time '10:23:58' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.151' message 'conversion of ZnNetworkingUtils into an instance socket[stream] factory and a class side API' id '6c95ba6b-65ec-47cb-b6dc-284fd95f3832' date '05/02/2011' time '22:46:36' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.150' message 'fixing a problem where responses without an explicit content-length but with an entity where not read as they should (thanks Esteban Lorenzano & Andy Burnett for reporting this):
- ZnResponse>>#entityReaderOn: now extends the super entityReader with the #allowReadingUpToEnd option
- ZnEntityReader>>#entityReader now swallows entities when they are #isEmpty (making them nil)
- ZnStringEntity>>#readFrom: is split between #readLimitedFrom: and #readUpToEndFrom: where the last method has extra error handling to swallow ConnectionClosed exceptions (similar to what SocketStream>>#upToEnd does)
- the ZnEntity hierarchy now implements #isEmpty' id '8fe0b470-7728-454d-bc90-fa42d8330817' date '05/01/2011' time '19:19:13' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.149' message 'rewrote ZnHTTPSocketFacade class>>#entendURL:withArguments: to be compatible with HTTPSocket class>>#argString: (Thanks Esteban Lorenzano)' id '3a49e678-fa7b-4c30-bdc6-0944c7637e7f' date '04/30/2011' time '20:55:03' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.148' message 'extended ZnDefaultServerDelegate with a configurable response to / (in the prefixMap the key ''/'' maps to another key that is used instead as prefix for another lookup)' id '309679c5-4d24-4741-b067-2adc9cc8f6c6' date '04/28/2011' time '22:27:32' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.147' message 'changed ZnServer class>>#initialize not to do a Smalltalk #addToStartUpList:after: but just use the plain #addToStartUpList: (we only depend on networking and multi-processing but those will probably be OK)' id 'b2b69990-95ff-40bc-9ff0-6cb11dc96a24' date '04/27/2011' time '19:42:51' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.146' message 'skipping over lost version:
.145
fixed ZnUtils class>>#encodeBase64: to test whether Base64MimeConverter responds to #mimeEncode:multiLine:, fall back to #mimeEncode: and manually remove Character cr occurences; this should fix Pharo 1.1.1 compatibility (Thanks Esteban Lorenzano for reporting this)
.144
added option to extend ZnDefaultServerDelegate''s prefixMap with block (taking request as argument, returning response);
changed default welcome text to include reference to /help
.143
added ZnUrl>>#postCopy;
refactored ZnStaticFileServerDelegate and added the option to redirect for directories without an ending slash
' id '57e6d630-1045-413b-8938-1259024175f9' date '04/27/2011' time '16:22:32' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.145' message 'fixed ZnUtils class>>#encodeBase64: to test whether Base64MimeConverter responds to #mimeEncode:multiLine:, fall back to #mimeEncode: and manually remove Character cr occurences; this should fix Pharo 1.1.1 compatibility (Thanks Esteban Lorenzano for reporting this)
' id 'f9f0831d-5ffa-4a5c-a8ec-b276c9babc35' date '04/26/2011' time '19:01:32' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.144' message 'added option to extend ZnDefaultServerDelegate''s prefixMap with block (taking request as argument, returning response);
changed default welcome text to include reference to /help' id '439b923a-997e-4f51-9b7d-90896f8dd97f' date '04/26/2011' time '13:44:01' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.143' message 'added ZnUrl>>#postCopy;
refactored ZnStaticFileServerDelegate and added the option to redirect for directories without an ending slash' id '08a56e5b-3270-4231-9568-4e5beffb58ae' date '04/26/2011' time '13:24:30' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.142' message 'listening to the Code Critics' id 'c78b1867-b800-4b03-805a-004df5aa7556' date '04/20/2011' time '12:47:01' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.141' message 'small fix to ZnUrl>>#printPathOn: to deal with cases where forward slashes are encoded in URLs (Thanks, Jan van de Sandt for pointing this out);
added ZnUrlTests>>#testEncodedSlash to cover these cases' id '88ca6bf6-ce11-447f-8a1d-be9c67e7db71' date '04/17/2011' time '10:33:32' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-PaulDeBruicker.140' message 'changed ByteArray declarations in
ZnConstants>>#faviconBytes
and
ZnMultiPartFormDataEntity>>#parse:boundary:
from square brackes to #() asByteArray so that the code loads with no problems into Pharo and Gemstone' id '9ac457ad-7824-4c0c-8d5d-e7ebe36f0280' date '04/10/2011' time '12:03:38' author 'PaulDeBruicker' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.139' message 'added ZnDefaultServerDelegate /help & /status;
updated framework version from 0.1 to 1.0 ;-)' id 'f960a4c5-2462-4cfb-81a9-9ee740d2e294' date '03/31/2011' time '10:17:16' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.138' message 'increased ZnSingleThreadedServer>>#acceptWaitTimeout from 60 to 300 seconds;
added some infrastructure to use this looping for future periodic tasks' id '5ba796b1-d698-4595-8a48-1500029cc52e' date '03/30/2011' time '21:25:46' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.137' message 'added new logging framework in Zinc-HTTP-Logging, consisting of ZnLogEvent (an Announcment), ZnLogSupport and ZnLogListener and subclasses ZnTranscriptLogger, ZnMemoryLogger and ZnFileLogger;
now using the new logging facilities in Zn[Single|Multi]ThreadedServer, ZnFixedClient and ZnUserAgent;
introduced new subclass of ZnFixedClient, ZnExtendedFixedClient that adds various hooks for customization
' id 'bb85953b-e489-472d-997b-27e28941c052' date '03/29/2011' time '16:49:38' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.136' message 'added postProcessHook to ZnFixedClient;
extended ZnFixedClient reuse logic so that it is limited to a maximum keep alive time (of 5s) so as not to bother running into an error anyway.' id '85d852c0-b357-42ca-95da-0ebaec1c78ad' date '03/28/2011' time '16:24:06' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.135' message 'added preProcessHook & newConnectionHook to ZnFixedClient' id '3bc47cd7-fae8-4e62-a80d-5d991de3c137' date '03/28/2011' time '14:24:04' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.134' message 'some Socket[Stream] options/parameters tweaking:
- server socket listen backlog increased from 10 to 32
- socket buffer size decreased from 8192 to 4096 (these were refused anyway)
- client socket streams now get the same treatment (#setSocketStreamParameters:) as accepted server socket streams (i.e. setting timeout to 10s and buffersize)
' id 'ee477f07-3703-4504-b62a-9e9905aec294' date '03/24/2011' time '11:01:18' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.133' message 'bugfix: it turns out that String>>#base64Encoded introduces newlines which we definitively do not want when doing Basic HTTP Encoding for example;
introduced ZnUtils class>>#encodeBase64: to do the right thing and invoke Base64MimeConvertor with the #mimeEncode: multiLine: false;
replaced all usages (added a #decodeBase64: for orthogonality);
added a unit test to catch this
' id '8c6bc0e9-09b3-4b38-84dc-90b76ad30c94' date '03/21/2011' time '20:49:39' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.132' message 'added ZnResponse>>#isNotModified' id '9d915967-5593-4909-ad83-8ba8577f6cd7' date '03/21/2011' time '10:46:35' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.131' message 'introduced ZnUnknownScheme exception' id 'd4ee20cf-2166-4a40-98ee-3f89c21e4d2e' date '03/18/2011' time '13:31:43' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.130' message 'new categories: Zinc-HTTP-Exceptions and Zinc-HTTP-Streaming;
added ZnParseError hiearchy to better handle illegal input;
fixed a bug in dealing with percent encoding in ZnUrl paths;
ZnMultiThreadedServer>>readRequestSafely: now closes on ZnParseErrors in the input' id 'ec9629aa-9c2a-45d2-aa2c-4988ab48b239' date '02/28/2011' time '15:59:37' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.129' message 'added ZnMultiPartFormDataEntity>>#partsDo:' id '5e8a1d68-ab52-4b98-80f5-4a75aa724b4f' date '02/27/2011' time '20:27:54' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.128' message 'added some extra allowed HTTP methods' id '5df00c70-8ce3-45a2-8991-770dcb04c480' date '02/24/2011' time '09:12:07' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.127' message 'implemented ZnLimitedReadStream>>#next:into:' id 'b99b13a8-0959-4e1e-a501-cf9ed2334d70' date '02/21/2011' time '23:32:04' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.126' message 'implemented ZnHTTPSocketFacade class>>#httpPostMultipart:args:accept:request:
added ZnHTTPSocketFacade class>>#constructMultiPartFormDataEntity:' id 'fbc9bd8a-55fc-4bef-99b4-cd54bd89b0cf' date '02/07/2011' time '09:37:50' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.125' message 'added ZnResponse>>#serverError:' id 'f17a0fb7-5e9a-4188-885c-553e3a372d25' date '02/04/2011' time '23:03:51' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.124' message 'fixed a typo in the ZnMimePart instance creation methods (formdata should be form-data) (thx Cédrick Béler)' id 'af6dbddc-b5d8-482a-b2ef-4071fcbba787' date '01/31/2011' time '20:16:57' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.123' message 'added ZnUrl>>#queryDo: ZnApplicationForUrlEncodedEntity>>#fieldsDo:
added ZnMessage>>#resetEntity: to allow overwriting content type and length when these are already set' id 'dffdb499-d272-4fca-9991-ad5c3ebdaad9' date '01/31/2011' time '13:58:47' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.122' message 'added proper content length computation to ZnMultiPartFormDataEntity (bugfix);
some code cleanup to ZnEntity content length computation' id 'faea419a-c94d-4f44-b0ae-067b635f1c4e' date '01/27/2011' time '17:17:08' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.121' message 'added #textJavascript as a constant to ZnMimeType;
added ZnByteEncoder to handle single byte encodings that do not map directly to the lower Unicode section (for example Latin2, ISO-8859-2) by reusing the mapping tables from ByteTextConverter;
added #handlesEncoding: and #newForEncoding: protocol to class side of ZnCharacterEncoding hierarchy' id 'c040db5f-1548-45bb-9f9d-757b78a67d70' date '01/25/2011' time '13:48:40' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.120' message 'fixed ZnUserAgent>>#redirectUrl so that relative redirect urls are made absolute in reference to the (previous) request''s url instead of self url;
changed ZnHttpClient>>#get and #head not to reference url as an inst var' id '4bf543a0-c919-4508-8703-d0a272e32691' date '01/20/2011' time '21:20:40' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.119' message 'fix ZnUserAgent>>#openConnection to honor its ZnUserAgentSettings>>#timeout' id '69b705b0-6b68-46f9-8ed0-ba43fe195768' date '01/20/2011' time '19:40:41' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.118' message 'Updated class comments' id 'acea0a40-8a21-4257-8191-72f399e4a2a4' date '01/18/2011' time '11:05:56' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.117' message 'more fixes to ZnUserAgent redirect following behavior: rewrote logic' id '39d2e9eb-9bdb-4ee4-8ca8-68c812abb3b7' date '01/14/2011' time '22:03:05' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.116' message 'changed the redirect behavior for POST/PUT requests: the common practice is to turn these into GET request, see ZnUserAgent>>#method:for:headers:data:imit: and ZnUserAgent>>#prepareRedirect:' id 'a102bbdc-8185-41b0-afa2-4d0af8f2557a' date '01/13/2011' time '13:39:01' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.115' message 'added an extra guard to ZnFixedClient>>#fixedUrl: when host is nil (thx, Cédrick Béler)' id 'ac2bcf63-4c24-4c6a-b696-2b8dff2eae4b' date '01/12/2011' time '16:15:06' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.114' message 'ZnUserAgent (and ZnClient) now can follow relative redirect locations;
introduced ZnMultiValueDictionary to allow multiple values to be stored under one key as an array;
using ZnMultiValueDictionary for queries and headers;
ZnUrl now uses ZnUtils>>parseQueryFrom: again;
various simplifications and cleanups which might help when reading the code in ZnUserAgent (and ZnClient);
ZnUserAgent (and ZnClient) now handle parameter encoding differently
' id 'e1a49d00-d9f0-4800-8cd7-cb354e86d671' date '01/12/2011' time '14:03:44' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.113' message 'promoted ZnFixedClient>>#fixedUrl: and ZnClient>>#executeRequest: to public status (and added comments);
changed ZnFixedClient>>#fixedUrl: to accept ZnUrl objects as well for more flexibility (allowing users to add query/fragment URL elements in addition to the path)
' id 'c3b62aa9-da90-4478-9ab3-ba2670411cb3' date '01/08/2011' time '20:36:28' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.112' message 'split of ZnNetworkingUtils from ZnUtils to separate related functionality (Thx S.Ducasses)' id '845f67f8-df1c-40cf-a644-4699f50bc3bb' date '01/07/2011' time '19:52:57' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.111' message 'fixed ZnClient class>>#getImageOfType:usingParser:fromUrl: to correctly report responses with unexpected mime types (Thx S.Ducasses)
' id 'd633bf09-4617-4e34-b6c7-0260dc759817' date '01/07/2011' time '19:35:18' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.110' message 'added ZnUrl>>#queryAddAll:' id 'ae2dbf13-b27d-4e45-ae66-24ee8687bb3a' date '01/05/2011' time '21:07:28' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.109' message 'added application/xml as a predefined constant to ZnMimeType' id 'eb18136d-284f-4501-81e3-8c18a0b0e503' date '01/05/2011' time '13:53:53' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.108' message 'various changes to reduce the (Lint) warning count' id 'e455691d-fadb-4303-a83f-680be600e875' date '01/04/2011' time '21:15:26' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.107' message 'introduced #asZnMimeType on ZnMimeType, MIMEType & String to replace ZnUtils class>>#asMimeType: which was removed' id '6008c428-e4d3-4767-9622-879979d4a9f9' date '01/04/2011' time '20:04:37' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.106' message 'more cleanup
added ZnBivalentWriteStream>>next:putAll:startingAt:
fixed ZnStaticFileServerDelegate example' id '2e02dc65-d058-4d72-94ff-309d005a7c16' date '01/04/2011' time '16:30:49' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.105' message 'removing unused extension methods' id '93d4f4d1-39de-40ca-9e38-6a8741df39c4' date '01/04/2011' time '16:11:00' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.104' message 'massive migration from builtin Url to ZnUrl;
added asZnUrl to String and Url
' id '73cb3a10-8b68-4f91-96a4-80a4f8603695' date '01/04/2011' time '15:34:16' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.103' message 'first version of ZnUrl class' id '8e7d4ba7-f5d9-41e7-a489-e7bfa2804c8e' date '01/04/2011' time '12:22:49' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.102' message 'added an extra guard to ZnSingleThreadedServer>>#releaseServerSocket' id '8f40387c-7d98-4816-ad2b-35665b66b14b' date '12/19/2010' time '14:53:27' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.101' message 'added caching to ZnDefaultDelegate>>#bytes: to improve benchmarking performance: this make a huge difference (thx, Philippe Marschall);
refactored ZnMultiThreadedServer>>#readRequestSafely: to use #, to concatenate exceptions into an exception set (how elegant)
' id 'ab05d220-caa7-4f39-9276-e71491ca9b78' date '12/19/2010' time '14:43:29' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.100' message 'added /bytes to ZnDefaultServerDelegate to measure the huge speed difference between binary and UTF-8 encoded data;
added ZnServer>>#isListening' id '4c960061-613e-443b-82d6-268c144d5d52' date '12/15/2010' time '21:42:47' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.99' message 'refactored ZnServer hierarchy:
- renamed old ZnServer to ZnSingleThreadedServer
- renamed old ZnExperimentalServer to ZnMultiThreadedServer
- added ZnServer as superclass and facade
ZnServer class>>#defaultServerClass is now ZnMultiThreadedServer!
' id 'f1366cea-f241-4260-bd60-23b6747b537b' date '12/15/2010' time '15:56:59' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.98' message 'finally ''solved'' the ab (apachebench) concurrent load problem (ab -k does HTTP/1.0 with Connection:keep-alive and expects Connection:keep-alive back);
added #isHttp10 and #isHttp11 to ZnRequest and ZnRequestLine;
rewrote ZnMessage>>#isConnectionClose and #isConnectionKeepAlive;
added ZnMessage>>#setConnectionKeepAlive;
added ZnRequest>>#wantConnectionClose;
added ZnResponse>>#setKeepAliveFor:;
improved ZnServer logging with proper header (including PID);
Zn[Experimental]Server>>#readRequest and #writeResponse:on: now do logging themselves #logRequest and logResponse now set lastRequest and lastResponse debugging instance variables ' id 'a463c5c8-a719-4d6e-b916-2b17116a8df0' date '12/14/2010' time '15:01:14' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.97' message 'revised #printOn: and helper methods of ZnMessage and ZnEntity hierarchy to support ZnServer>>#logRequest and #logResponse;
fixed a bug in ZnStringEntity encoder initialization;
extended ZnServer>>#acceptWaitTimeout to 60s;
' id 'f6ba0f3f-5b5a-4eb4-a54e-2c6c316ae95d' date '12/14/2010' time '12:23:09' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.96' message 'added #favicon: and #random: handlers to ZnDefaultServerDelegate' id '28d9458b-51e9-45e7-8ecf-3611b5039d2c' date '12/14/2010' time '10:54:06' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.95' message 'added #logger and #log: to Zn[Experimental]Server for extensive tracing' id '9a30d6f8-cd49-4ef4-8723-88d73ec297fe' date '12/14/2010' time '09:26:40' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.94' message 'made a number of socket related constants explicit in ZnUtils and ZnServer;
ZnUtils class>>#socketStreamOn: now sets more options explicitely;
improved process name in Zn[Experimental]Server;
ZnDefaultServerDelegate>>#welcome: now replaces CR with LF in ZnConstants class>>#welcomePageHtml ' id 'b6740682-52d3-4cc6-af7a-8ce6f5a2dbfc' date '12/13/2010' time '17:02:18' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.93' message 'refactored ZnServer''s and ZnExperimentalServer''s #listenLoop and #serveConnection[s]On: with the introduction of #initializeServerSocket, #releaseServerSocket, #executeOneRequestResponseOn: and #executeRequestResponseLoopOn:' id '7308c60d-4aa0-4653-89eb-78c703dd047f' date '12/10/2010' time '16:17:17' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.92' message 'Simplified ZnServer by moving functionality to ZnDefaultServerDelegate, a new class handling echo, dw-bench, unicode and / welcome' id '3f058ee0-89a2-4999-bd25-f02bf68cf0ff' date '12/10/2010' time '15:54:08' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.91' message 'added ad improved ZnServer method comments' id '0a8191cc-e438-4345-bc9b-e42a11ef367e' date '12/10/2010' time '15:05:34' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.90' message 'added ZnBufferedWriteStream class>>#on:do: modeled after #fileNamed:do: a convenience method that makes sure #flush is a called' id 'b8d896bf-6688-41e0-8ca5-267326b29c2a' date '12/09/2010' time '18:26:21' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.89' message 'added ZnUtils>>#socketStreamToHostNamed:port: followed by some simplification and refactoring' id 'a00bab52-f57d-4d34-bc86-be0a4b2be3cc' date '12/08/2010' time '11:19:14' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.88' message 'added experimental ZnBufferWriteStream' id 'fd2dd63e-035b-4c72-a4d4-58933b890e13' date '12/08/2010' time '10:21:55' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.87' message 'added ZnValueDelegate that converts #handleRequest: to #value: on a wrapped object' id '34a705ac-c414-441f-a606-443e50f91449' date '12/07/2010' time '16:20:02' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.86' message 'some more comment improvements' id '6e89b08f-198b-4ccd-b334-801598105a9e' date '12/07/2010' time '15:23:09' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.85' message 'renamed ZnMagicCookie[Jar] to ZnCookie[Jar]' id '1885b80b-6dfc-4366-8f69-ba459de201ea' date '12/07/2010' time '00:02:25' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.84' message 'moved all classes from category ''Zinc-HTTP-New-*'' to ''Zinc-HTTP-*''' id 'fb5273fe-7cd7-4bf0-b4e4-a366bf735e65' date '12/06/2010' time '21:41:56' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.83' message 'removed all Zinc-HTTP-Old-* categorized classes from the Zinc-HTTP package (these will be moved to a new MC package called ''Zinc-Old'')' id '4123ffde-b6f7-4233-b9c8-ddfdac314c1f' date '12/06/2010' time '17:26:43' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.82' message 'removed #isBinary from ZnEntity (and subclasses) ''testing'' protocol' id '3b12b147-c0bb-447b-bac2-53d899b54703' date '12/06/2010' time '16:05:17' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.81' message 'ZnStringEntity>>#printContentsOn: now relies on #nextPutAll: instead of #print: to avoid quoting by String>>#storeOn:' id '83409534-1da5-4991-a7ba-eeed6de8b6c9' date '12/06/2010' time '15:16:22' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.80' message 'renamed class ZnNewStringEntity to ZnStringEntity' id 'ef1213ed-3501-4a47-b346-424edb8828c3' date '12/06/2010' time '13:50:02' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.79' message 'removed class ZnStringEntity' id '305134b7-e6f5-4930-b3ed-70ee5213bf01' date '12/06/2010' time '13:47:48' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.78' message 'ZnMessage>>#hasHeaders was wrong;
ZnBivalentWriteStream class>>#on: will no longer instanciate a new wrapper if the wrapped stream is of its own type;
went over all class comments and updated lots of them
' id '0ac22c19-d755-4abf-8271-701953203148' date '12/06/2010' time '13:12:57' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.77' message 'fixed ZnHTTPSocketFacade>>#httpPut:to:user:passwd: (apparently MC passed in a byte array instead of a string, luckily ZnEntity>>#with: can deal with this)' id '58c44c1f-02ea-40e3-a5bd-e54fcd38ffd3' date '12/04/2010' time '14:26:11' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.76' message 'large changeset: switch from ZnStringEntity to ZnNewStringEntity, now using binary socket streams on server, all with the goal of proper UTF-8 support;
- ZnEntity and subclasses not do proper #printOn: using #printContentsOn: (this is used in ZnServer''s echo handler);
- added ZnBivalentWriteStream>>#isBinary which caches the #isBinary property of the stream it wraps (added fallback when DNU #isBinary);
- added ZnUtils>>#socketStreamOn: which is used by ZnServer>>#serveConnectionOn: to force a binary stream;
- fixed ZnMessage>>#hasHeaders and ZnMimePart>>#hasHeaders;
- debugged ZnNewStringEntity
- in order to support both binary and character streams, ZnMessage, ZnStatusLine, ZnRequestLine and ZnHeaders now use a ZnBivalentWriteStream in their #writeOn: implementations;
- fixed ZnUserAgent>>#processResponse: to only read headers and no entity when doing a HEAD request
' id 'c7354231-e350-4fa6-aee7-b3d7e68eae66' date '12/04/2010' time '14:11:32' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.75' message 'added instance creation and preferred subclass accessing protocol to ZnEntity to make it a facade;
replace all direct references to ZnStringEntity and ZnByteArrayEntity with ZnEntity facade invocations
' id '38988dd8-c300-47cb-8aca-bf620c808fc3' date '12/03/2010' time '14:08:08' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.74' message 'added #isCharSetUTF8 and #setCharSetUTF8 to ZnMimeType;
changed the defaults/constants #textPlain and #textHtml of ZnMimeType to use UTF-8 as charset;
created new class ZnNewStringEntity that uses an encoder to write/read strings to/from a binary stream
' id 'b5a8d802-77ff-4880-9e20-3af6d16d14c4' date '12/02/2010' time '13:50:43' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.73' message 'ZnUTF8Encoder: introduced next block in #nextPut:toStream: to reduce code duplication; made #nextFrom: more compact' id 'b0852d58-48b1-48d8-8172-d54525449ef6' date '11/30/2010' time '13:49:46' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.72' message 'introduction of ZnCharacterEncoder, ZnNullEncoder and ZnUTF8Encoder' id '7cdd0747-637c-44a9-a835-8b055e0353b9' date '11/30/2010' time '12:28:00' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-pmm.71' message '- fix unit tests
- see http://hudson.lukas-renggli.ch/job/Zinc/' id '3554a779-86fe-4c2b-a826-900044edbb67' date '10/25/2010' time '07:10:47' author 'pmm' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.70' message 'added ZnBufferedEntity (part 1 of a refactoring of entities)' id 'b703ca9b-f970-416a-bb28-c08a0246d585' date '10/20/2010' time '10:40:38' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.69' message 'ZnUtils>>socketStreamToUrl: meant to put the stream in binary mode but was using isBinary, fixed' id 'e85c3518-20bc-407b-9522-4cca9e0ce34d' date '10/14/2010' time '14:35:45' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-MattKennedy.68' message 'Added isComplete testing message to the ZnCredential classes to answer true if all required fields are set.
Updated ZnUserAgent>>prepareCredentials:for:method to use ZnCredential>>isComplete test.
Updated ZnUserAgent>>defaultErrorHandler to raise exceptions again.' id '25b31f4c-23b2-458e-939d-557bce7e1e71' date '10/06/2010' time '17:24:46' author 'MattKennedy' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.67' message 'removed another String>>#trimBoth usage from ZnMimePart>>#contentDispositionValues;
reimplemented ZnUserAgentSettings class>>#platform more elegantly
' id '72a2d1b8-f68a-4c85-84c6-e7f515f1879b' date '10/06/2010' time '09:34:33' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-MattKennedy.66' message 'Reverted ZnUserAgent>>defaultErrorHandler change. Wasn''t passing all tests correctly.' id '6a148c14-5451-4ca5-8180-767e1c376f08' date '10/05/2010' time '17:39:08' author 'MattKennedy' ancestors ((name 'Zinc-HTTP-MattKennedy.65' message 'ZnUserAgent default error handler raises exceptions to the debugger again.
Added ZnHttpClient>>parameterAt:add:' id '433b8d17-912b-46dd-9a52-3888f753fdc4' date '10/05/2010' time '17:33:49' author 'MattKennedy' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.64' message 'added ZnUtils class>>#trimString: until String>>#trimBoth is available everywhere;
fixed usage in ZnMimeType>>#contentDispositionValues
' id 'd25e7ffe-691e-43c1-9607-842b9225d5a8' date '10/05/2010' time '21:26:53' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.63' message 'first complete/working version of ZnMultiPartFormDataEntity and ZnMimePart (reading/writing/instance creation/accessing);
added ZnMimeType>>#parameterAt:[ifAbsent:]
' id '5c9658b2-329f-4197-b9a5-d25751435191' date '10/05/2010' time '20:33:32' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.62' message 'first rough and unfinished implementation of ZnMultiPartFormDataEntity;
started extending ZnMimePart to allow field handling;
introduced ZnBivalentWriteStream
' id '19b39ff5-631f-4e08-bda2-370466c52bae' date '10/04/2010' time '21:24:15' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-MattKennedy.61' message 'Added ZnHttpClient which subclasses ZnUserAgent to implement a high level API.
Updated ZnUserAgent>>prepareCredentials:for:method: to handle credentials stored on the session before the client receives a 401 from the server.
' id '70e0bcdb-0b42-4f13-9c9b-c7d1b8a01815' date '10/01/2010' time '22:31:54' author 'MattKennedy' ancestors ((name 'Zinc-HTTP-MattKennedy.60' message 'Expanded options for MD5 hash mechanisms in ZnDigestAuthenticator.
Added test method to ZnDigestAuthenticator to answer if MD5 support is available.' id '7b1d4f73-febb-4e32-86ca-8af7b3e610e5' date '10/01/2010' time '05:44:52' author 'MattKennedy' ancestors ((name 'Zinc-HTTP-svc.59' message 'OK, even more fixes after testing in Squeak 4.1 (MD5 is still missing though)' id '44a8cccf-1470-4fa8-9e15-344cba9e6411' date '10/01/2010' time '09:56:22' author 'svc' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.58' message 'OK, some more fixes after testing in Pharo 1.2' id '93d5f2cc-330a-4931-8163-599c21f80253' date '10/01/2010' time '21:44:24' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.57' message 'reimplemented ZnUserAgentSettings class>>#platform to deal with Pharo 1.1/1.2 portability issues (introduction of OSPlatform class);
modified ZnUserAgent>>#prepareHeaders:for: to use ZnHeaders>>#addAll:
' id 'bf8f9509-4a6c-4fed-9575-3202a9627d2e' date '10/01/2010' time '21:37:10' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-MattKennedy.56' message 'Added .errorHandler to ZnUserAgent' id 'ae9aa81f-770d-40cc-859d-d1316d3a12cd' date '10/01/2010' time '14:44:47' author 'MattKennedy' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.55' message 'merging' id '3cae8f4c-33ca-44ab-85e9-c7e5e8f6a84d' date '10/01/2010' time '09:43:18' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.54' message 'introducing ZnMimePart (has maybe to much implementation in common with ZnMessage, but in use they are less similar)
' id '8888796c-9303-408d-b6c0-30310fee5ab6' date '10/01/2010' time '09:41:57' author 'SvenVanCaekenberghe' ancestors () stepChildren ())(name 'Zinc-HTTP-MattKennedy.54' message 'Modifed ZnResponse so that the WWW-Authenticate response is no longer hard coded.
ZnBasicAuthenticator supports optional custom realm settings.
Added ZnDigestAuthenticator.' id '88223dbc-9831-4746-a680-f2eff6720e76' date '09/30/2010' time '17:36:25' author 'MattKennedy' ancestors ((name 'Zinc-HTTP-MattKennedy.53' message 'Removed trimBoth: sender from ZnDigestCredential>>parseAuthRequest:' id '5d0dfdae-b927-4634-a4a9-272e3d78aeb0' date '09/30/2010' time '12:28:40' author 'MattKennedy' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.52' message 'changed the required protocol for a ZnServer delegate from #value: to #handleRequest:
' id '6f652f18-f202-4ce8-b139-a47c687d36f1' date '09/30/2010' time '18:15:10' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.51' message 'changed ZnServer authenticator protocol from #value:value to #authenticateRequest:do:
introduction of ZnBasicAuthenticator class as a first plugin
' id '49469b61-5c90-45cb-8253-5483f43f79e1' date '09/30/2010' time '16:35:01' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-LukasRenggli.50' message '- removed the sender of #trimBoth: that removes $" before and after the basic-autentication string, as #trimBoth: is not part of PharoCore
- this fixes 2 breaking tests, but maybe introduces a regression on certain we browsers?' id 'a991e99b-b085-4cf0-ae5a-1d9addb5d83a' date '09/30/2010' time '08:33:20' author 'lr' ancestors ((name 'Zinc-HTTP-MattKennedy.49' message 'ZnDigestCredential now implements working Digest authentication support for client requests in ZnUserAgent.' id '4fb9842a-9138-4567-b15a-0136611d6ce8' date '09/29/2010' time '17:18:28' author 'MattKennedy' ancestors ((name 'Zinc-HTTP-MattKennedy.48' message 'Handling authentication credentials for ZnUserAgent with ZnCredentials and ZnUserAgentSession implemented, currently with support only for Basic authentication.' id '40c5bd87-c830-4b93-97d7-4f6b4a52b0de' date '09/29/2010' time '00:57:02' author 'MattKennedy' ancestors ((name 'Zinc-HTTP-MattKennedy.47' message 'Added ZnCredential and subclasses for Basic and Digest auth. Only stubs right now, next step to flesh out with test cases.
Updated ZnUserAgentSession for storing credential objects.
Added ZnMagicCookieJar>>cookieAt:forUrl: and ZnUserAgent>>cookieAt:' id '45c35930-c60a-48b8-b2b5-68a29e905ca4' date '09/28/2010' time '16:38:54' author 'MattKennedy' ancestors ((name 'Zinc-HTTP-MattKennedy.46' message 'Added ZnMagicCookie, ZnMagicCookieJar, ZnUserAgentSession. ZnUserAgent now accepts and sends cookies.
Modified ZnHeaders>>readOneHeaderFrom: to add items with ZnHeaders>>at:add: instead of ZnHeaders>>at:put: to handle requests and responses with multiple Set-Cookie or Cookie headers.' id 'baf796cb-154c-454c-9ebd-c4f2d412a64c' date '09/28/2010' time '13:56:36' author 'MattKennedy' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.45' message 'added ZnMessage>>#contents and ZnResponse>>#isSuccess;
added ZnStreamingEntity>>#contents (non-repeatable);
extended ZnFixedClient (added #isConnected and reimplemented #executeRequest error handling logic)' id '3831115e-48cf-466f-81e0-752247f6aefc' date '09/28/2010' time '14:17:57' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.44' message 'Merging Matt Kenedy''s code:
Added ZnUserAgent and ZnUserAgentSettings' id '527f4690-0c3e-4e62-8482-de4bb3f76b0b' date '09/27/2010' time '23:36:10' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.43' message 'introduced ZnExperimentalServer to test server side connection keepalive/reuse;
added ZnMessage>>#isConnectionClose;
refactored ZnFixedClient with #preProcessRequest and #postProcessResponse (which handles server side connection close now)
' id 'bc799fbc-48ab-45c3-8cde-38fd1dd418bb' date '09/27/2010' time '23:25:06' author 'SvenVanCaekenberghe' ancestors () stepChildren ())(name 'Zinc-HTTP-MattKennedy.43' message 'Added ZnUserAgent and ZnUserAgentSettings.' id '217daf1b-07d3-4c49-bdf1-7b00262c5f70' date '09/27/2010' time '15:10:26' author 'MattKennedy' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.42' message 'extended ZnEntityReader with the ability to read Gzip content encoded entities;
added ZnRequest>>#setAcceptEncodingGzip;
we now use socket streams in binary mode by default (see ZnUtils>>#socketStreamToUrl:);
we''re now using ZnLineReader to read CRLF delimited lines (handles bivalent access);
ZnEntities set content length in #readFrom: when reading upToEnd;
refactored ZnLimitedReadStream to track position explicitely (added #position);
added #position to ZnChunkedReadStream;
fixed ZnMessage>>#readStreamingFrom:
' id 'c60def04-29e9-4bb0-95d2-dad31539c4cc' date '09/27/2010' time '19:55:43' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.41' message 'extended ZnEntityReader with ability to read chunked transfer encoded content (see #readEntity);
created helper class ZnChunkedReadStream wrapping a chunked transfer encoded stream, hiding the encoding from clients;
all ZnEntities'' #readFrom: methods now work either with defined #contentLength (as before) or with undetermined #contentLength (doing #upToEnd);
added ZnHeaders>>#keysAndValuesDo:
' id '3a023d61-98e4-4eaa-9c60-e7826ce05fbf' date '09/26/2010' time '20:10:27' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.40' message 'introduction of ZnEntityReader helper object;
added some more operations to ZnFixedClient;
some API cleanup' id 'c076371b-1e6b-48ad-ad3e-78a678785484' date '09/25/2010' time '23:16:35' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.39' message 'first version of ZnFixedClient for talking to one host:port combination and trying for connection reuse;
added ZnMimeType>>#applicationJson (as non-binary!)
' id '784a8e5d-f9ef-4b96-838c-86d330aeec7b' date '09/25/2010' time '21:14:28' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.38' message 'replace #crlf with nextPutAll: String crlf to improve stream compatibility;
added #url accessor to ZnRequest (alias to #uri)' id '12cb56a0-a124-4e23-bded-52ad0bbecf87' date '09/21/2010' time '22:06:40' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.37' message 'try to use MIMEDocument without referencing MIMEType' id '5b008ad4-0e12-4218-995a-635d765fa653' date '09/21/2010' time '16:15:01' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.36' message 'introduced ZnUtils>>#ipAddressToString:' id '6f149459-e4bf-4eca-a3c6-a20ede32ac0a' date '09/21/2010' time '16:01:10' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.35' message 'implemented a complete set of ZnClient methods (GET,PUT,POST,DELETE,HEAD) with basic authentication variants;
introduced ZnClient>>#executeOneShot:on:;
refactored ZnMessage and subclasses reading (#readFrom: #readStreamingFrom: #readHeaderFrom:) to support asymmetric head requests and remove code duplication;
cleaned up ZnMessage and ZnHeaders #contentType and #contentLength access
improved some ZnHeaders methods to better deal with missing headers dictionary (lazy initialization);
added ZnServer>>#printOn:;
renamed some older classes' id '71e40771-0e1a-477c-b999-94ac5537668c' date '09/21/2010' time '12:59:31' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.34' message 'added #printOn: to ZnStatusLine, ZnRequestLine, ZnHeaders and ZnEntity;
some bug fixes and added robustness' id '58cafaad-d422-458a-9f26-57b801613e83' date '09/20/2010' time '19:40:27' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.33' message 'Renamed all categories with old code to Zinc-HTTP-Old-*' id '56666b16-26a2-4785-a7b0-69934e9f5a1b' date '09/19/2010' time '18:44:52' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.32' message 'various changes suggested by Code critics' id 'b9a81c31-f509-4443-b5ab-5d0980ba1f1b' date '09/17/2010' time '20:54:02' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.31' message 'first working implementation of ZnMonticelloServerDelegate;
added ZnResponse #setLocation and #setWWWAuthenticate;
added ZnResponse convencience instance creation methods #created: and #badRequest:;
ZnResponse convencience instance creation methods now pass their uri through ZnUtils>>#urlPathQueryFragmentOf:;
ZnUtils>>#httpDate: now does an #asUTC conversion;
added ZnUtils>>#streamFrom:to:size: fast stream copier;
added ZnUtils>>isSlash:' id 'e3e6a58f-52f3-4474-b700-132198106c9d' date '09/17/2010' time '15:45:38' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.30' message '1st working version of ZnStaticFileServerDelegate (on 1 directory with 1 prefix);
extended ZnResponse with #notFound: and #redirect instance creation methods;
added ZnUtils>>#httpDate: (and implemented #httpDate using it);
extended ZnMimeType with MimeTypes and ExtensionsMap class variables for faster constant access and file extension to mime type mapping;
ZnStreamingEntity>>#writeOn: now closes its stream after using it
' id '6074fdf3-5027-46f8-9e5b-9629d0ef5074' date '09/16/2010' time '20:50:45' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.29' message 'ZnStatusLine and ZnRequestLine now handle their own crlf line ending (see #readFrom: and #writeTo:);
Experimental introduction of ZnStreamingEntity (see #readStreamingFrom:)
ZnLimitedReadStream is now used in ZnApplicationFormUrlEncodedEntity>>#readFrom:
' id '4fae956f-e1d3-4307-90d0-eae856459f18' date '09/15/2010' time '20:24:23' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.28' message 'fixed ZnMimeType parser dependency on Grease #trimBoth;
added serverSocket as inst var to ZnServer' id 'd09f0956-371c-442a-aeab-0eed4d433a3e' date '09/15/2010' time '09:59:36' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.27' message 'fixing ZnHTTPSocketFacade>>#httpPut:to:user:passwd: semantics;
added ZnMessage #head: #post and #put;
added ZnHeaders>>#removeKey:[ifAbsent:] ;
allowed for missing content-type when reading entities;
enforcing content-length header to be string in #acceptEntityDescription:
' id 'cb4bffd1-218f-4103-8679-b81e5e51dc7a' date '09/14/2010' time '15:15:59' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.26' message 'ZnHTTPSocketFacade:
adjusting semantics;
implemented some missing methods;
some refactoring (#execute:on)
' id '541ca458-55fa-404a-a317-9a5801a6322b' date '09/14/2010' time '13:27:39' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.25' message 'some code reformatting in ZnHTTPSocketFacade;
added more strings to ZnConstants;
ZnServer now returns a nice default welcome page (the echo handler now only runs when the path starts with ''echo'')' id '7c2531d4-acde-449a-8c98-ed0d3affe342' date '09/14/2010' time '11:07:31' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.24' message 'first complete implementation of (new) ZnHTTPSocketFacade (incomplete tests);
added #contents to ZnEntity;
added #addAll: and #withAll to ZnHeaders and ZnApplicationFormUrlEncodedEntity;
store remoteAddress as dotted IP string instead of printed byte array' id 'd30509ad-79a7-4410-9507-0a34a6639fc2' date '09/13/2010' time '22:31:18' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.23' message 'reorganized categories (Zinc-HTTP-New-Core, Zinc-HTTP-New-Client-Server, Zinc-HTTP-New-Support);
started new implementation of ZnHTTPSocketFacade (renamed old one to ZnOldHTTPSocketFacade) with image access methods;
refactored image access methods in ZnClient (introduced ZnClient>>#getImageOfType:usingParser:fromUrl:);
changed ZnEntity>>#contentType: to only allow assigning mime types compatible with an entity''s designated mime type (if any)
' id 'eb6683ed-f103-46af-aa28-4d1c0d6689f3' date '09/13/2010' time '16:17:53' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.22' message 'added support for server side basic authentication' id '55c0e0fa-9e16-428f-800a-0ed87537fb45' date '09/13/2010' time '13:54:44' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.21' message 'added support for client side basic authentication' id 'f61af145-d04a-4c18-b8a9-4dc9c904c636' date '09/12/2010' time '20:34:56' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.20' message 'added simple http client proxy support using the system settings (untested though) ' id 'bae5ca73-9f54-4b2b-bfa2-3eb66228c7e1' date '09/12/2010' time '11:55:51' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.19' message 'refactored ZnEntity hierarchy with new instance creation framework;
implementation of ZnApplicationFormUrlEncodedEntity;
created mock ZnMultiPartFormDataEntity;
added ZnUtils>>#parseQueryFrom:
ZnMimeType>>#printOn: now simply prints the RFC string
' id '10746c52-3fcb-4b36-895f-a5fc34b8dd04' date '09/12/2010' time '11:28:17' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.18' message 'added header name normalization;
added optional multi-valued header values;
added optional header value merging' id '1e65b930-7310-4677-b5cf-b779a38bf759' date '09/10/2010' time '21:06:19' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-pmm.17' message 'use
aStream print: anObject
instead of
aStream nextPutAll: anObject printString' id '4b6b2702-4ec3-4314-b712-ccc1d9da802c' date '09/10/2010' time '12:40:03' author 'pmm' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.16' message 'replaced usage of #displayString with #printString;
renamed ZnMimeType>>#greaseString to #asRFCString' id '10c584eb-c842-4aa1-8ac7-60d2ca426265' date '09/10/2010' time '12:22:15' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.15' message 'added #at:ifAbsent: to ZnHeaders;
added #headersDo: to ZnMessage;
added #isRunning to ZnServer;
ZnServer now sets a (ZnConstants remoteAddressHeader) header with the client''s remote IP address;
extended ZnServer with a general purpose delegate mechanism
' id 'b3fa69a2-3f1a-4ea5-94db-47447fcab5a6' date '09/09/2010' time '20:53:14' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.14' message '1st primitive but working ZnServer' id '996b6601-b412-48ae-a64c-7dc78dac058d' date '09/08/2010' time '11:06:03' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.13' message 'ZnClient #get: and #getJpeg: now work for normal situations' id 'cbbe9f1e-39a9-4b3a-a6f1-e08e11c4c5cf' date '09/07/2010' time '20:04:01' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.12' message 'Started the Zinc-HTTP-New implementation;
not much to see yet' id 'de2cead7-a4dd-4a3c-ac68-69e4cef2964d' date '09/06/2010' time '23:05:54' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.11' message 'some more recategorizations' id '7b109f45-7460-4edc-9983-3a201efa0815' date '09/05/2010' time '11:10:46' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.10' message 'refactoring for a cleaner #executeMethod: introducing #allHeadersFor:on: #generateRequestOn: #sendContentTo: removed #noContentLength: renamed #MIMEDocument to #getResponseAsMIMEDocument ;
renamed some post method classes' id '0e5bf523-5aa9-40f3-be02-17abc7a18d6b' date '09/03/2010' time '23:29:04' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.9' message 'forgot one usage of #page' id 'd56be428-7eed-4712-ab04-2094e3808c3a' date '09/02/2010' time '20:16:21' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.8' message 'fixed wrong header case in #mimeTypeHeaderOn: ;
refactored the extension protocol on HierarchicalUrl using new method names (using the concept of path directory and adding the String suffix for conversion methods)' id '28ab58db-ba2b-4db5-a473-2cd613cca92b' date '09/02/2010' time '20:10:41' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.7' message 'using code critics to remove some dead code and obvious problems (but may issues are left open);
more method categorizations' id '1c64f23b-0156-41d4-bc9b-72d9c52d0227' date '09/02/2010' time '16:36:45' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.6' message 'did an initial method categorization in the core classes ZnHTTPClient and ZnHTTMethod (and its subclasses);
removed one no-op #initialize' id '45e8c7be-7a6e-4aa3-8c8d-6f30c0e26bf5' date '09/02/2010' time '12:41:10' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.5' message 'introduced ZnConnectNew, a plugin replacement for ZnConnection.The old code was using its own SocketStream, now we''re using the system supplied SocketStream. Some backwards compatibility protocol was added, could be cleaned up later. It is probably also possible to use SocketStream directly;
added ZnHTTPClientFacade with 2 get methods' id '2d453fab-9a2f-4743-8ce5-d7879bbc14a1' date '09/02/2010' time '11:47:13' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.4' message 'reduced some dependencies on extensions' id 'e3317890-f543-461c-a2de-d32ba48b2af0' date '09/01/2010' time '21:02:15' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.3' message 'Some cleanup of ZnHTTPSocketFacade''s class methods' id '58105dc7-a59a-4e9b-add7-1ae71a212e3c' date '09/01/2010' time '19:59:08' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.2' message 'Renamed HC HTTP Client to Zinc HTTP Components;
Renamed all classes to use Zn namespace prefix;
Renamed all extension protocols to *zinc-http;
Renamed Facade to HTTPSocketFacade' id '42475f7f-909f-4292-90d2-78b2fe48c9a2' date '09/01/2010' time '19:13:12' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.1' message 'Renamed HC HTTP Client to Zinc HTTP Components;
Renamed all classes to use Zn namespace prefix;
Renamed all extension protocols to *zinc-http;
Renamed Facade to HTTPSocketFacade' id '4b0032ae-27eb-462c-b0db-29800c2cc647' date '09/01/2010' time '17:29:24' author 'SvenVanCaekenberghe' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())(name 'Zinc-HTTP-SvenVanCaekenberghe.242' message 'added ZnEntityTooLarge to the exceptions silently catched by ZnMultiThreadedServer>>#readRequestSafely:' id '8c18da8d-4ec0-40a7-92ea-01e7c09b9929' date '02/01/2012' time '11:26:10' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.241' message 'simplified and optimized implementation of ZnChunkedReadStream' id '36d5243f-deb3-4689-9315-d3d4c5393da7' date '01/31/2012' time '21:21:00' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.240' message 'added some speed improvements to the implementation of ZnLimitedReadStream' id '24874b38-2c00-4d0c-b3b3-cec7c4f91d71' date '01/31/2012' time '21:08:09' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.239' message 'fixed the implementation of ZnLimitedReadStream to honor EOF on the underlying stream' id '16a06aa4-34ec-4c81-87ca-701823088ac2' date '01/31/2012' time '20:55:24' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.238' message 'introduction of a resource limit to the size of entities read from a stream;
added ZnConstants class>>#maximumEntitySize[:]
added ZnEntityTooLarge resumable exception
added ZnUtils class>>#readUpToEnd:limit:
#readFrom: logic of Zn[String|ByteArray|MultiPartFormData]Entity now take the limit into account
extended ZnChunkedReadStream and ZnLimitedReadStream with #readInto:startingAt:count: as a first step to improve their performance' id '4af222aa-e05c-458b-a1ce-2d62b2d23d2d' date '01/31/2012' time '14:02:43' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.237' message 'changed ZnMimePart class>>#fieldName:value: to use ZnEntity>>#with: on the value so that Strings become ZnStringEntities and others become ZnByteArrayEntities;
changed ZnUrl>>#queryAt: to signal a KeyNotFound error when there is no query' id '37e466f7-592f-4f15-a016-f2689b56f3fb' date '01/29/2012' time '19:43:08' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.236' message 'added ZnUrl>>#retrieveContents convenience method' id 'b5d081c0-6b4f-40a2-8e4c-5b58c4a02de5' date '01/24/2012' time '11:59:43' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.235' message 'now using #trimBoth instead of #withBlanksTrimmed' id 'bc327259-a3d3-4829-a24a-504b08ab8cbf' date '01/08/2012' time '14:20:02' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.234' message 'changed the implementation of ZnHeaders to use ZnMultiValueDictionary;
ZnLineReader now uses ZnConstants class>>#maximumLineLength (4096) as default for signaling a ZnLineTooLong exception;
added a limit option to ZnMultiValueDictionary that defaults to ZnConstants class>>#maximumNumberOfDictionaryEntries (256) for signaling a ZnTooManyDictionaryEntries exception;
added new ZnTooManyDictionaryEntries error;
changed parent of ZnTooManyRedirects from Exception to Error and added a #isResumable true method;
extended ZnMultiThreadedServer>>#readRequestSafely: to also catch ZnTooManyDictionaryEntries' id 'add34728-015e-46b6-9aeb-eda8f63e1f03' date '01/03/2012' time '15:42:40' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.233' message 'Rewrote ZnServer and subclasses''s class methods #startDefaultOn: and #defaultOn: to treat the default instance like a singleton by reusing/restarting/reconfiguring existing instances; expanded comments;
Changed the implementation of ZnServer>>#start to automagically register the default instance;
Changed the implementation of ZnServer>>#stop to always unregister;
added ZnServer>>#stop: with an option to control the unregistering so that it does not happen when shutting down the image
' id '8dd541c9-2890-4a8f-b5cb-d6ac2e9341af' date '12/22/2011' time '12:54:05' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.232' message 'changed ZnClient>>#executeWithTimeout to use an explicit and selective #exceptionSetForIfFail so that only network, http parsing, http unsuccessful and unexpected content type exceptions trigger the #ifFailBlock;
this fixes the problem where HTTPProgress exceptions triggered the ifFail block;
thx Camillo Bruni ' id '3ca78fe3-4355-46ee-9ba3-5e0f540b9ec0' date '12/20/2011' time '14:24:53' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.231' message 'Extended the ZnHttpUnsuccessful and ZnUnexpectedContentType exceptions to contain the repsonse respectively the two content types so as to produce better error messages (thx Camillo Bruni for suggesting this)' id 'c94e86a8-3b1a-4c26-bae5-3aebc90764b2' date '12/20/2011' time '13:26:08' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.230' message 'Changed ZnClient>>#timeout to use the global ZnNetworkingUtils defaultSocketStreamTimeout as default' id 'fb0c7c07-a6dd-4105-bdd4-a65860b4b452' date '12/14/2011' time '14:07:42' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.229' message 'expanded the ZnUrl class comment' id 'b239edd4-c432-4139-a71a-d27618beef91' date '12/14/2011' time '13:45:28' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.228' message 'added ZnUrl>>#queryKeys' id 'f979e877-6dfa-4167-b159-ec322a629c98' date '12/13/2011' time '14:21:02' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.227' message 'added the WebDAV methods to ZnConstants class>>#knownHTTPMethods;
added convenience constructor #xml: to ZnStringEntity and ZnEntity' id 'd8262a06-7f5b-4a88-9fdb-cc4bb05ed422' date '12/11/2011' time '19:47:11' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.226' message 'changed ZnMimeType such that the ''constants'' returned by the methods in the class side convenience protocol can now be freely modified by returning a copy;
implemented ZnMimeType>>#postCopy;
ZnMimeType>>#parameters will now lazy initialize to a SmallDictionary instead of a regular Dictionary' id '52cc1692-4d4f-4c43-813c-21b61e386eaf' date '12/06/2011' time '20:56:22' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-NorbertHartl.225' message 'changed ZnApplicationFormUrlEncodedEntity to check encoding of contentType. If an encoding is present to presentation is written using the specified encoding' id '18a28639-5e95-4594-937c-268df69987ec' date '12/06/2011' time '18:30:33' author 'NorbertHartl' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.224' message 'added ZnLimitedReadStream>>#peek' id '4f9dffc5-3af2-4adc-a0c9-0bc22d1de76e' date '12/04/2011' time '20:10:11' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.223' message 'added missing ZnChunkedReadStream>>#next:into:
that was used by ZnEntityReader when reading a ZnByteArrayEntity
fix to Pharo issue 5053 (http://code.google.com/p/pharo/issues/detail?id=5053)
thanks Laurent Laffont for reporting' id '19ce4497-786a-46a7-bd6c-55fa682dba56' date '12/03/2011' time '17:51:17' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.222' message 'small fix to ZnEntityReader>>#readEntityFromStream
added an extra guard copying extraHeaders from a chunked stream since these are missing when reading a streaming entity' id 'a1b1d190-4690-4cc0-b9b5-eab77cc5153b' date '12/01/2011' time '10:40:29' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.221' message 'added new #followsRedirects boolean option to ZnClient
because setting #maxNumberOfRedirects to 0 did not work well
for an example see the ZnClientTests>>#testRedirectDontFollow
Thx Jan van de Sandt for reporting this' id '4df9982e-63e1-49ea-bfb0-2f9cb43f6f0b' date '11/23/2011' time '17:30:09' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.220' message 'added auto initialization of ZnNetworkingUtils>>#secureSocketStreamClass' id '147d6c42-b509-40e4-abb0-7c804d5df01d' date '11/13/2011' time '21:46:06' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.219' message 'reworked ZnNetworkingUtils to take over most if not all functionality of ZnZodiacNetworkingUtils so that HTTPS should work out of the box when Zodiac is loaded;
small refactoring to ZnServer hierarchy: use #socketStreamOn: consistently' id 'f0eb7dbf-ae05-4daa-87da-84feb09ba23a' date '11/10/2011' time '14:09:21' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.218' message 'renamed ZnNeoClient -> ZnClient; added a better class comment' id '8c789ded-a882-4491-bdf9-e9ad45af69f2' date '11/08/2011' time '22:33:34' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.217' message 'renamed ZnClient -> ZnClientOld' id 'df12536b-7fa7-4e00-84eb-6de051894eb6' date '11/08/2011' time '22:14:35' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.216' message 'documented all public methods of ZnNeoClient;
minor fixes:
- #close sets state to nil
- #contents return the stream when streaming
- #headerAddAll: and #headerAt:add: now do a #resetRequestIfNeeded' id 'bfb5ff74-76f9-4689-a976-95ef34260531' date '11/08/2011' time '21:10:32' author 'SvenVanCaekenberghe' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())(name 'Zinc-HTTP-SvenVanCaekenberghe.283' message 'added an efficiency improvement to ZnMultiPartFormDataEntity>>#parse:boundary:
added convenience protocol to ZnUrl:
- #withPathSegment[s]: #/
- #withQuery: #? #&' id '51351ae8-99a9-44cc-856a-976fcd55e2cf' date '07/09/2012' time '04:38:29' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-MarcusDenker.282' message 'Issue 6259: DataStream is still there
http://code.google.com/p/pharo/issues/detail?id=6259
Issue 6255: Zinc Pharo Conference update with FileSystem support
http://code.google.com/p/pharo/issues/detail?id=6255
Issue 6223: FileLocator and FileRerernce have extension from File Package
http://code.google.com/p/pharo/issues/detail?id=6223' id '03911f2b-c422-4142-bedf-617d90674243' date '07/04/2012' time '04:16:25' author 'MarcusDenker' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())
\ No newline at end of file
+(name 'Zinc-HTTP-dkh.407' message 'Issue #46: add SpSocketError to ZnMultiThreadedServer>>readRequestTerminationExceptionSet and ZnMultiThreadedServer>>writeResponseTerminationExceptionSet' id '8f60ec48-79a7-4630-9961-b30712f02737' date '12/11/2014' time '14:43:00' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.406' message 'Issue #58: fix calling logic for ZnGemServerLogSupport>>handleBreakpointException:resumeIfResumable:' id '02b441e3-2f57-4cdd-b2eb-7d663d9c53c7' date '12/11/2014' time '14:20:39' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.405' message 'moved UUID>>asString36 to GLASS1 (see https://github.com/GsDevKit/zinc/issues/43)' id '2de0a436-81e1-4fd4-864e-f524a2ef5906' date '12/11/2014' time '13:47:28' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.404' message 'Issue #58: some tweaks to implementation as I flesh out ZnSeasideGemServer for seaside ... fine tune logging and honor debugMode in terms of passing exceptions when set ....' id '93d104da-763a-4c0a-a88f-948051c130e4' date '12/11/2014' time '06:58:08' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.403' message 'Issue #58: make SocketStream and friends continuation friendly by wrapping GsSocket references in a TransientStackValue. Add ZnTransactionSafeManagingMultiThreadedServer a subclass of ZnManagingMultiThreadedServer where all references to GsSockets are wrapped by a TransientStackValue ... including places where GsSockets are passed as arguments ... this makes the server instance transaction safe, so continuations can be snapped off and transactions can be safely used in delegates ...' id '0f71b3bd-51e8-4147-a86d-e304e0c1bbeb' date '12/09/2014' time '11:21:17' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.402' message 'Issue #58: fix typo' id '7b2f8914-dec9-4199-9ad3-86e354d28f27' date '12/07/2014' time '07:50:44' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.401' message 'Issue #58: flesh out remote breakpoint work ... cannot switch back to native threads, but for development of servers, it can still be useful ... continue following this thread ...' id '3dcf0fc7-510d-4beb-957f-924a845fa5d0' date '12/06/2014' time '15:02:52' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.400' message 'Issue #58: ZnLogSupport>>breakpointExceptionSet needed ... ZnRestServerDelegate>>handleRequest: should not handle Exception!' id '7f2f3b66-3cad-4189-a5d4-9f0c2f36e16f' date '12/05/2014' time '16:30:33' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.399' message 'Issue #58: GemServer class>>handleBreakpointException: moved to ZnGemServerLogSupport, so breakpoing exceptions can be under enableContinuations control .... and breakpointExceptionSet controlled vi ZnGemServer ' id 'd02fc4b2-a7d0-4365-b64d-f69abe945c22' date '12/05/2014' time '15:02:46' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.398' message 'Issue #58: fix sent but not implemented' id '719304b2-c0bd-4636-9bdb-f4629952a46d' date '12/04/2014' time '08:08:04' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.397' message 'Issue #58: fixed{?) an accept problem whereby an accept error in SocketStreamSocket would lead to an infinite loop creating processes and then running out of memory ... Fix Rest test error ... only pass exceptions in debugMode for ZnServer' id 'b5faca58-86c1-45ab-9553-1294e1af0ded' date '12/04/2014' time '07:52:23' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.396' message 'Issue #58: add ZnLogSupport>>object: ... for dropping an object into the object log...refactor REST tests to allow for testing using remote ZnGemServer and add persistence to ZnExampleStorageRestServerDelegate ... a bit of house cleaning in ZnGemServer' id '15078ceb-f99a-45da-a878-afaf6dd47bf4' date '12/04/2014' time '06:38:36' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.395' message 'Issue #58: add halt/breakpoint handlers to ZnSingleThreadedServer>>serveConnectionOn: and ZnMultiThreadedServer>>executeRequestResponseLoopOn: ' id '9dc2976d-a30a-459a-bf27-38e0cd344e2e' date '12/03/2014' time '15:04:20' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.394' message 'Issue #58: ZnSingleThreadedServer>>logServerError: to unconditionally log an error: and handleError: for GemStone so we make sure that all errors make it to the log (object log and continuation) AND the gem file .... add gobs of log helper methods to ZnGemServer ... control logging method and filter and whether or not continuations are created for errors from ZnGemServer' id 'adfc58cc-0093-4497-aa69-4bd5882c9fea' date '12/03/2014' time '14:38:54' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.393' message 'Issue #58: ZnSingleThreadedServer>>handleRequestProtected: don''t pass the exception ... debugMode doesn''t quite appy to GemStone ... need different granularity I think ... GsPharo 0.9.2 needs to be used' id 'baa8f9c1-8596-499c-b756-8b7c9d805bad' date '12/02/2014' time '16:29:11' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.392' message 'Issue #58: ZnWebSocketTests>>testEcho test passing ... in debugMode, use ZnObjectLogLogger ... practical to debug ZnGemServer using object log logging and continuations' id '56012f4e-e24d-4274-9480-464e39e012c3' date '11/30/2014' time '20:18:37' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.391' message 'Issue #58: a log can be specified for an instance of ZnGemServer. By default errors are logged to transcript and continuation commmited to object log.... ' id '287b4e2c-f842-43d8-b260-e19a3b059342' date '11/30/2014' time '11:19:10' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.390' message 'Issue #58:
- always snap off continuation when an error event occurs
- add some error handling a bit higher up the zn stack ...
to catch application errors as well ... might be able to
continue processing without passing error ... still passing at
the moment...
- ZnTranscriptLogger for all ZnGemServer guys ... might want to
make this easier to customize
' id 'de82eb89-74dc-466c-990f-8f5ceae284f4' date '11/30/2014' time '10:39:44' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.389' message 'Issue #53: barring any new sent but not implmented messages, this bug should be fixed .... of course Issue #61 and Issue #62 were opened to implement the missing behavior' id '1fbac59e-9a7d-4d63-831c-a268f4ec664d' date '11/17/2014' time '16:17:42' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.388' message 'client forwarder safe tests for interactive session' id '5be60a6d-65b2-4738-a753-e5adff4864ac' date '06/29/2014' time '23:15:39' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.387' message 'remove extra tracing code ... tests greeen for GemStone 3.2' id '829b5fe3-3585-4b20-9a64-27cf084bd5da' date '06/29/2014' time '15:48:14' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.386' message 'logging for travix ZnServerTests>>testReadEvalPrint failures ' id 'f9fb3b5b-7c9d-44eb-8366-b06db2cc5f42' date '06/29/2014' time '15:17:53' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.385' message 'improve error reporting for ZnUnknownHttpMethod (tracking an error during tests) ... fix test case logging for non-interactive tests' id 'd0e4a2de-762b-432d-8600-a6dcf1bac062' date '06/29/2014' time '12:09:43' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.384' message 'significant work on Zinc logging...
- add ZnObjectLogLogger to record ZnLogEvents in Object log
- add ability to log errors for additional filter granularity
in log.
- install error event in the several(!) in Zinc client/server code
where exceptions are silently ignored - exceptions logged as
debug event along with hundreds of other non-exception based
events)
- use error event in ZnSingleThreadedServer>>logServerError:
which also swallows errors ... returns an error response
- Zinc tests refactored to:
1. turn on logging Transscript or ObjectLog depending upon
whether tests are being run interactively or not
2. trace test running in object log to make it possible to
correlate client/server log errors with the test being run.' id 'bb1e03f0-1ee1-4fb3-a05b-43e5961a28c6' date '06/29/2014' time '11:52:48' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.383' message 'checkpoint: 282 run, 274 passes, 0 expected defects, 6 failures, 2 errors, 0 unexpected passes' id '984043a7-e539-429c-8846-c7d1abec9505' date '06/27/2014' time '21:06:25' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.382' message 'strip ZnByteStringBecameWideString out of the zinc code (leave in tests) ... test fixes
- 282 run, 272 passes, 0 expected defects, 8 failures, 2 errors, 0 unexpected passes' id 'c53c907d-0262-4d69-8d39-5a9e78c52cc2' date '06/27/2014' time '16:22:44' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.381' message '282 run, 269 passes, 0 expected defects, 11 failures, 2 errors, 0 unexpected passes
- beef up server error handling
- logic to bring up debugger when running
interactively (clientForwarder defined for
Transcript)
- object log dumps ... no transactions at this point' id '8daec818-73e2-44d6-b558-55aa188cc061' date '06/27/2014' time '15:15:10' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.380' message 'Checkpoint: 282 run, 258 passes, 0 expected defects, 10 failures, 14 errors, 0 unexpected passes
' id '37891947-eb1c-417b-9228-2271d81a1a57' date '06/25/2014' time '21:52:54' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.379' message 'remove `(Delay forMilliseconds: 10) wait.` from ZnSingleThreadedServer>>releaseServerSocket ... not good result in GemStone3.x ..' id '124768f5-46a3-4d2b-ad55-82c44b1f56b1' date '06/25/2014' time '07:45:02' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.378' message 'port some changes made to improve stability for ZnMultiThreadedServer (i.e., error handling) ' id '3b13d0a2-2cf8-494f-a67e-878ca5953b57' date '06/24/2014' time '20:16:20' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.377' message 'move forkAt:named: to BlockClosure ... a shared class between 2.x and 3.x' id '632ea1bf-96f5-4838-b45b-bebfb4cafb3d' date '06/24/2014' time '19:42:59' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.376' message '' id 'b62843de-3718-4d88-b0e1-06af996ff809' date '05/24/2014' time '17:35:07' author 'dkh' ancestors ((name 'Zinc-HTTP-dkh.375' message 'zinc is dependent upon GLASS1 now ...' id '484f343c-dd72-4f02-8462-120cba385cec' date '05/23/2014' time '17:17:27' author 'dkh' ancestors ((name 'Zinc-HTTP-JohanBrichau.374' message 'fix WideString ref' id 'de950444-0140-45de-96af-238a26e4af0f' date '05/02/2014' time '23:52:37' author 'JohanBrichau' ancestors ((name 'Zinc-HTTP-JohanBrichau.373' message 'republish to get rid of bad utf8 encoding' id '3428f845-911a-4b51-a3a0-948c6d1eb449' date '01/05/2014' time '21:08:20' author 'JohanBrichau' ancestors ((name 'Zinc-HTTP-JohanBrichau.372' message 'porting code' id '2582ccc3-63aa-443d-859a-b90b9ed5b137' date '01/05/2014' time '15:27:28' author 'JohanBrichau' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.371' message 'Added an optimalization to ZnUTF8Encoder>>#readInto:startingAt:count:fromStream: to avoid the price of #becomeForward: when a ByteString to WideString conversion happens' id 'ef28893e-9902-4f96-bd30-1c97796df7f5' date '06/11/2013' time '04:34:04' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.370' message 'Two optimalizations: ZnStringEntity>>#readFrom: and ZnUtils class>>#readUpToEnd:limit: (if all contents read fits in the first buffer, take a fast path) - bis' id '78ad6f26-8414-47d1-980e-f1df75d91b2b' date '06/11/2013' time '02:06:42' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.369' message 'Two optimalizations: ZnStringEntity>>#readFrom: and ZnUtils class>>#readUpToEnd:limit: (if all contents read fits in the first buffer, take a fast path)' id '6ad9e454-799e-4d99-bd39-92f12cc41bef' date '06/11/2013' time '01:59:24' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.368' message 'Added/refactored some ZnHeaderTests
Fixed ZnClientTests>>#testGetGeoIP' id '313a504c-dee4-49c8-8541-bdcdda740273' date '06/11/2013' time '11:41:49' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.367' message 'Introduction of ZnEntity class>>#matches: to fix ZnEntity class>>#concreteSubclassForType:binary: and
ZnEntity>>#contentType: (Thanks Andy Kellens)' id '04dcc6f1-361f-46c1-a734-746b71460eb2' date '06/04/2013' time '04:28:29' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.366' message 'Updated some class comments' id 'ab163d28-d657-479b-90e3-b12566dfcb34' date '06/04/2013' time '01:52:17' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.365' message 'Further performance tuning of ZnEntity reading/writing' id '42e083e5-cad8-4800-b439-18bdb755909b' date '05/28/2013' time '01:25:34' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.364' message 'Optimized ZnHeaders>>#normalizeHeaderKey: using a CommonHeaders set' id '5564fa6a-bcde-4cfd-817c-3fd49f51d34d' date '05/28/2013' time '12:09:48' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.363' message 'Implemented ZnTestRunnerDelegate (original idea by Norbert Hartl - Thx)
Minor optimalization to ZnUtils class>>#nextPutAll:on:' id 'a1fa8795-eb44-4812-81e7-3da28fa9bda9' date '05/28/2013' time '10:38:03' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.362' message 'Changed ZnMultiThreadedServer>>#readRequestTerminationSet to a more sane value (this was probably forgotten in the last refactoring)
Added a CRLF to /echo in ZnDefaultServerDelegate' id '0ec0f1da-d41f-4b7a-9911-7111341cad51' date '05/27/2013' time '04:21:34' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.361' message 'A new implementation of ZnStringEntity>>#readFrom: based on buffer wise delegation to ZnCharacterEncoder>>#readInto:startingAt:count:fromStream' id '109ed743-caf5-410c-9162-72933240fa53' date '05/23/2013' time '12:37:04' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.360' message 'Performance enhancement in ZnMessage/ZnEntity writing (more intelligent buffering, more intelligent encoding)
Implemented #= and #hash for all Zn Core objects
Tracking ZnMimeType>>#= and #match: changes
Added new tests and benchmarks
' id '9ee5d56f-fd93-4115-976f-371df43dd56d' date '05/22/2013' time '04:35:36' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.359' message 'Fixed a typo in ZnNetworkingUtils>>#initialize' id '455db906-7f02-4451-80e5-1efb8573609a' date '05/20/2013' time '03:31:56' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.358' message 'FIx ZnResponse>>#setTransferEncodingChuked to send a #clearContentLength' id 'd4a01cc3-c7b5-440c-8cfd-7f10b395816e' date '05/20/2013' time '03:02:58' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.357' message 'Added ZnServer>>#useGzipCompressionAndChunking[:] option and implementation (disabled by default)' id '3586cb96-51a2-4c00-b120-1ec622e2505a' date '05/19/2013' time '09:25:43' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.356' message 'Refactored ZnEntity subclasses #writeOn: to use the newly introduced ZnUtils class>>#nextPutAll:on:
ZnEntityWriter now uses a buffered stream when there is chunking without gzip compression for text (otherwise each character would become a chunk)
Switched ZnNetworkingUtils to use ZdcSocketStream when it is available' id '3c079a63-a106-4254-aa8c-81bc9a64aa69' date '05/19/2013' time '11:49:28' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.355' message 'Introduction of ZnEntityWriter with support for gzip/chunked encoding' id '69d9f0c8-d113-41e9-ab0d-8ba97e296597' date '05/18/2013' time '02:06:11' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.354' message 'Added #chunkCount to ZnChunked[Read|Write]Stream
Added #position to ZnChunkedWriteStream' id '9dcbc597-fb19-4469-937f-9dc504b5d02d' date '05/18/2013' time '12:42:31' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.353' message 'Optimized ZnChunkedReadStream>>#upToEnd' id '79dce0bc-490e-4364-b138-584728356cc6' date '05/17/2013' time '11:57:22' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.352' message 'Added ZnChunkedWriteStream
Reorganized ZnChunkedStreamTests' id '2ac8bc6d-5fdd-408b-8212-93df128a777a' date '05/17/2013' time '05:06:57' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.351' message 'Improved and simplified ZnReadEvalPrintDelegate.' id 'a4a8cbaf-2c42-485b-b442-8f982d8e08a4' date '05/16/2013' time '01:16:21' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.350' message 'Added ZnReadEvalPrintDelegate, a REPL Web Service.' id 'd18e631a-94e4-4803-9549-beff989ff14b' date '05/15/2013' time '10:46:07' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.349' message 'Changed exception handling in ZnMultiThreadedServer: parse errors while reading an incoming request now result in a bad request response ' id 'b77fabc9-a1e3-462a-8c1a-e18b4b017f25' date '05/14/2013' time '01:42:46' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.348' message 'Added ZnClient>>#curl debugging utility which generates a curl command line invocation from the current request' id 'c238e1b9-84f9-4960-bca4-6c0fae43db50' date '05/07/2013' time '05:05:47' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.347' message 'Extended ZnClient>>#noteRedirect to take the target URL as argument and log it' id '145d12ff-c4af-446a-9666-db575fcb7ff8' date '04/19/2013' time '01:24:07' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.346' message 'Bugfix to ZnApplicationFormUrlEncodedEntity>>#addAll: (#invalidateRepresentation was no longer called after a recent refactoring) - Thanks Paul DeBruicker' id 'fe87820c-7859-4abe-8258-2e93c9b2611b' date '02/24/2013' time '11:07:46' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.345' message 'Added a #prepareRequestHook to ZnClient (see #prepareRequest: to set, #prepareRequestHook to access and #prepareRequest for the invocation);
the request preparation hook is an object conforming to the #value: protocol that gets the final chance to change a request right before it gets executed. Typically used to sign requests.' id '5429a096-2d7d-4bc6-9b41-ab845c52a2c7' date '02/21/2013' time '05:10:04' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.344' message 'Switch the internal lastUsed instance variable of ZnClient from using full TimeStamp to Time totalSeconds' id 'b241e90f-e64d-4a16-89f7-b484d9a21ca8' date '02/11/2013' time '11:53:16' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.343' message 'Bugfix in ZnSingleThreadedServer>>#logServerError:' id 'a6ebbdf3-96b6-48fd-82ca-663bddafeeea' date '02/01/2013' time '04:22:47' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.342' message 'ZnServer''s #handleRequestProtected: will now also do a #logServerError unless #logServerDetails is false - this gives exception, signaller context details and a stack trace of depth 8 when an unhandled error occurs.' id 'c2255d27-bd92-4e23-965c-7be405ac857e' date '01/31/2013' time '11:56:38' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.341' message 'Moving ZnMonticelloServerDelegate from Zinc-HTTP-Client-Server to Zinc-FileSystem and Zinc-FileSystem-Legacy' id '6459b7f2-49d1-4e4e-80cf-fff3f83a7969' date '01/30/2013' time '07:56:27' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.340' message 'Extended ZnClient>>#url: to accept the new user info (username and password) component of ZnUrl when present;
ZnRequestLine>>#uri: now explicitely calls #enforceKnownScheme' id '46c6777e-07a4-41e9-8505-26f3db1f0438' date '01/30/2013' time '07:45:09' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.339' message 'Bugfix to ZnApplicationFormUrlEncodedEntity>>#readFrom: which failed when content-length was not specified (Thx Jan van de Sandt)' id '60911520-b3de-4382-89bb-aa6376640012' date '01/25/2013' time '02:46:15' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.338' message 'added ZnMessage>>#writeToTranscript' id '6fc88bfa-6111-4190-8ced-939a040c67ef' date '01/24/2013' time '10:07:31' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.337' message 'fix ZnUtils class>>#signalProgress:total: bug when total was nil: #format: index should be 1 not 0 (Thx Camillo Bruni !)' id '0cfbd214-abe9-4f6e-8a14-7184b312428b' date '01/15/2013' time '04:02:00' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.336' message 'Some internal ZnServer refactoring/cleanup; primary change is that ZnCurrentServer is now set over the whole request/response cycle including the reading/writing and not just the handleRequest (this was needed for WebSockets)' id 'd8ac8c4a-3914-4295-bcb3-e0ce7b22f745' date '01/10/2013' time '03:56:00' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.335' message 'ZnResponse class>>#redirect: and #created: now accept absolute URLs as well (thx Jan van de Sandt)
New ZnRequest API (all suggested by Jan van de Sandt):
#host to return the Host: header field as ZnUrl
#relativeUrl to explicitely request the request line uri as a relative URL
#absoluteUrl to combine the request line URL with the host URL into an absolute URL
#mergedFields to return a multi value dictionary combining query fields and application url encoded form fields
ZnClient>>#redirectUrl now uses ZnUrl>>#inContextOf:
Reimplemented ZnApplicationUrlEncodedEntity>>#addAll: and ZnHeaders>>#addAll: using ZnMultiValueDictionary>>#addAllMulti:
' id '085c1ffd-3ce3-46a7-81ab-d504bd7f0dd8' date '01/07/2013' time '12:37:54' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.334' message 'Added ZnServer>>#url and the #serverUrl option, as well as #scheme.
Now sorting all handlers in ZnDefaultServerDelegate>>#generateHelp ' id '4db52577-5ad9-4194-acf8-68abbcff67a3' date '01/04/2013' time '02:25:43' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.333' message 'refactored ZnSingleThreadedServer and subclasses (added #authenticateAndDelegateRequest: and protocol ''request handling'');
added ZnServer #route option;
extended ZnServerSessionManager>>#newSessionId to use the server route when set' id '2391f87a-1b49-4491-bd8f-722a1257d12e' date '12/31/2012' time '05:06:10' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.332' message 'fixed a typo/bug in ZnServerSessionManager>>#sessionFor: (expired sessions were not removed correctly)' id '89ca824f-fd84-4c63-aed7-d581dcca5a93' date '12/25/2012' time '09:28:10' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.331' message 'Backported a Pharo 2.0 patch: ZnNetworkingUtils>>#shouldProxyUrl: now takes the new NetworkSystemSettings class>>#isAnExceptionFor: API into account, when it is available (for pre 2.0 compatibility)' id 'b1ec8d0d-1367-4de3-94e6-c6e8fe1a8831' date '12/24/2012' time '02:30:59' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.330' message 'added ZnSingleThreadedServer>>#handleRequestProtected: with a general and global error handler that normally returns an HTTP server error unless the server is in #debugMode' id 'e049c94f-6d29-4d21-a235-7b4ce689b090' date '12/23/2012' time '06:27:48' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.329' message 'added ZnServerSession>>#attributeKeys and #removeAttribute:' id 'afc731a8-d1f6-4f5a-846d-c13ade5ab68a' date '12/21/2012' time '12:03:00' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.328' message 'Replaced ZnPercentEncodingWrong with ZnCharacterEncodingError;
Using #beLenient ZnCharacterEncoder instanciation in ZnStringEntity>>#initializeEncoder since apparently even Google sends spurious Latin1 characters' id 'a6d2358e-3ca9-43c5-b4dc-8e885ad9895d' date '12/17/2012' time '04:22:16' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.327' message 'creation of Zinc-Character-Encoding-[Core|Tests] by moving various classes out of Zinc-HTTP' id '501cdb52-158d-4020-b01e-cab709a4cab6' date '12/16/2012' time '05:02:53' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.326' message 'introduction and usage of ZnCharacterEncodingError exception;
rewrote ZnBufferedReadStream>>#upToEnd and ZnCharacterReadStream>>#upToEnd' id 'a384cd05-21fe-4e48-b5fd-1ed7e7c73cf4' date '12/16/2012' time '04:35:39' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.325' message 'fixed a typo in a ZnBase64Encoder class method' id '55fd39e4-2495-4a6b-8db3-135cc9ba6f3b' date '12/16/2012' time '12:59:27' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.324' message 'changed the implementation of ZnByteEncoder to correctly honor and dleal with holes in official mappings' id '50d334f7-91c4-479b-8d44-1e76a945754f' date '12/15/2012' time '10:02:55' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.323' message 'modified ZnByteEncoder to use its own byte to Unicode mapping tables;
this includes the change that latin1 is no longer mapped to a null encoder' id '819adf4a-fa93-4994-9a80-640fdf069311' date '12/15/2012' time '08:09:25' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.322' message 'finished the implementation of ZnBase64Encoder' id '95c632af-ec48-489c-bb94-8d44cc989787' date '12/15/2012' time '02:11:13' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.321' message 'added empty ZnBase64Encoder' id 'cc44a426-3f95-4b1c-9e3c-095bba14632e' date '12/14/2012' time '07:53:38' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.320' message 'added ZnPercentEncoder' id 'a32bf1d1-469c-4274-9d5c-efeeb2443df4' date '12/13/2012' time '11:31:31' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.319' message 'reworked/simplified some ZnClient internals
- removed the state concept and instance variable
- removed the #resetRequestIfNeeded concept and method;
added ZnClient>>#resetEntity;
added ZnClient>>#isCreated and #isNotFound
note: this might make some semantic differences for people heavily reusing ZnClient instances' id '0da03bdc-ec26-42c0-b04b-f1cd13f6f9bc' date '12/12/2012' time '10:40:34' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.318' message 'moved HierarchicalUrl>>#asZnUrl from Zinc-Resource-Meta-Core back to Zinc-HTTP' id 'b7c4b025-6901-428f-9a4d-04544f32b6dd' date '12/11/2012' time '10:15:27' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.317' message 'added ZnResponse>>#isNotFound' id 'c7b7a02b-2b16-4b98-9d41-1115e6fac2f9' date '12/10/2012' time '09:33:44' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.316' message 'moving ZnUrl, ZnMimeType and related support classes to a new, independent package Zinc-Resource-Meta-Core (and unit tests to Zinc-Resource-Meta-Tests);
extended ZnUrl to allow for some simple file:// URLs' id '9e15776d-4fc6-4b0b-91be-8552bc8cfe29' date '12/08/2012' time '09:15:34' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.315' message 'added ZnServerSession>>#attributeAt:ifAbsentPut:' id '4790203a-4259-4a33-a31f-dc867a2a38ab' date '12/07/2012' time '01:27:17' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.314' message 'Improved performance of ZnUTF8Encoder #nextFromStream: and #nextPut:toStream: by making the ASCII path really fast and by unrolling the block closure creation and usage;
Added ZnCharacterReadStream>>#peekFor:;
FIxed ZnCharacterReadStream>>#encoding:' id 'edc26e38-09d5-4e60-9c66-3ff28fe9bdd1' date '12/03/2012' time '03:00:01' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.313' message 'Added ZnBufferedReadStream>>#peekFor:
Added ZnBufferedReadStream class>>on:do:
improved some comments' id 'ec815554-cc36-435d-805d-67a2ad49465f' date '12/02/2012' time '08:03:06' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.312' message 'added ZnBufferedReadStream (from STON);
extended ZnBufferedWriteStream (with #next:putAll:startingAt: logic);
added tests for these' id '6ac64f4c-3d4b-4d29-bfab-8b181d8668b6' date '11/30/2012' time '10:59:36' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.311' message 'initial version of optional server session management;
ZnMessage and subclasses now implement #server and #session implemented via dynamic & process local variables respectively;
moved ZnHTTPSocketFacaded to deprecated;
started new category Zinc-HTTP-Variables;
extended some default server delegate responses, added ''session'' response with counter test' id 'aa1d7f79-a906-4a72-a1f6-675ed32982f6' date '11/11/2012' time '08:14:30' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.310' message 'bugfix: ZnManagingMultiThreadedServer was overwriting the wrong #stop method (thx Pavel Krivanek)' id 'a50aebff-8910-4553-95d7-b89a9e97a8f4' date '10/10/2012' time '10:48:30' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.309' message 'merged with 305 (thx paul)' id '3da1e6fc-76e0-4efa-8abe-7f334d9644bc' date '10/02/2012' time '06:59:51' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.308' message 'added ZnClient>>#setAcceptEncodingGzip as well as ZnClient>>#isNotModified' id '25811184-aeab-4d41-88f0-59277712dac0' date '09/30/2012' time '09:03:35' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.307' message 'Modified ZnServer class>>#startUp: to use a deferred startup action to start all registered servers; this should allow for normal error handling when something goes wrong initializing server sockets (thanks Igor Stasenko for the fix; thanks Denis Kudriashov for the error report)' id '9387492b-daa2-4ebf-a49d-44950586bda3' date '09/29/2012' time '09:00:49' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.306' message 'extended ZnResponse>>isRedirect with 303 and 307' id '26b8c486-2b3b-46be-942e-d6ac67f0ac62' date '09/27/2012' time '10:07:25' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-MarcusDenker.305' message 'Issue 6697: Zn+Zdc Update 2012-09-19
http://code.google.com/p/pharo/issues/detail?id=6697
Issue 6699: Share binding of metaclass methods
http://code.google.com/p/pharo/issues/detail?id=6699
' id '04e33e2c-1223-4626-87fb-3f4d73052504' date '09/21/2012' time '01:50:10' author 'MarcusDenker' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())(name 'Zinc-HTTP-SvenVanCaekenberghe.305' message 'added extra guards to prevent ZnClent options #beOneShot and #streaming: true to be used at the same time because that would result in the stream being closed too soon;
added ZnMimeType class>>#imageSvg (thx Paul DeBruicker)' id '3e1c02b0-b966-4d0d-96fb-ab90e7c1dc44' date '09/27/2012' time '02:45:26' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.304' message 'Added option ZnServer class>>#alwaysRestart: to fine tune the shutDown/startUp behavior, defaults to previous behavior' id 'dc02fe1f-869b-49a9-a281-f297b576181e' date '09/18/2012' time '01:51:37' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.303' message 'Refactored ZnNetworkingUtils>>#socketStreamToUrlDirectly: to honor/use the correct timeout both when doing a DNS lookup as well as during connect by using NetNameResolver directly as well as using #openConnectionToHost:port:timeout' id '9f5a3863-fc08-470d-b8a1-d44169952a66' date '09/18/2012' time '10:03:40' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.302' message 'Added HTTPProgress signalling to ZnByteArrayEntity, ZnStringEntity as well as ZnUtils class>>#readUpToEnd:limit:
Refactored streaming and HTTPProgress signalling in ZnUtils by addition of ZnUtils class>>#[streamingBufferSize|signalProgress:total:]' id 'd3e6d62a-ed00-40c7-aa9a-476111595f2f' date '09/17/2012' time '04:08:37' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.301' message 'Fixed a bug where HTTPProgress notifications would trigger a retry.
Thanks Camillo Bruni for finding this problem and suggesting a solution.
Now, retries are only triggered by (NetworkError, ZnParseError), while the #ifFailBlock will be trigger on any Error.
Furthermore, #noteRetrying: and noteIgnoringExceptionOnReusedConnection: will report on the actual exception.
The default #ifFailBlock is now [ :exception | exception pass ] for some cleaner code.
' id '85632c09-a6c4-40e9-b29b-1c5e86d07ead' date '09/17/2012' time '10:10:49' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.300' message 'removal of all classes in Zinc-HTTP-Deprecated
- ZnClientOld
- ZnFixedClient
- ZnExtendedFixedClient
- ZnUserAgent
- ZnHttpClient
- ZnUserAgentSettings
as well as all their unit test classes' id 'a09fb75e-0ba5-489c-bc1b-435481a08164' date '09/05/2012' time '01:59:02' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.299' message 'changed maximumEntitySize concept from a normal class variable on ZnConstants to a dynamic/process-specific variable ZnMaximumEntitySize;
added the option #maximumEntitySize to ZnServer' id 'f16b9f44-38a7-403e-9743-57fe2e25e800' date '09/05/2012' time '01:21:19' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.298' message 'introduction of options in ZnServer;
refactored port, bindingAddress, delegate, authenticator and reader as options' id '9f5f3ab5-6fc9-43f3-9815-579cb01d954c' date '09/05/2012' time '11:24:50' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.297' message '#includesSubString: becomes #includesSubstring:' id '1b207b45-8524-4e16-b2c4-64337eadb784' date '08/27/2012' time '09:41:58' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.296' message 'added [ZnDefaultServerDelegate|ZnMonticelloServerDelegate]>>#value:' id '8f44e26a-2144-48ce-8e30-6239fcf3d50d' date '08/22/2012' time '03:00:39' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.295' message 'fixed type (wws should be wss);
patched ZnNetworkingUtils>>#socketStreamToUrlDirectly: to treat wss as needing a #connect' id '233bcdca-806d-4bce-b09f-13ab7b81c9b0' date '08/22/2012' time '11:15:01' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.294' message 'extended ZnMultithreadedServer>>#executeRequestResponseLoopOn: with two new features related to the response objects generated by delegates:
- the response object now also can answer whether or not it #wantsConnectionClose
- after a response is written (flushed and logged), the response objects gets a chance to continue using the connection in the current thread/process for its own custom purposes through #useConnection: ' id 'c0e261d1-ad93-46e1-8b01-c5eedc7d32af' date '08/21/2012' time '01:29:19' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.293' message 'changed ZnSingleThreadedServer>>#serveConnectionOn: to no longer fork a worker thread/process as this is against the key idea of the class (this in not really active code, so this cleanup in more theoretical)' id '03d30d07-c250-483b-8525-91f709584ce7' date '08/20/2012' time '02:10:54' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.292' message 'fixed an offset bug in ZnUtils>>#streamFrom:to: (thx again, Chris Bailey)' id '932b7c3b-0892-48e0-a156-87cd9c4661cf' date '08/03/2012' time '10:49:38' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.291' message 'various fixes to ZnChunkedReadStream>>#readInto:startingAt:count: (thx Chris Bailey for reporting the problem);
added ZdcALimitedReadStream>>#nextInto: as it is used by Fuel' id '3d8c50cd-2d7b-459f-89f3-b77a23dccfdd' date '08/02/2012' time '11:26:02' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.290' message 'added ZnUtils class>>#streamFrom:to: to copy one stream to another using a buffer without knowing the size upfront and thus using #atEnd;
patched ZnStreamingEntity>>#writeOn: to use the new method when the content-length is nil or 0' id 'b7c44798-970d-4ab0-9da4-e73a095c91c3' date '07/20/2012' time '01:11:50' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.289' message 'allow for the schemes ws and wss to be equivalent to http and https' id '894699cd-a923-4fe0-b71c-6c629dde4f89' date '07/20/2012' time '10:33:30' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.288' message 'removed usage of OS version from ZnUserAgentSettings class>>#platformDetails' id '9811cc67-6a03-4c46-a67a-952727699d1c' date '07/16/2012' time '11:49:14' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.287' message 'Changed ZnStreamingEntity>>#readFrom: to no longer switch to non-binary - this was wrong anyway since no encoding was used' id '285ffb16-c7b3-4f82-9c19-7db828769d6e' date '07/13/2012' time '08:30:16' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.286' message 'trying to restore ancestry and some lost changes: merged Zinc-HTTP-SvenVanCaekenberghe.282 and Zinc-HTTP-SvenVanCaekenberghe.283' id '55810020-2df7-4b64-9872-4eccb8db92da' date '07/12/2012' time '10:12:57' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.285' message 'enabled HTTPProgress signalling during streaming up/downloads.
introduction of ZnSignalProgress with #enabled method' id 'e992fd76-efde-4b31-b4b4-bd468f8176f2' date '07/12/2012' time '09:58:00' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.284' message 'bugfix related to Pharo 2.0 - changed ZnClient>>#dowloadEntityTo: to use ZnFileSystemUtils class>>#newFileNamed:do: instead of #fileNamed:do:' id 'e71138c5-9577-4315-bbb9-19101b1a44cb' date '07/12/2012' time '01:23:15' author 'SvenVanCaekenberghe' ancestors () stepChildren ())) stepChildren ())(name 'Zinc-HTTP-SvenVanCaekenberghe.282' message 'killed a (comment) reference to mac.com' id 'de6f7d59-22da-4612-937b-07111df60678' date '07/04/2012' time '05:56:31' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.281' message 'introduction of the Zinc-FileSystem-Legacy package (including the new ZnFileSystemUtils class) to deal with pre/post FIleSystem introduction in Pharo 2.0 - this is the old code' id '1fcf9d84-c2c3-4e70-b45a-6c68a381329d' date '07/03/2012' time '01:48:02' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.280' message 'clean up ZnClient option setter methods to return self for easy chaining (thx Sean DeNigris)' id '00d1da5e-18a2-4f96-afe7-c7f7d6fe0c6c' date '05/30/2012' time '22:14:53' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.279' message 'added ZnMimeType class>>#applicationPdf as a convenience accessor as well .pdf as recognized file extension' id 'd636e0ff-907e-4299-bf7f-4328840ba225' date '05/27/2012' time '06:50:12' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.278' message 'added multiline/continuation header line parsing to ZnHeaders;
added some extra guards to ZnDigestAuthenticator class>>#parseAuthRequest' id '5c5f70f9-0f04-4941-a09a-cbf28ba154e4' date '05/22/2012' time '10:48:12' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.277' message 'simplified the example in the class comment of ZnDispatcherDelegate' id 'c4263c43-acf8-44b7-a3cb-6731e8d1a125' date '05/21/2012' time '10:02:55' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.276' message 'minor fix to ZnStaticFileServerDelegate' id '388a9cd6-b0b8-41ee-a24a-00aae254fa48' date '05/15/2012' time '13:15:34' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.275' message 'refactored ZnStaticFileServerDelegate a bit:
- store expiration times as seconds in #defaultMimeTypeExpiration & #mimeTypeExpiration map
- add not only Cache-Control but Expires header as well
- removed unused #responseForFile:
fixed a bug in ZnMessage>>#clearEntity (didn''t #close streaming entities with HEAD requests)
' id '94f2451b-b7e0-4d74-866b-d55b01c98ed9' date '05/14/2012' time '10:59:51' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-PaulDeBruicker.274' message 'Added handling for If-Modified-Since and Not-Modified headers to the ZnStaticFileServerDelegate' id '3f7f92c3-1ae8-4bd4-b4e2-5421cf49614a' date '05/12/2012' time '10:15:58' author 'PaulDeBruicker' ancestors ((name 'Zinc-HTTP-PaulDeBruicker.273' message 'Added the ability to set expiration headers when serving static files with the ZnStaticFileServerDelegate. Can probably adapt it to work when returning files from a WAFileLibrary if there isn''t already a mechanism for that. ' id '7684ed9a-80b2-47bb-a165-6e7ef40d555e' date '05/11/2012' time '03:26:02' author 'PaulDeBruicker' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.272' message 'updated ZnServer welcome page' id '1511b44d-a8f8-4a66-9ab7-0c5d3b0ca955' date '05/11/2012' time '15:22:56' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.271' message 'added ZnClient>>setIfModifiedSince:
refactored #downloadTo: using #downloadEntityTo:' id 'deabc112-7505-4072-9116-16200a9ea513' date '05/10/2012' time '22:46:26' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.270' message 'merged ZnUtils class>>#parseHttpDate: improvements by Sean DeNigris' id 'eec865bb-4103-4a28-9e55-5d3c471f26c7' date '05/10/2012' time '20:30:06' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SeanDeNigris.269' message 'Fix the HTTP date parsing to comply with the HTTP/1.1 standard. See discussion at http://forum.world.st/Parsing-HTTP-dates-td4623688.html.
Matching update to the tests (which all pass): Zinc-Tests-SeanDeNigris.140' id 'c7d98308-0259-4d69-a273-0572a06d9d0f' date '05/10/2012' time '12:25:56' author 'SeanDeNigris' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.268' message 'added ZnClient>>#uploadEntityFrom: and #contentType: as a convencience to easier do a direct PUT or POST of a file.' id 'e4dabff1-c4ef-4630-85d3-f00afbb516e7' date '05/09/2012' time '09:57:01' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.267' message 'first, not yet integrated versions of ZnCharacter[Read|Write]Stream;
added iso-8859-15 to known encodings in ZnByteEncoder;
added some optimizations to ZnNullEncoder' id 'e25c20c3-e14a-493d-88fa-7c9717455beb' date '05/03/2012' time '22:15:14' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.266' message 'added #match: and #contents to ZnChunkedReadStream and ZnLimitedReadStream;
added some convenience methods to ZnCharacterEncoder: #encodeString: #decodeBytes: and #encodedByteCountForString:' id '72b9579d-c272-417f-8949-2e66714574ba' date '05/02/2012' time '16:43:52' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.265' message 'finalized switch from ZnClient>>#downloadToFileNamed: to ZnClient>>#downloadTo: which also accepts directories and creates a file there like wget or curl can (as suggested by Sean P. DeNigris). Roll back FileSystem usage for now.' id '618f4d2b-35ee-4c05-a495-e74b8a793399' date '04/26/2012' time '16:45:21' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.264' message 'fixed ZnClient>>#downloadTo: using old school FileDirectory/FileStream' id '4d6a0d40-0927-4b6b-9c98-a583922b58b2' date '04/26/2012' time '14:34:09' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.263' message 'added experimental ZnClient>>#downloadTo:' id '2d0dd4da-87a0-44d5-b4aa-410041e67897' date '04/26/2012' time '14:19:23' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.262' message 'added ZnClient>>#downloadToFileNamed: ' id '483455c8-f370-40e8-8848-036044211929' date '04/25/2012' time '21:19:35' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.261' message 'timezone offsets should be Durations' id '070fd646-c4ee-451c-94f4-bf67010ada05' date '04/23/2012' time '15:41:34' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.260' message 'updated ZnEasy comment' id 'af3c61c1-498c-430a-9136-ddaf1d5537fe' date '04/21/2012' time '11:13:54' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.259' message 'Zinc-HTTP-PaulDeBruicker.257' id '67dd4881-a30f-4051-b052-f07774efec8c' date '04/20/2012' time '10:27:51' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.258' message 'merging forgotten 255 & 256 into 257' id '0c026aa8-59d1-42db-a714-8079feca26d3' date '04/16/2012' time '06:25:41' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.257' message 'minor allocation improvement to ZnStringEntity>>#readLimitedFrom:' id 'bc3d146e-dca8-4245-be9c-25f3fb76c1cb' date '04/15/2012' time '19:23:24' author 'SvenVanCaekenberghe' ancestors () stepChildren ())) stepChildren ())(name 'Zinc-HTTP-PaulDeBruicker.257' message '
Added ZnResponse>>#isError which checks if the ZnStatusLine code is >399. ' id '63eca7f3-2b5b-4112-b91e-b76ddcf0453c' date '04/19/2012' time '05:05:46' author 'PaulDeBruicker' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.256' message 'renamed ZnServer>>#interface[:] to ZnServer>>#bindingAddress[:] following a suggestion by Norbert Hartl, Thx!' id 'a3d6638c-d5c4-4c20-a6c1-566e00b752fb' date '04/13/2012' time '13:20:15' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.255' message 'added technology to allow entities to be read binary even when they are textual, thus disabling Zn''s normal decoding behavior;
this is what Seaside expects (as Seaside does its own conversions);
added ZnEntityReader>>#[is]Binary;
added ZnMessage[class]>>#readBinaryFrom:
added ZnEntity class>>#readBinaryFrom:usingType:andLength:
added ZnSingleThreadedServer>>#reader[:] to allow customizing entity reading' id 'e0d6d894-7fbb-41dd-8376-f87e4ca9da32' date '04/07/2012' time '18:29:44' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.254' message 'ZnBivalentWriteStream has to forward #flush to its wrapped stream' id '3b82b4f5-a0ed-44b4-bcd1-a5ec129d9d42' date '04/04/2012' time '16:08:44' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.253' message 'modified the implementation of ZnUtils class>>#streamFrom:to:size: to use a larger buffer when necessary and to flush the output stream each time through the loop except for the last one (this is need because we use SocketStream with autoflush false and this results in internal buffer overflow on very large writes).' id '183dc82c-6011-45b4-8a56-2c8415d381fe' date '04/04/2012' time '13:46:20' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.252' message 'changed ZnDefaultServerDelegate>>generateDWBench to use a date/time timestamp with a constant space representation ' id '94aee4dc-7124-485c-a70d-2d8f2831b35f' date '03/18/2012' time '19:23:19' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.251' message 'added ZnServer>>#localUrl ' id 'c56ae9d6-6fb1-481c-94fe-fc9ee8fa59b9' date '03/12/2012' time '22:23:47' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.250' message 'added the option to restrict ZnServers to only listen on a specific interface;
added Zn[SingleThreaded]Server>>interface[:];
added ZnNetworkingUtils [class]>>#serverSocketOn:interface' id '5097d852-2887-45ca-9f2f-5dc50ffc95f4' date '03/12/2012' time '19:50:44' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.249' message 'added some extra API to ZnMimeType to manipulate parameters and charSets' id '209986ca-144b-46d7-8449-f34b0e9c1864' date '03/06/2012' time '11:10:35' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.248' message 'Switched ZnServer class>>#defaultServerClass to ZnManagingMultiThreadedServer;
Add ZnStandardOutputLogger and ZnSingleThreadedServer>>#logToStandardOutput' id 'aaab5645-ed48-4174-bdb5-53037fb297db' date '03/04/2012' time '20:25:19' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.247' message 'changed usage of #deprecated: to #deprecated:on:in:' id '5ae403b7-a4cb-4ca9-a49a-0e71b6bd036a' date '03/04/2012' time '10:35:23' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.246' message 'extended ZnDefaultServerDelegate>>#generateStatus' id 'e1714401-1e45-4d67-97cd-7b735be277a2' date '03/01/2012' time '13:58:26' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.245' message 'fixed a bug related to sending multiple cookies;
fixed a bug related to receiving and sending cookies during redirects;
thank you Sean DeNigris;
ZnClient>>#prepareRedirect now receives and sends cookies;
ZnClient>>#sendCookies now uses a single Set-Cookie header containing multiple cookies instead of multiple Set-Cookie headers;
added ZnClient>>#resetCookies;
extended ZnClient logging with #debug printing of headers and processed cookies;
minor changes to ZnClient internal state variable' id '35bf1aac-cf81-479a-8683-8ad057b7566a' date '02/29/2012' time '20:10:13' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.244' message 'refactored/extended ZnRequest with authorization and basic authentication access' id 'b2397b7f-ec54-4461-999d-90bfa1fd517a' date '02/23/2012' time '22:17:43' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-MarcusDenker.243' message 'Issue 5299: Yet another Zn update
http://code.google.com/p/pharo/issues/detail?id=5299' id '583fa1ec-e230-4a83-8a67-12cb734c2bdb' date '02/17/2012' time '15:13:00' author 'MarcusDenker' ancestors ((name 'Zinc-HTTP-StephaneDucasse.236' message '- Issue 5149: add line in comment of VirtualMachine class>>parameterAt:. ThanksLuc Fabresse and Mariano Martinez-Peck.
http://code.google.com/p/pharo/issues/detail?id=5149
- Issue 5132: CommentReference SourcedMethodReference MethodReference are now deprecated
http://code.google.com/p/pharo/issues/detail?id=5132
- Issue 2560: Convenient methods from Grease for Strings. Thanks Sven van Caekenberghe. Part one.
http://code.google.com/p/pharo/issues/detail?id=2560' id 'f47fd8ea-3884-4572-9af9-d9f6eb4457c9' date '01/09/2012' time '17:23:41' author 'StephaneDucasse' ancestors ((name 'Zinc-HTTP-StephaneDucasse.235' message '- Issue 5157: Finder > Class > right-click > Hierarchy opens not on Class but on FinderClassNode. Tx Benjamin van Ryseghem.
http://code.google.com/p/pharo/issues/detail?id=5157
- Issue 5151: Recategorization of PanelMorph. Thanks Benjamin van Ryseghem. There is no useless cleans. Even small steps are cool and important.
http://code.google.com/p/pharo/issues/detail?id=5151
- Issue 5154: It would be great to have a setting to allow the Debugger to open centered and be 3/4 of screen. Thanks Alain Plantec.
http://code.google.com/p/pharo/issues/detail?id=5154
- Issue 5148: LimitNumberOfEntriesInZnMultiValueDictionary. Thanks Sven van Caekenberghe.
http://code.google.com/p/pharo/issues/detail?id=5148
' id 'c1c64007-e1ae-4347-b059-eb64071c1845' date '01/07/2012' time '19:13:20' author 'StephaneDucasse' ancestors ((name 'Zinc-HTTP-ZincUpdate.234' message '- Issue 5127: Zinc update
http://code.google.com/p/pharo/issues/detail?id=5127
- last bit of Issue 4688: progress bar disappears on image save
http://code.google.com/p/pharo/issues/detail?id=4688' id '96fb41c6-6187-4572-82d5-88acaff58417' date '12/25/2011' time '23:01:50' author 'ZincUpdate' ancestors ((name 'Zinc-HTTP-StephaneDucasse.233' message '- Issue 5117: MNU: Transcripter class>>open. Thanks vpnbecmann.
http://code.google.com/p/pharo/issues/detail?id=5117
- Issue 5122: ZnUpdate-Dec-20. Thanks sven van caekenberghe.
http://code.google.com/p/pharo/issues/detail?id=5120' id '49c87187-0e9e-41aa-a78d-f2eeba91da2f' date '12/25/2011' time '11:47:49' author 'StephaneDucasse' ancestors ((name 'Zinc-HTTP-MarcusDenker.227' message 'Issue 5063: Zinc uses default encoding of utf-8 when encoding url safe encoded strings
http://code.google.com/p/pharo/issues/detail?id=5063' id '3a35f66b-1807-4525-be31-56999a7ec249' date '12/09/2011' time '13:17:57' author 'MarcusDenker' ancestors ((name 'Zinc-HTTP-MarcusDenker.224' message 'Issue 5048: Move Transcript to Tools Package
http://code.google.com/p/pharo/issues/detail?id=5048
Issue 5047: Stream should not print its contents in printOn:
http://code.google.com/p/pharo/issues/detail?id=5047
Issue 5053: ZnChunkedReadStream doesNotUnderstand: #next:into:
http://code.google.com/p/pharo/issues/detail?id=5053' id '545d1d37-4bce-4a96-a438-cc7ad16618f9' date '12/04/2011' time '13:38:23' author 'MarcusDenker' ancestors ((name 'Zinc-HTTP-MarcusDenker.222' message 'Issue 4998: ContextPart>>#runUntilErrorOrReturnFrom:
(for testing)
http://code.google.com/p/pharo/issues/detail?id=4998
Issue 4994: Two failing test in ProcessTest
http://code.google.com/p/pharo/issues/detail?id=4994
Issue 5014: zn updates
http://code.google.com/p/pharo/issues/detail?id=5014' id '0eaf0a8a-f842-4a22-83d9-b1c65bf2b853' date '11/25/2011' time '16:03:18' author 'MarcusDenker' ancestors ((name 'Zinc-HTTP-StephaneDucasse.221' message ' Issue 4903: New version of Zinc
http://code.google.com/p/pharo/issues/detail?id=4903' id '37c68635-515f-43fb-8665-9d7674c0aee3' date '11/18/2011' time '15:18:42' author 'StephaneDucasse' ancestors () stepChildren ())(name 'Zinc-HTTP-SvenVanCaekenberghe.215' message 'modified ZnNeoClient>>#contents to return the stream when streaming is requested (more specifically: do not call #contents on the ZnStreamingEntity by default as this would defeat the whole idea of streaming; note that when there is a #contentReader it should do the right thing)' id 'c94ae1c2-5cc3-4ce6-9f04-28155f6834c9' date '10/26/2011' time '14:45:52' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.214' message 'moved deprecated classes to category Zinc-HTTP-Deprecated, noted deprecation in class comments' id '248c4eaf-ca0f-4584-99f4-d399438fd2ed' date '10/04/2011' time '19:11:17' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.213' message 'small fix to ZnUrl>>#inContextOf: (don''t take over the port when the scheme''s differ)' id '54792b4f-3ff6-479d-950f-91fb8052c960' date '10/04/2011' time '16:07:54' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.212' message 'deprecated instance creation (#new) of ZnFixedClient (and ZnExtendedFixedClient) and ZnUserAgent (and ZnHttpClient)' id '4fa83eba-2814-4b9c-8a71-5376eb1feaf5' date '10/04/2011' time '14:23:43' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.211' message 'added basic ZnNeoClient>>#signalProgress support' id '1f875569-9635-4039-bd9a-43b2ceb46400' date '10/04/2011' time '13:48:05' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.210' message 'added logging support to ZnNeoClient' id '6d7ff297-2967-413a-95d6-c0af0c0720d4' date '10/04/2011' time '12:53:36' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.209' message 'added some Pharo 1.2 compatibility (ZnMultiThreadedServer>>#exceptionSet:)' id 'b4d77e24-8821-4cac-b32d-f0f1412cf0f5' date '10/04/2011' time '09:57:30' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.208' message 'made ZnClient deprecations proceedable and added a test for this behavior' id '7990b131-582c-4c3b-8077-ef408ae802fb' date '10/03/2011' time '14:44:33' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.207' message 'added some logging to #closeDelegate' id '2900a3fc-3677-49d4-98c0-4b6b1ffe772b' date '09/27/2011' time '20:37:56' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.206' message 'added internal ZnNeoClient>>#resetRequestIfNeeded and ''state'' instance variable to try to properly reset after a first request is executed and a second one starts (the idea is to only keep using scheme/host/port and the connection)' id '9d23f62f-0d10-451a-ac95-ca8acd5b0780' date '09/23/2011' time '14:58:34' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.205' message 'modified ZnHeaders>>#contentLength to allow for the special case when there are multiple content-length headers, but only when they are identical;
fixed some typos in ZnHTTPSocketFacade where some arguments where ignored (thx Olivier Auverlot for reporting this)
' id '135d43af-b715-45d4-bd28-85323f49999d' date '09/20/2011' time '13:58:59' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.204' message 'made ZnTooManyRedirects an Exception instead of an Error subclass so that it is resumable;
fixed ZnNeoClient>>executeWithRedirectsRemaining: to allow for a resumed ZnTooManyRedirects exception' id '1183d199-1245-4e35-ac40-a0d52576deb3' date '09/19/2011' time '13:30:06' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.203' message 'added redirect support to ZnNeoClient (throws ZnTooManyRedirects when needed);
reworked ZnEntity #entity: #resetEntity: to allow nil as argument (see ZnHeaders>>#acceptEntityDescription:) added #clearEntity as well' id '90d7081c-2bb7-4a94-b45c-58e28dadf242' date '09/19/2011' time '11:09:57' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.202' message 'added ZnNeoClient>>#setIfModifiedSince: and test' id 'f02072f8-e33a-429d-8e27-169372fbc7f6' date '09/17/2011' time '20:42:50' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.201' message 'added time limit to ZnNeoClient connection reuse;
added ZnNeoClient>>#headerAddAll: and #queryAddAll:' id 'a5b92040-b404-4fca-951d-9d5253156cbb' date '09/17/2011' time '14:05:36' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.200' message 'added optional delegate #close-ing to ZnServer hierarchy' id '915cab3c-eddb-44f0-b38e-61a5e83185ff' date '09/16/2011' time '17:40:45' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.199' message 'patched ZnRequest>>#setBasicAuthenicationUsername:password: to allow nil arguments for clearing the Authorization header' id 'c8cce21a-86d4-4a8d-bd03-21ea97514ce1' date '09/16/2011' time '13:52:16' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.198' message 'introducing ZnEasy to take over the class side functionality of ZnClient;
ZnClient class side protocol being deprecated' id '37a8ac41-bd8c-4d7d-9d8c-3ef5d0c2fc0a' date '09/15/2011' time '20:42:57' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.197' message 'Modifed ZnNeoClient>>#isContentTypeAcceptable to allways accept empty responses;
Added ZnResponse>>#isCreated test' id 'efcd6b46-0332-4a34-8523-8470bcfa6764' date '09/14/2011' time '15:30:47' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.196' message 'added ZnUtils class>>#parseHttpDate: for use in ZnCookie>>#expiresTimeStamp' id '0f0b5286-c002-45f2-9ec6-9b21a7c8eb13' date '09/13/2011' time '11:51:12' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.195' message 'added extra guard to ZnLineReader>>#processNext for when #next returns nil' id 'cab4a65f-52f8-ce41-996c-a1c2a6b1bb95' date '09/12/2011' time '14:27:14' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.194' message 'added a nice example to ZnClient class>>#getPng: (Thx Lukas Renggli)' id 'f90ea18e-4d80-4d8d-aff1-ecb917f191ce' date '09/12/2011' time '09:32:07' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.193' message 'Changed ZnManagingMultiThreadedServer class comment' id '64e3aa90-0672-4f41-9093-6e5c97b16a79' date '09/06/2011' time '12:32:56' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.192' message 'pushed down the connection management functionality of ZnMultiThreadedServer to a new subclass called ZnManagingMultiThreadedServer' id '859098cb-28ff-453a-b8ec-dc41d10f7859' date '09/05/2011' time '14:24:54' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.191' message 'changed ZnMultiThreadServer''s lock and connections instance variable to be lazy initialized, removed the initialize code' id '9f394e71-7904-40bd-9551-03faf2f1be98' date '09/05/2011' time '12:06:45' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.190' message 'added a guard clause to ZnMultiThreadedServer>>#closeConnections so that nothing is done when there are no connections' id 'f7bdca17-3172-45cf-969d-531845cb9e35' date '09/05/2011' time '11:40:06' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.189' message 'Added some new internal functionality to ZnMultiThreadedServer:
To keep track of all its open client connections (socket streams) (#socketStreamOn: and #closeSocketStream) so that they can all be force closed (#closeAllConnections) when the server stops (#stop). This is necessary because on image save the worker processes and socket streams are frozen and fail when they start up afterwards due to illegal socket handles.
Note that #readRequestSafely: was extended and #writeResponseSafely:on: was introduced to handle several exceptions, most notably PrimitiveFailed, in the situation where a socket stream is force closed on a live process using that stream. This can be observed in #testTimeout.
The timeouts on reading/writing socket streams take care of closing connections that are kept open too long. Maybe the server side timeouts should be even shorter to conserve resources.
' id 'b4f2d979-0097-4dc8-bde9-23edda15a3f9' date '09/04/2011' time '15:20:15' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.188' message 'some simplifications to ZnNeoClient
removed some dead code from ZnUserAgent' id 'a81a6b6f-ad24-4c3f-aa91-120a404fa082' date '08/31/2011' time '22:06:26' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.187' message 'added basic cookie support to ZnNeoClient;
refactored some cookie related code;
ZnMessage subclasses ZnRequest and ZnResponse each implement #addCookie: and #cookies for different headers;
removed ZnHeaders>>#cookies;
replaced ZnCookie>>#asString with ZnCookie>>#nameValueString and ZnCookie>>#fullString;
added ZnNeoClient>>#get: and friends as convenience protocol' id '13e276c0-e257-4004-ad61-2e2fc6b5d829' date '08/30/2011' time '22:53:17' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.186' message 'added contentReader/contentWriter options to ZnNeoClient to use in #contents and #contents:
fixed general ZnNeoClient>>#execute result to be either #contents on success or the result of the #ifFailBlock on failure' id '09f5880c-8b8e-4de1-9cc2-0e3306c987a1' date '08/19/2011' time '17:27:35' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.185' message 'reimplemented ZnHTTPSocketFacade using ZnNeoClient' id 'c969791c-20ec-483d-b053-edc9c44c946b' date '08/19/2011' time '11:45:37' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.184' message 're-implemented ZnClient class side methods using ZnNeoClient;
revised ZnConnectionTimeout handling to allow nesting/overriding by changing the default to nil (see ZnNeoClient>>#withTimeoutDo:);
changed ZnUrl>>#authority to not return a default port;
added basic authentication support to ZnNeoClient;
added ZnNeoClient>>#entity[:]' id '2dea8f25-4226-476c-ad33-6108bad5183b' date '08/18/2011' time '23:11:28' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.183' message 'listening to the code critics (mostly formatting)' id 'a1062344-e54b-46b5-be1e-e12e39932a62' date '08/18/2011' time '14:50:08' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.182' message 'added empty ZnEntity>>#close
added ZnStreamingEntity>>#close to close the underlying stream if any
ZnMessage>>#resetEntity: now sends close to the enity being replaced if necessary
added ZnResponse class>>#methodNotAllowed:
ZnStaticFileServerDelegate now refuses not GET/HEAD requests
ZnSingleThreadedServer>>#handleRequest: now does a #resetEntity: on HEAD requests
implemented ZnNeoClient>>#head
streamlined the responses of ZnNeoClient operations to return #contents, except for #head' id 'e9ce39cf-0dde-447a-af48-69d07048c9d1' date '08/18/2011' time '13:57:03' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.181' message 'added ZnMimeType wildcard constants #any and #text;
added ZnHttpUnsuccessful and ZnUnexpectedContentType exceptions;
extended ZnNeoClient with #ifFail:, #enforceHttpSuccess, #enforceAcceptContentType and retry behavior' id 'cfaa0963-4bb7-49d8-a3b1-f89527ee2bc2' date '08/17/2011' time '21:42:51' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.180' message 'added ZnMimePart class>>#fieldName:entity: and #fieldName:fileNamed:
added ZnNeoClient timeout option, more url building api,
support for applicationFormUrlEncoded and multiPartFormData encoded entities for post/put' id 'ea58662e-243e-4eff-ad90-7ac4ff58e9a3' date '08/17/2011' time '14:24:50' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.179' message 'added ZnUrl>>#inContextOf:
extended ZnHeaders>>#request: to handle urls without a host
added request url building to ZnNeoClient
added oneShot option to ZnNeoClient' id '97d7e216-e0ff-4931-9dcf-498e2a938465' date '08/12/2011' time '13:52:04' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.178' message 'added code to throw a ZnMissingHost exception when a bogus ZnUrl is used to connect to a HTTP host' id '6b9c0a42-5a10-4b68-9c4c-efc33a7f52a4' date '08/11/2011' time '19:42:44' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.177' message 'added support for dealing with certain defaults in ZnUrl:
- new ZnUrl class>>#fromString:defaultScheme: and ZnUrl>>#parseFrom:defaultScheme (while #readFrom: and #parseFrom: are still using nil as default scheme, like before)
- new ZnUrl>>#asZnUrlWithDefaults (and private #setDefaults)
- new ZnUrl>>#schemeOrDefault (along the lines of #portOrDefault)
- improved support for parsing relative URLs' id '82463b1e-0ceb-494f-a9fd-ac7e043d1307' date '08/11/2011' time '15:29:00' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.176' message 'Merged Damien Pollet''s changes regarding the misspelling of ''Unknow[n]'' in exception class names (thx);
First definition of ZnNeoClient;
added support for better HTML Doc Types in some generated HTML pages of ZnDefaultServerDelegate' id '333bbc02-577c-44e3-9ef1-7489a5586f57' date '08/11/2011' time '10:33:51' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.175' message 'Changed ZnMimePart>>#fieldValueString to return an empty string instead of ''nil'' when the field is empty or absent (Thx Lukas Renggli)' id 'b95d0734-62d3-4de6-8a94-03816784d360' date '07/29/2011' time '14:23:01' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-MarcusDenker.172' message 'Issue 4326: Connection timeout problem
http://code.google.com/p/pharo/issues/detail?id=4326
Issue 4417: Zinc does not honour network proxy configuration
http://code.google.com/p/pharo/issues/detail?id=4417
Issue 4428: New mechanism for Zinc servers start/stop handling after system startUp/shutDown
http://code.google.com/p/pharo/issues/detail?id=4428' id '190ce930-79bf-4a7e-b0fa-60d1fbaecfe0' date '06/21/2011' time '16:08:49' author 'MarcusDenker' ancestors () stepChildren ())) stepChildren ())(name 'Zinc-HTTP-DamienPollet.175' message 'Fix typo in exception names.' id '82fd6138-b87e-4e81-93ff-4c874ff72e03' date '08/04/2011' time '14:22:04' author 'DamienPollet' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.174' message 'ZnDefaultServerDelegate>>#echoRequest: added option to delay the response to /echo with a specified number of seconds, as in echo?delay=60' id 'bec35859-b638-42c1-9689-3f1d7a540c8b' date '07/14/2011' time '09:54:57' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.173' message 'added ZnSingleThreadedServer>>#onRequestRespond: convenience method' id '75b3a711-a7ff-430d-a049-95a5dd1a1c3c' date '07/01/2011' time '14:17:08' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.172' message 'implemented client side support for If-Modified-Since and Not Modified:
- added ZnRequest>>#setIfModifiedSince:
- refactored ZnMessage>>#readFrom to call #readEntityFrom:
- overwritten ZnResponse>>#readEntityFrom: to take special no content response into account
- extended ZnUtils class>>#httpDate: to accept any argument that understands #asTimeStamp
' id '64fe262e-fd77-4b45-8f6a-f874995d07ec' date '06/28/2011' time '11:05:10' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.171' message 'removed some bogus class variable from ZnConnectionTimeout' id '11c76430-7cc0-4885-b4a0-709f3fbf4f57' date '06/20/2011' time '14:50:35' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.170' message 'fixed undeclared in ZnNetworkingUtils class>>#initialize (SocketStreamTimeout was renamed to DefaultSocketStreamTimeout)' id '15682e90-31ca-40e3-b26f-a4df4aab8814' date '06/19/2011' time '16:38:01' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.169' message 'implementation of a new mechanism for system #startUp/#shutDown handling by ZnServer(s):
ZnServer holds a class variable ManagedServers, clients can #register/#unregister to receive #start/#stop when the system #startUp/#shutDown is sent;
currently only the default server (of which there is only one instance per ZnServer subclass) is automatically registered/unregistered in #defaultOn: and #stopDefault,
other instances must do this explicitely themselves ' id 'ebc443eb-7ce9-488c-92cb-05a67179c4f4' date '06/19/2011' time '14:21:38' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.168' message 'introduction of ZnConnectionTimeout which is used by ZnNetworkingUtils class>>#socketStreamTimeout
and defaults to ZnNetworkingUtils class>>#defaultSocketStreamTimeout
Now you can do
ZnConnectionTimeout value: 60 seconds during: [ ZnClient get: ''http://slowhost.com/foo'' ]' id 'dbe15895-070d-4a2f-8d62-dd40c5ba028a' date '06/18/2011' time '23:12:18' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.167' message 'merged' id 'cb16cb7a-5fac-494d-ab2a-97d4261f04ae' date '06/17/2011' time '15:51:56' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.165' message 'modified #on: Error do: to #on: Exception do:' id 'ccb2d275-7dd3-44f4-ace4-12fc2217f9a3' date '06/17/2011' time '15:46:54' author 'SvenVanCaekenberghe' ancestors () stepChildren ())(name 'Zinc-HTTP-MarcoSchmidt.166' message 'Patch to work behind firewall with basic authorization' id 'acb7f2fc-d621-5d4b-983f-25d217623f11' date '06/17/2011' time '15:31:11' author 'MarcoSchmidt' ancestors ((name 'Zinc-HTTP-MarcoSchmidt.165' message 'Corrected wrong method send in NetworkUtils' id '4290066c-4367-794e-bb95-c058f1a268a0' date '06/17/2011' time '15:26:54' author 'MarcoSchmidt' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.164' message 'implemented support for proxies that require authorization;
ZnHeaders class>>#requestHeadersFor: will add a Proxy-Authorization header when needed;
added public API ZnNetworkingUtils class>>#proxyAuthorizationHeaderValueToUrl:
removed public API ZnNetworkingUtils class>>#httpProxy and #isProxySet;
upgraded public API ZnNetworkingUtils class>>#shouldProxyUrl: to be a primary interface;
refactored internals of ZnNetworkUtils to use NetworkSystemSettings directly instead of HTTPSocket;
this code still has to be tested and validated with real world proxies ' id '90d57d3d-fc41-4548-a2fd-dcd7c22a3a1f' date '06/17/2011' time '09:16:22' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.163' message 'taking over a patch from Pharo (http://code.google.com/p/pharo/issues/detail?id=4326):
adding SocketStreamTimeout as class variable to ZnNetworkingUtils to make this ''constant'' settable;
the new default is now 30 seconds' id '3622d15d-b15a-4398-a9e6-0027e600a78a' date '06/09/2011' time '21:14:27' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.162' message 'extended ZnStringEntity>>#readUpToEndFrom: to deal with the weird SocketStream>>#atEnd issue by added an extra #peek;
added ZnChunkedReadStream>>#peek;
added chunk buffer reuse to ZnChunkedReadStream' id '0205b561-44a9-4434-b40b-976b5d9a65a6' date '05/19/2011' time '12:57:24' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.161' message 'a small change to improve Squeak compatibility' id '018ccd1d-2321-4dcb-b468-722a42b9d605' date '05/17/2011' time '21:34:03' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.160' message 'fixing support for HTTP proxies (thanks Alexandre Bergel for reporting this)
requests to localhost are excluding from being proxied
- ZnRequestLine>>#writeOn: now outputs absolute URLs when proxying
- added ZnNetWorkingUtils class #isProxySet #shouldProxyUrl: and #httpProxy
- added ZnUrl>>#isLocalHost
- changed ZnUrl>>#host: to lowerCase its argument
' id '619a8697-4d71-4c1c-a99e-fe5e07f3dbb4' date '05/13/2011' time '11:07:48' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-NickAger.159' message 'minor refactoring to ZnDispatcherDelegate to use:
ZnStatusLine ok
rather than:
ZnStatusLine code: 200 ' id 'e5ab93a6-b254-4ba2-bbd9-41ecf500f584' date '05/10/2011' time '15:53:33' author 'NickAger' ancestors ((name 'Zinc-HTTP-NickAger.158' message 'refactored cookie support:
ZnResponse>>#setCookie: has been renamed to ZnResponse>>#addCookie:
ZnResponse>>#setCookies: has been removed
ZnHeaders>>#cookies now returns a dictionary rather than a ZnCookieJar
ZnCookieJar>>#cookieAt: a helper method I added, I''ve removed.
The tests have been updated as required.' id '75f5dd45-9dcf-4491-a28c-4f8cbe8e784a' date '05/10/2011' time '11:39:41' author 'NickAger' ancestors ((name 'Zinc-HTTP-NickAger.157' message 'added ZnStatusLine creation constants and refactored ZnResponse to use the constants' id '3fa86243-d119-4ab5-b87d-3c8622aa9257' date '05/10/2011' time '09:13:37' author 'NickAger' ancestors ((name 'Zinc-HTTP-NickAger.156' message 'created ZnResponse>>#setCookie: and refactored ZnResponse>>#setCookies: to use #setCookie:' id 'ac85f148-5de7-4b04-8a81-d8e7222e1f78' date '05/10/2011' time '08:37:25' author 'NickAger' ancestors ((name 'Zinc-HTTP-NickAger.155' message 'added:
Request cookie accessor
Response cookie setter' id '41a8f7a2-dbda-45bd-a831-03b7c0d6ca37' date '05/10/2011' time '02:52:47' author 'NickAger' ancestors ((name 'Zinc-HTTP-NickAger.154' message 'added ZnDispatcherDelegate for straight-forward dispatching to mapped urls.
Modelled after Ruby''s WEBrick API:
server = WEBrick::HTTPServer.new(:Port => 2000)
server.mount_proc("/heresy"){|req, res| Application.new.handle(req, res)}
server.mount_proc("/favicon.ico"){|req,res| res.status = 404}
ZnDispatcherDelegate API:
server := (ZnServer startDefaultOn: 9090)
delegate: (ZnDispatcherDelegate new
map: ''/hello'' to: [ :request :response | response entity: (ZnStringEntity html: ''hello server
'') ];
map: ''/counter'' to: [ :request :response | counterApplication handleRequest: request response: response ]).' id '87d63347-b4ab-4c50-86a4-8d7d89d24e32' date '05/09/2011' time '21:44:58' author 'NickAger' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.153' message 'made ZnNetworkingUtils>>#socketStreamToHostNamed:port: private' id '44a98753-fe58-40bc-8a88-5887c0872212' date '05/09/2011' time '13:32:56' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.152' message 'extended ZnFixedClient with a scheme instance variable, adjusted the instance creation protocol, added a #baseUrl accessor for use in #newConnection;
added ZnUrl class>>#defaultPortForScheme:;
removed ZnNetworkingUtils class>>#socketStreamToHostNamed: to simplify the socket [stream] factory API' id '69fc77af-dddd-44c5-9119-11f9db4f85db' date '05/09/2011' time '10:23:58' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.151' message 'conversion of ZnNetworkingUtils into an instance socket[stream] factory and a class side API' id '6c95ba6b-65ec-47cb-b6dc-284fd95f3832' date '05/02/2011' time '22:46:36' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.150' message 'fixing a problem where responses without an explicit content-length but with an entity where not read as they should (thanks Esteban Lorenzano & Andy Burnett for reporting this):
- ZnResponse>>#entityReaderOn: now extends the super entityReader with the #allowReadingUpToEnd option
- ZnEntityReader>>#entityReader now swallows entities when they are #isEmpty (making them nil)
- ZnStringEntity>>#readFrom: is split between #readLimitedFrom: and #readUpToEndFrom: where the last method has extra error handling to swallow ConnectionClosed exceptions (similar to what SocketStream>>#upToEnd does)
- the ZnEntity hierarchy now implements #isEmpty' id '8fe0b470-7728-454d-bc90-fa42d8330817' date '05/01/2011' time '19:19:13' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.149' message 'rewrote ZnHTTPSocketFacade class>>#entendURL:withArguments: to be compatible with HTTPSocket class>>#argString: (Thanks Esteban Lorenzano)' id '3a49e678-fa7b-4c30-bdc6-0944c7637e7f' date '04/30/2011' time '20:55:03' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.148' message 'extended ZnDefaultServerDelegate with a configurable response to / (in the prefixMap the key ''/'' maps to another key that is used instead as prefix for another lookup)' id '309679c5-4d24-4741-b067-2adc9cc8f6c6' date '04/28/2011' time '22:27:32' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.147' message 'changed ZnServer class>>#initialize not to do a Smalltalk #addToStartUpList:after: but just use the plain #addToStartUpList: (we only depend on networking and multi-processing but those will probably be OK)' id 'b2b69990-95ff-40bc-9ff0-6cb11dc96a24' date '04/27/2011' time '19:42:51' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.146' message 'skipping over lost version:
.145
fixed ZnUtils class>>#encodeBase64: to test whether Base64MimeConverter responds to #mimeEncode:multiLine:, fall back to #mimeEncode: and manually remove Character cr occurences; this should fix Pharo 1.1.1 compatibility (Thanks Esteban Lorenzano for reporting this)
.144
added option to extend ZnDefaultServerDelegate''s prefixMap with block (taking request as argument, returning response);
changed default welcome text to include reference to /help
.143
added ZnUrl>>#postCopy;
refactored ZnStaticFileServerDelegate and added the option to redirect for directories without an ending slash
' id '57e6d630-1045-413b-8938-1259024175f9' date '04/27/2011' time '16:22:32' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.145' message 'fixed ZnUtils class>>#encodeBase64: to test whether Base64MimeConverter responds to #mimeEncode:multiLine:, fall back to #mimeEncode: and manually remove Character cr occurences; this should fix Pharo 1.1.1 compatibility (Thanks Esteban Lorenzano for reporting this)
' id 'f9f0831d-5ffa-4a5c-a8ec-b276c9babc35' date '04/26/2011' time '19:01:32' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.144' message 'added option to extend ZnDefaultServerDelegate''s prefixMap with block (taking request as argument, returning response);
changed default welcome text to include reference to /help' id '439b923a-997e-4f51-9b7d-90896f8dd97f' date '04/26/2011' time '13:44:01' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.143' message 'added ZnUrl>>#postCopy;
refactored ZnStaticFileServerDelegate and added the option to redirect for directories without an ending slash' id '08a56e5b-3270-4231-9568-4e5beffb58ae' date '04/26/2011' time '13:24:30' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.142' message 'listening to the Code Critics' id 'c78b1867-b800-4b03-805a-004df5aa7556' date '04/20/2011' time '12:47:01' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.141' message 'small fix to ZnUrl>>#printPathOn: to deal with cases where forward slashes are encoded in URLs (Thanks, Jan van de Sandt for pointing this out);
added ZnUrlTests>>#testEncodedSlash to cover these cases' id '88ca6bf6-ce11-447f-8a1d-be9c67e7db71' date '04/17/2011' time '10:33:32' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-PaulDeBruicker.140' message 'changed ByteArray declarations in
ZnConstants>>#faviconBytes
and
ZnMultiPartFormDataEntity>>#parse:boundary:
from square brackes to #() asByteArray so that the code loads with no problems into Pharo and Gemstone' id '9ac457ad-7824-4c0c-8d5d-e7ebe36f0280' date '04/10/2011' time '12:03:38' author 'PaulDeBruicker' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.139' message 'added ZnDefaultServerDelegate /help & /status;
updated framework version from 0.1 to 1.0 ;-)' id 'f960a4c5-2462-4cfb-81a9-9ee740d2e294' date '03/31/2011' time '10:17:16' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.138' message 'increased ZnSingleThreadedServer>>#acceptWaitTimeout from 60 to 300 seconds;
added some infrastructure to use this looping for future periodic tasks' id '5ba796b1-d698-4595-8a48-1500029cc52e' date '03/30/2011' time '21:25:46' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.137' message 'added new logging framework in Zinc-HTTP-Logging, consisting of ZnLogEvent (an Announcment), ZnLogSupport and ZnLogListener and subclasses ZnTranscriptLogger, ZnMemoryLogger and ZnFileLogger;
now using the new logging facilities in Zn[Single|Multi]ThreadedServer, ZnFixedClient and ZnUserAgent;
introduced new subclass of ZnFixedClient, ZnExtendedFixedClient that adds various hooks for customization
' id 'bb85953b-e489-472d-997b-27e28941c052' date '03/29/2011' time '16:49:38' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.136' message 'added postProcessHook to ZnFixedClient;
extended ZnFixedClient reuse logic so that it is limited to a maximum keep alive time (of 5s) so as not to bother running into an error anyway.' id '85d852c0-b357-42ca-95da-0ebaec1c78ad' date '03/28/2011' time '16:24:06' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.135' message 'added preProcessHook & newConnectionHook to ZnFixedClient' id '3bc47cd7-fae8-4e62-a80d-5d991de3c137' date '03/28/2011' time '14:24:04' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.134' message 'some Socket[Stream] options/parameters tweaking:
- server socket listen backlog increased from 10 to 32
- socket buffer size decreased from 8192 to 4096 (these were refused anyway)
- client socket streams now get the same treatment (#setSocketStreamParameters:) as accepted server socket streams (i.e. setting timeout to 10s and buffersize)
' id 'ee477f07-3703-4504-b62a-9e9905aec294' date '03/24/2011' time '11:01:18' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.133' message 'bugfix: it turns out that String>>#base64Encoded introduces newlines which we definitively do not want when doing Basic HTTP Encoding for example;
introduced ZnUtils class>>#encodeBase64: to do the right thing and invoke Base64MimeConvertor with the #mimeEncode: multiLine: false;
replaced all usages (added a #decodeBase64: for orthogonality);
added a unit test to catch this
' id '8c6bc0e9-09b3-4b38-84dc-90b76ad30c94' date '03/21/2011' time '20:49:39' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.132' message 'added ZnResponse>>#isNotModified' id '9d915967-5593-4909-ad83-8ba8577f6cd7' date '03/21/2011' time '10:46:35' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.131' message 'introduced ZnUnknownScheme exception' id 'd4ee20cf-2166-4a40-98ee-3f89c21e4d2e' date '03/18/2011' time '13:31:43' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.130' message 'new categories: Zinc-HTTP-Exceptions and Zinc-HTTP-Streaming;
added ZnParseError hiearchy to better handle illegal input;
fixed a bug in dealing with percent encoding in ZnUrl paths;
ZnMultiThreadedServer>>readRequestSafely: now closes on ZnParseErrors in the input' id 'ec9629aa-9c2a-45d2-aa2c-4988ab48b239' date '02/28/2011' time '15:59:37' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.129' message 'added ZnMultiPartFormDataEntity>>#partsDo:' id '5e8a1d68-ab52-4b98-80f5-4a75aa724b4f' date '02/27/2011' time '20:27:54' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.128' message 'added some extra allowed HTTP methods' id '5df00c70-8ce3-45a2-8991-770dcb04c480' date '02/24/2011' time '09:12:07' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.127' message 'implemented ZnLimitedReadStream>>#next:into:' id 'b99b13a8-0959-4e1e-a501-cf9ed2334d70' date '02/21/2011' time '23:32:04' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.126' message 'implemented ZnHTTPSocketFacade class>>#httpPostMultipart:args:accept:request:
added ZnHTTPSocketFacade class>>#constructMultiPartFormDataEntity:' id 'fbc9bd8a-55fc-4bef-99b4-cd54bd89b0cf' date '02/07/2011' time '09:37:50' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.125' message 'added ZnResponse>>#serverError:' id 'f17a0fb7-5e9a-4188-885c-553e3a372d25' date '02/04/2011' time '23:03:51' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.124' message 'fixed a typo in the ZnMimePart instance creation methods (formdata should be form-data) (thx Cédrick Béler)' id 'af6dbddc-b5d8-482a-b2ef-4071fcbba787' date '01/31/2011' time '20:16:57' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.123' message 'added ZnUrl>>#queryDo: ZnApplicationForUrlEncodedEntity>>#fieldsDo:
added ZnMessage>>#resetEntity: to allow overwriting content type and length when these are already set' id 'dffdb499-d272-4fca-9991-ad5c3ebdaad9' date '01/31/2011' time '13:58:47' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.122' message 'added proper content length computation to ZnMultiPartFormDataEntity (bugfix);
some code cleanup to ZnEntity content length computation' id 'faea419a-c94d-4f44-b0ae-067b635f1c4e' date '01/27/2011' time '17:17:08' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.121' message 'added #textJavascript as a constant to ZnMimeType;
added ZnByteEncoder to handle single byte encodings that do not map directly to the lower Unicode section (for example Latin2, ISO-8859-2) by reusing the mapping tables from ByteTextConverter;
added #handlesEncoding: and #newForEncoding: protocol to class side of ZnCharacterEncoding hierarchy' id 'c040db5f-1548-45bb-9f9d-757b78a67d70' date '01/25/2011' time '13:48:40' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.120' message 'fixed ZnUserAgent>>#redirectUrl so that relative redirect urls are made absolute in reference to the (previous) request''s url instead of self url;
changed ZnHttpClient>>#get and #head not to reference url as an inst var' id '4bf543a0-c919-4508-8703-d0a272e32691' date '01/20/2011' time '21:20:40' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.119' message 'fix ZnUserAgent>>#openConnection to honor its ZnUserAgentSettings>>#timeout' id '69b705b0-6b68-46f9-8ed0-ba43fe195768' date '01/20/2011' time '19:40:41' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.118' message 'Updated class comments' id 'acea0a40-8a21-4257-8191-72f399e4a2a4' date '01/18/2011' time '11:05:56' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.117' message 'more fixes to ZnUserAgent redirect following behavior: rewrote logic' id '39d2e9eb-9bdb-4ee4-8ca8-68c812abb3b7' date '01/14/2011' time '22:03:05' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.116' message 'changed the redirect behavior for POST/PUT requests: the common practice is to turn these into GET request, see ZnUserAgent>>#method:for:headers:data:imit: and ZnUserAgent>>#prepareRedirect:' id 'a102bbdc-8185-41b0-afa2-4d0af8f2557a' date '01/13/2011' time '13:39:01' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.115' message 'added an extra guard to ZnFixedClient>>#fixedUrl: when host is nil (thx, Cédrick Béler)' id 'ac2bcf63-4c24-4c6a-b696-2b8dff2eae4b' date '01/12/2011' time '16:15:06' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.114' message 'ZnUserAgent (and ZnClient) now can follow relative redirect locations;
introduced ZnMultiValueDictionary to allow multiple values to be stored under one key as an array;
using ZnMultiValueDictionary for queries and headers;
ZnUrl now uses ZnUtils>>parseQueryFrom: again;
various simplifications and cleanups which might help when reading the code in ZnUserAgent (and ZnClient);
ZnUserAgent (and ZnClient) now handle parameter encoding differently
' id 'e1a49d00-d9f0-4800-8cd7-cb354e86d671' date '01/12/2011' time '14:03:44' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.113' message 'promoted ZnFixedClient>>#fixedUrl: and ZnClient>>#executeRequest: to public status (and added comments);
changed ZnFixedClient>>#fixedUrl: to accept ZnUrl objects as well for more flexibility (allowing users to add query/fragment URL elements in addition to the path)
' id 'c3b62aa9-da90-4478-9ab3-ba2670411cb3' date '01/08/2011' time '20:36:28' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.112' message 'split of ZnNetworkingUtils from ZnUtils to separate related functionality (Thx S.Ducasses)' id '845f67f8-df1c-40cf-a644-4699f50bc3bb' date '01/07/2011' time '19:52:57' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.111' message 'fixed ZnClient class>>#getImageOfType:usingParser:fromUrl: to correctly report responses with unexpected mime types (Thx S.Ducasses)
' id 'd633bf09-4617-4e34-b6c7-0260dc759817' date '01/07/2011' time '19:35:18' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.110' message 'added ZnUrl>>#queryAddAll:' id 'ae2dbf13-b27d-4e45-ae66-24ee8687bb3a' date '01/05/2011' time '21:07:28' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.109' message 'added application/xml as a predefined constant to ZnMimeType' id 'eb18136d-284f-4501-81e3-8c18a0b0e503' date '01/05/2011' time '13:53:53' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.108' message 'various changes to reduce the (Lint) warning count' id 'e455691d-fadb-4303-a83f-680be600e875' date '01/04/2011' time '21:15:26' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.107' message 'introduced #asZnMimeType on ZnMimeType, MIMEType & String to replace ZnUtils class>>#asMimeType: which was removed' id '6008c428-e4d3-4767-9622-879979d4a9f9' date '01/04/2011' time '20:04:37' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.106' message 'more cleanup
added ZnBivalentWriteStream>>next:putAll:startingAt:
fixed ZnStaticFileServerDelegate example' id '2e02dc65-d058-4d72-94ff-309d005a7c16' date '01/04/2011' time '16:30:49' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.105' message 'removing unused extension methods' id '93d4f4d1-39de-40ca-9e38-6a8741df39c4' date '01/04/2011' time '16:11:00' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.104' message 'massive migration from builtin Url to ZnUrl;
added asZnUrl to String and Url
' id '73cb3a10-8b68-4f91-96a4-80a4f8603695' date '01/04/2011' time '15:34:16' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.103' message 'first version of ZnUrl class' id '8e7d4ba7-f5d9-41e7-a489-e7bfa2804c8e' date '01/04/2011' time '12:22:49' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.102' message 'added an extra guard to ZnSingleThreadedServer>>#releaseServerSocket' id '8f40387c-7d98-4816-ad2b-35665b66b14b' date '12/19/2010' time '14:53:27' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.101' message 'added caching to ZnDefaultDelegate>>#bytes: to improve benchmarking performance: this make a huge difference (thx, Philippe Marschall);
refactored ZnMultiThreadedServer>>#readRequestSafely: to use #, to concatenate exceptions into an exception set (how elegant)
' id 'ab05d220-caa7-4f39-9276-e71491ca9b78' date '12/19/2010' time '14:43:29' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.100' message 'added /bytes to ZnDefaultServerDelegate to measure the huge speed difference between binary and UTF-8 encoded data;
added ZnServer>>#isListening' id '4c960061-613e-443b-82d6-268c144d5d52' date '12/15/2010' time '21:42:47' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.99' message 'refactored ZnServer hierarchy:
- renamed old ZnServer to ZnSingleThreadedServer
- renamed old ZnExperimentalServer to ZnMultiThreadedServer
- added ZnServer as superclass and facade
ZnServer class>>#defaultServerClass is now ZnMultiThreadedServer!
' id 'f1366cea-f241-4260-bd60-23b6747b537b' date '12/15/2010' time '15:56:59' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.98' message 'finally ''solved'' the ab (apachebench) concurrent load problem (ab -k does HTTP/1.0 with Connection:keep-alive and expects Connection:keep-alive back);
added #isHttp10 and #isHttp11 to ZnRequest and ZnRequestLine;
rewrote ZnMessage>>#isConnectionClose and #isConnectionKeepAlive;
added ZnMessage>>#setConnectionKeepAlive;
added ZnRequest>>#wantConnectionClose;
added ZnResponse>>#setKeepAliveFor:;
improved ZnServer logging with proper header (including PID);
Zn[Experimental]Server>>#readRequest and #writeResponse:on: now do logging themselves #logRequest and logResponse now set lastRequest and lastResponse debugging instance variables ' id 'a463c5c8-a719-4d6e-b916-2b17116a8df0' date '12/14/2010' time '15:01:14' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.97' message 'revised #printOn: and helper methods of ZnMessage and ZnEntity hierarchy to support ZnServer>>#logRequest and #logResponse;
fixed a bug in ZnStringEntity encoder initialization;
extended ZnServer>>#acceptWaitTimeout to 60s;
' id 'f6ba0f3f-5b5a-4eb4-a54e-2c6c316ae95d' date '12/14/2010' time '12:23:09' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.96' message 'added #favicon: and #random: handlers to ZnDefaultServerDelegate' id '28d9458b-51e9-45e7-8ecf-3611b5039d2c' date '12/14/2010' time '10:54:06' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.95' message 'added #logger and #log: to Zn[Experimental]Server for extensive tracing' id '9a30d6f8-cd49-4ef4-8723-88d73ec297fe' date '12/14/2010' time '09:26:40' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.94' message 'made a number of socket related constants explicit in ZnUtils and ZnServer;
ZnUtils class>>#socketStreamOn: now sets more options explicitely;
improved process name in Zn[Experimental]Server;
ZnDefaultServerDelegate>>#welcome: now replaces CR with LF in ZnConstants class>>#welcomePageHtml ' id 'b6740682-52d3-4cc6-af7a-8ce6f5a2dbfc' date '12/13/2010' time '17:02:18' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.93' message 'refactored ZnServer''s and ZnExperimentalServer''s #listenLoop and #serveConnection[s]On: with the introduction of #initializeServerSocket, #releaseServerSocket, #executeOneRequestResponseOn: and #executeRequestResponseLoopOn:' id '7308c60d-4aa0-4653-89eb-78c703dd047f' date '12/10/2010' time '16:17:17' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.92' message 'Simplified ZnServer by moving functionality to ZnDefaultServerDelegate, a new class handling echo, dw-bench, unicode and / welcome' id '3f058ee0-89a2-4999-bd25-f02bf68cf0ff' date '12/10/2010' time '15:54:08' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.91' message 'added ad improved ZnServer method comments' id '0a8191cc-e438-4345-bc9b-e42a11ef367e' date '12/10/2010' time '15:05:34' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.90' message 'added ZnBufferedWriteStream class>>#on:do: modeled after #fileNamed:do: a convenience method that makes sure #flush is a called' id 'b8d896bf-6688-41e0-8ca5-267326b29c2a' date '12/09/2010' time '18:26:21' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.89' message 'added ZnUtils>>#socketStreamToHostNamed:port: followed by some simplification and refactoring' id 'a00bab52-f57d-4d34-bc86-be0a4b2be3cc' date '12/08/2010' time '11:19:14' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.88' message 'added experimental ZnBufferWriteStream' id 'fd2dd63e-035b-4c72-a4d4-58933b890e13' date '12/08/2010' time '10:21:55' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.87' message 'added ZnValueDelegate that converts #handleRequest: to #value: on a wrapped object' id '34a705ac-c414-441f-a606-443e50f91449' date '12/07/2010' time '16:20:02' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.86' message 'some more comment improvements' id '6e89b08f-198b-4ccd-b334-801598105a9e' date '12/07/2010' time '15:23:09' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.85' message 'renamed ZnMagicCookie[Jar] to ZnCookie[Jar]' id '1885b80b-6dfc-4366-8f69-ba459de201ea' date '12/07/2010' time '00:02:25' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.84' message 'moved all classes from category ''Zinc-HTTP-New-*'' to ''Zinc-HTTP-*''' id 'fb5273fe-7cd7-4bf0-b4e4-a366bf735e65' date '12/06/2010' time '21:41:56' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.83' message 'removed all Zinc-HTTP-Old-* categorized classes from the Zinc-HTTP package (these will be moved to a new MC package called ''Zinc-Old'')' id '4123ffde-b6f7-4233-b9c8-ddfdac314c1f' date '12/06/2010' time '17:26:43' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.82' message 'removed #isBinary from ZnEntity (and subclasses) ''testing'' protocol' id '3b12b147-c0bb-447b-bac2-53d899b54703' date '12/06/2010' time '16:05:17' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.81' message 'ZnStringEntity>>#printContentsOn: now relies on #nextPutAll: instead of #print: to avoid quoting by String>>#storeOn:' id '83409534-1da5-4991-a7ba-eeed6de8b6c9' date '12/06/2010' time '15:16:22' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.80' message 'renamed class ZnNewStringEntity to ZnStringEntity' id 'ef1213ed-3501-4a47-b346-424edb8828c3' date '12/06/2010' time '13:50:02' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.79' message 'removed class ZnStringEntity' id '305134b7-e6f5-4930-b3ed-70ee5213bf01' date '12/06/2010' time '13:47:48' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.78' message 'ZnMessage>>#hasHeaders was wrong;
ZnBivalentWriteStream class>>#on: will no longer instanciate a new wrapper if the wrapped stream is of its own type;
went over all class comments and updated lots of them
' id '0ac22c19-d755-4abf-8271-701953203148' date '12/06/2010' time '13:12:57' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.77' message 'fixed ZnHTTPSocketFacade>>#httpPut:to:user:passwd: (apparently MC passed in a byte array instead of a string, luckily ZnEntity>>#with: can deal with this)' id '58c44c1f-02ea-40e3-a5bd-e54fcd38ffd3' date '12/04/2010' time '14:26:11' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.76' message 'large changeset: switch from ZnStringEntity to ZnNewStringEntity, now using binary socket streams on server, all with the goal of proper UTF-8 support;
- ZnEntity and subclasses not do proper #printOn: using #printContentsOn: (this is used in ZnServer''s echo handler);
- added ZnBivalentWriteStream>>#isBinary which caches the #isBinary property of the stream it wraps (added fallback when DNU #isBinary);
- added ZnUtils>>#socketStreamOn: which is used by ZnServer>>#serveConnectionOn: to force a binary stream;
- fixed ZnMessage>>#hasHeaders and ZnMimePart>>#hasHeaders;
- debugged ZnNewStringEntity
- in order to support both binary and character streams, ZnMessage, ZnStatusLine, ZnRequestLine and ZnHeaders now use a ZnBivalentWriteStream in their #writeOn: implementations;
- fixed ZnUserAgent>>#processResponse: to only read headers and no entity when doing a HEAD request
' id 'c7354231-e350-4fa6-aee7-b3d7e68eae66' date '12/04/2010' time '14:11:32' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.75' message 'added instance creation and preferred subclass accessing protocol to ZnEntity to make it a facade;
replace all direct references to ZnStringEntity and ZnByteArrayEntity with ZnEntity facade invocations
' id '38988dd8-c300-47cb-8aca-bf620c808fc3' date '12/03/2010' time '14:08:08' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.74' message 'added #isCharSetUTF8 and #setCharSetUTF8 to ZnMimeType;
changed the defaults/constants #textPlain and #textHtml of ZnMimeType to use UTF-8 as charset;
created new class ZnNewStringEntity that uses an encoder to write/read strings to/from a binary stream
' id 'b5a8d802-77ff-4880-9e20-3af6d16d14c4' date '12/02/2010' time '13:50:43' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.73' message 'ZnUTF8Encoder: introduced next block in #nextPut:toStream: to reduce code duplication; made #nextFrom: more compact' id 'b0852d58-48b1-48d8-8172-d54525449ef6' date '11/30/2010' time '13:49:46' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.72' message 'introduction of ZnCharacterEncoder, ZnNullEncoder and ZnUTF8Encoder' id '7cdd0747-637c-44a9-a835-8b055e0353b9' date '11/30/2010' time '12:28:00' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-pmm.71' message '- fix unit tests
- see http://hudson.lukas-renggli.ch/job/Zinc/' id '3554a779-86fe-4c2b-a826-900044edbb67' date '10/25/2010' time '07:10:47' author 'pmm' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.70' message 'added ZnBufferedEntity (part 1 of a refactoring of entities)' id 'b703ca9b-f970-416a-bb28-c08a0246d585' date '10/20/2010' time '10:40:38' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.69' message 'ZnUtils>>socketStreamToUrl: meant to put the stream in binary mode but was using isBinary, fixed' id 'e85c3518-20bc-407b-9522-4cca9e0ce34d' date '10/14/2010' time '14:35:45' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-MattKennedy.68' message 'Added isComplete testing message to the ZnCredential classes to answer true if all required fields are set.
Updated ZnUserAgent>>prepareCredentials:for:method to use ZnCredential>>isComplete test.
Updated ZnUserAgent>>defaultErrorHandler to raise exceptions again.' id '25b31f4c-23b2-458e-939d-557bce7e1e71' date '10/06/2010' time '17:24:46' author 'MattKennedy' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.67' message 'removed another String>>#trimBoth usage from ZnMimePart>>#contentDispositionValues;
reimplemented ZnUserAgentSettings class>>#platform more elegantly
' id '72a2d1b8-f68a-4c85-84c6-e7f515f1879b' date '10/06/2010' time '09:34:33' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-MattKennedy.66' message 'Reverted ZnUserAgent>>defaultErrorHandler change. Wasn''t passing all tests correctly.' id '6a148c14-5451-4ca5-8180-767e1c376f08' date '10/05/2010' time '17:39:08' author 'MattKennedy' ancestors ((name 'Zinc-HTTP-MattKennedy.65' message 'ZnUserAgent default error handler raises exceptions to the debugger again.
Added ZnHttpClient>>parameterAt:add:' id '433b8d17-912b-46dd-9a52-3888f753fdc4' date '10/05/2010' time '17:33:49' author 'MattKennedy' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.64' message 'added ZnUtils class>>#trimString: until String>>#trimBoth is available everywhere;
fixed usage in ZnMimeType>>#contentDispositionValues
' id 'd25e7ffe-691e-43c1-9607-842b9225d5a8' date '10/05/2010' time '21:26:53' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.63' message 'first complete/working version of ZnMultiPartFormDataEntity and ZnMimePart (reading/writing/instance creation/accessing);
added ZnMimeType>>#parameterAt:[ifAbsent:]
' id '5c9658b2-329f-4197-b9a5-d25751435191' date '10/05/2010' time '20:33:32' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.62' message 'first rough and unfinished implementation of ZnMultiPartFormDataEntity;
started extending ZnMimePart to allow field handling;
introduced ZnBivalentWriteStream
' id '19b39ff5-631f-4e08-bda2-370466c52bae' date '10/04/2010' time '21:24:15' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-MattKennedy.61' message 'Added ZnHttpClient which subclasses ZnUserAgent to implement a high level API.
Updated ZnUserAgent>>prepareCredentials:for:method: to handle credentials stored on the session before the client receives a 401 from the server.
' id '70e0bcdb-0b42-4f13-9c9b-c7d1b8a01815' date '10/01/2010' time '22:31:54' author 'MattKennedy' ancestors ((name 'Zinc-HTTP-MattKennedy.60' message 'Expanded options for MD5 hash mechanisms in ZnDigestAuthenticator.
Added test method to ZnDigestAuthenticator to answer if MD5 support is available.' id '7b1d4f73-febb-4e32-86ca-8af7b3e610e5' date '10/01/2010' time '05:44:52' author 'MattKennedy' ancestors ((name 'Zinc-HTTP-svc.59' message 'OK, even more fixes after testing in Squeak 4.1 (MD5 is still missing though)' id '44a8cccf-1470-4fa8-9e15-344cba9e6411' date '10/01/2010' time '09:56:22' author 'svc' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.58' message 'OK, some more fixes after testing in Pharo 1.2' id '93d5f2cc-330a-4931-8163-599c21f80253' date '10/01/2010' time '21:44:24' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.57' message 'reimplemented ZnUserAgentSettings class>>#platform to deal with Pharo 1.1/1.2 portability issues (introduction of OSPlatform class);
modified ZnUserAgent>>#prepareHeaders:for: to use ZnHeaders>>#addAll:
' id 'bf8f9509-4a6c-4fed-9575-3202a9627d2e' date '10/01/2010' time '21:37:10' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-MattKennedy.56' message 'Added .errorHandler to ZnUserAgent' id 'ae9aa81f-770d-40cc-859d-d1316d3a12cd' date '10/01/2010' time '14:44:47' author 'MattKennedy' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.55' message 'merging' id '3cae8f4c-33ca-44ab-85e9-c7e5e8f6a84d' date '10/01/2010' time '09:43:18' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.54' message 'introducing ZnMimePart (has maybe to much implementation in common with ZnMessage, but in use they are less similar)
' id '8888796c-9303-408d-b6c0-30310fee5ab6' date '10/01/2010' time '09:41:57' author 'SvenVanCaekenberghe' ancestors () stepChildren ())(name 'Zinc-HTTP-MattKennedy.54' message 'Modifed ZnResponse so that the WWW-Authenticate response is no longer hard coded.
ZnBasicAuthenticator supports optional custom realm settings.
Added ZnDigestAuthenticator.' id '88223dbc-9831-4746-a680-f2eff6720e76' date '09/30/2010' time '17:36:25' author 'MattKennedy' ancestors ((name 'Zinc-HTTP-MattKennedy.53' message 'Removed trimBoth: sender from ZnDigestCredential>>parseAuthRequest:' id '5d0dfdae-b927-4634-a4a9-272e3d78aeb0' date '09/30/2010' time '12:28:40' author 'MattKennedy' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.52' message 'changed the required protocol for a ZnServer delegate from #value: to #handleRequest:
' id '6f652f18-f202-4ce8-b139-a47c687d36f1' date '09/30/2010' time '18:15:10' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.51' message 'changed ZnServer authenticator protocol from #value:value to #authenticateRequest:do:
introduction of ZnBasicAuthenticator class as a first plugin
' id '49469b61-5c90-45cb-8253-5483f43f79e1' date '09/30/2010' time '16:35:01' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-LukasRenggli.50' message '- removed the sender of #trimBoth: that removes $" before and after the basic-autentication string, as #trimBoth: is not part of PharoCore
- this fixes 2 breaking tests, but maybe introduces a regression on certain we browsers?' id 'a991e99b-b085-4cf0-ae5a-1d9addb5d83a' date '09/30/2010' time '08:33:20' author 'lr' ancestors ((name 'Zinc-HTTP-MattKennedy.49' message 'ZnDigestCredential now implements working Digest authentication support for client requests in ZnUserAgent.' id '4fb9842a-9138-4567-b15a-0136611d6ce8' date '09/29/2010' time '17:18:28' author 'MattKennedy' ancestors ((name 'Zinc-HTTP-MattKennedy.48' message 'Handling authentication credentials for ZnUserAgent with ZnCredentials and ZnUserAgentSession implemented, currently with support only for Basic authentication.' id '40c5bd87-c830-4b93-97d7-4f6b4a52b0de' date '09/29/2010' time '00:57:02' author 'MattKennedy' ancestors ((name 'Zinc-HTTP-MattKennedy.47' message 'Added ZnCredential and subclasses for Basic and Digest auth. Only stubs right now, next step to flesh out with test cases.
Updated ZnUserAgentSession for storing credential objects.
Added ZnMagicCookieJar>>cookieAt:forUrl: and ZnUserAgent>>cookieAt:' id '45c35930-c60a-48b8-b2b5-68a29e905ca4' date '09/28/2010' time '16:38:54' author 'MattKennedy' ancestors ((name 'Zinc-HTTP-MattKennedy.46' message 'Added ZnMagicCookie, ZnMagicCookieJar, ZnUserAgentSession. ZnUserAgent now accepts and sends cookies.
Modified ZnHeaders>>readOneHeaderFrom: to add items with ZnHeaders>>at:add: instead of ZnHeaders>>at:put: to handle requests and responses with multiple Set-Cookie or Cookie headers.' id 'baf796cb-154c-454c-9ebd-c4f2d412a64c' date '09/28/2010' time '13:56:36' author 'MattKennedy' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.45' message 'added ZnMessage>>#contents and ZnResponse>>#isSuccess;
added ZnStreamingEntity>>#contents (non-repeatable);
extended ZnFixedClient (added #isConnected and reimplemented #executeRequest error handling logic)' id '3831115e-48cf-466f-81e0-752247f6aefc' date '09/28/2010' time '14:17:57' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.44' message 'Merging Matt Kenedy''s code:
Added ZnUserAgent and ZnUserAgentSettings' id '527f4690-0c3e-4e62-8482-de4bb3f76b0b' date '09/27/2010' time '23:36:10' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.43' message 'introduced ZnExperimentalServer to test server side connection keepalive/reuse;
added ZnMessage>>#isConnectionClose;
refactored ZnFixedClient with #preProcessRequest and #postProcessResponse (which handles server side connection close now)
' id 'bc799fbc-48ab-45c3-8cde-38fd1dd418bb' date '09/27/2010' time '23:25:06' author 'SvenVanCaekenberghe' ancestors () stepChildren ())(name 'Zinc-HTTP-MattKennedy.43' message 'Added ZnUserAgent and ZnUserAgentSettings.' id '217daf1b-07d3-4c49-bdf1-7b00262c5f70' date '09/27/2010' time '15:10:26' author 'MattKennedy' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.42' message 'extended ZnEntityReader with the ability to read Gzip content encoded entities;
added ZnRequest>>#setAcceptEncodingGzip;
we now use socket streams in binary mode by default (see ZnUtils>>#socketStreamToUrl:);
we''re now using ZnLineReader to read CRLF delimited lines (handles bivalent access);
ZnEntities set content length in #readFrom: when reading upToEnd;
refactored ZnLimitedReadStream to track position explicitely (added #position);
added #position to ZnChunkedReadStream;
fixed ZnMessage>>#readStreamingFrom:
' id 'c60def04-29e9-4bb0-95d2-dad31539c4cc' date '09/27/2010' time '19:55:43' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.41' message 'extended ZnEntityReader with ability to read chunked transfer encoded content (see #readEntity);
created helper class ZnChunkedReadStream wrapping a chunked transfer encoded stream, hiding the encoding from clients;
all ZnEntities'' #readFrom: methods now work either with defined #contentLength (as before) or with undetermined #contentLength (doing #upToEnd);
added ZnHeaders>>#keysAndValuesDo:
' id '3a023d61-98e4-4eaa-9c60-e7826ce05fbf' date '09/26/2010' time '20:10:27' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.40' message 'introduction of ZnEntityReader helper object;
added some more operations to ZnFixedClient;
some API cleanup' id 'c076371b-1e6b-48ad-ad3e-78a678785484' date '09/25/2010' time '23:16:35' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.39' message 'first version of ZnFixedClient for talking to one host:port combination and trying for connection reuse;
added ZnMimeType>>#applicationJson (as non-binary!)
' id '784a8e5d-f9ef-4b96-838c-86d330aeec7b' date '09/25/2010' time '21:14:28' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.38' message 'replace #crlf with nextPutAll: String crlf to improve stream compatibility;
added #url accessor to ZnRequest (alias to #uri)' id '12cb56a0-a124-4e23-bded-52ad0bbecf87' date '09/21/2010' time '22:06:40' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.37' message 'try to use MIMEDocument without referencing MIMEType' id '5b008ad4-0e12-4218-995a-635d765fa653' date '09/21/2010' time '16:15:01' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.36' message 'introduced ZnUtils>>#ipAddressToString:' id '6f149459-e4bf-4eca-a3c6-a20ede32ac0a' date '09/21/2010' time '16:01:10' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.35' message 'implemented a complete set of ZnClient methods (GET,PUT,POST,DELETE,HEAD) with basic authentication variants;
introduced ZnClient>>#executeOneShot:on:;
refactored ZnMessage and subclasses reading (#readFrom: #readStreamingFrom: #readHeaderFrom:) to support asymmetric head requests and remove code duplication;
cleaned up ZnMessage and ZnHeaders #contentType and #contentLength access
improved some ZnHeaders methods to better deal with missing headers dictionary (lazy initialization);
added ZnServer>>#printOn:;
renamed some older classes' id '71e40771-0e1a-477c-b999-94ac5537668c' date '09/21/2010' time '12:59:31' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.34' message 'added #printOn: to ZnStatusLine, ZnRequestLine, ZnHeaders and ZnEntity;
some bug fixes and added robustness' id '58cafaad-d422-458a-9f26-57b801613e83' date '09/20/2010' time '19:40:27' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.33' message 'Renamed all categories with old code to Zinc-HTTP-Old-*' id '56666b16-26a2-4785-a7b0-69934e9f5a1b' date '09/19/2010' time '18:44:52' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.32' message 'various changes suggested by Code critics' id 'b9a81c31-f509-4443-b5ab-5d0980ba1f1b' date '09/17/2010' time '20:54:02' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.31' message 'first working implementation of ZnMonticelloServerDelegate;
added ZnResponse #setLocation and #setWWWAuthenticate;
added ZnResponse convencience instance creation methods #created: and #badRequest:;
ZnResponse convencience instance creation methods now pass their uri through ZnUtils>>#urlPathQueryFragmentOf:;
ZnUtils>>#httpDate: now does an #asUTC conversion;
added ZnUtils>>#streamFrom:to:size: fast stream copier;
added ZnUtils>>isSlash:' id 'e3e6a58f-52f3-4474-b700-132198106c9d' date '09/17/2010' time '15:45:38' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.30' message '1st working version of ZnStaticFileServerDelegate (on 1 directory with 1 prefix);
extended ZnResponse with #notFound: and #redirect instance creation methods;
added ZnUtils>>#httpDate: (and implemented #httpDate using it);
extended ZnMimeType with MimeTypes and ExtensionsMap class variables for faster constant access and file extension to mime type mapping;
ZnStreamingEntity>>#writeOn: now closes its stream after using it
' id '6074fdf3-5027-46f8-9e5b-9629d0ef5074' date '09/16/2010' time '20:50:45' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.29' message 'ZnStatusLine and ZnRequestLine now handle their own crlf line ending (see #readFrom: and #writeTo:);
Experimental introduction of ZnStreamingEntity (see #readStreamingFrom:)
ZnLimitedReadStream is now used in ZnApplicationFormUrlEncodedEntity>>#readFrom:
' id '4fae956f-e1d3-4307-90d0-eae856459f18' date '09/15/2010' time '20:24:23' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.28' message 'fixed ZnMimeType parser dependency on Grease #trimBoth;
added serverSocket as inst var to ZnServer' id 'd09f0956-371c-442a-aeab-0eed4d433a3e' date '09/15/2010' time '09:59:36' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.27' message 'fixing ZnHTTPSocketFacade>>#httpPut:to:user:passwd: semantics;
added ZnMessage #head: #post and #put;
added ZnHeaders>>#removeKey:[ifAbsent:] ;
allowed for missing content-type when reading entities;
enforcing content-length header to be string in #acceptEntityDescription:
' id 'cb4bffd1-218f-4103-8679-b81e5e51dc7a' date '09/14/2010' time '15:15:59' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.26' message 'ZnHTTPSocketFacade:
adjusting semantics;
implemented some missing methods;
some refactoring (#execute:on)
' id '541ca458-55fa-404a-a317-9a5801a6322b' date '09/14/2010' time '13:27:39' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.25' message 'some code reformatting in ZnHTTPSocketFacade;
added more strings to ZnConstants;
ZnServer now returns a nice default welcome page (the echo handler now only runs when the path starts with ''echo'')' id '7c2531d4-acde-449a-8c98-ed0d3affe342' date '09/14/2010' time '11:07:31' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.24' message 'first complete implementation of (new) ZnHTTPSocketFacade (incomplete tests);
added #contents to ZnEntity;
added #addAll: and #withAll to ZnHeaders and ZnApplicationFormUrlEncodedEntity;
store remoteAddress as dotted IP string instead of printed byte array' id 'd30509ad-79a7-4410-9507-0a34a6639fc2' date '09/13/2010' time '22:31:18' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.23' message 'reorganized categories (Zinc-HTTP-New-Core, Zinc-HTTP-New-Client-Server, Zinc-HTTP-New-Support);
started new implementation of ZnHTTPSocketFacade (renamed old one to ZnOldHTTPSocketFacade) with image access methods;
refactored image access methods in ZnClient (introduced ZnClient>>#getImageOfType:usingParser:fromUrl:);
changed ZnEntity>>#contentType: to only allow assigning mime types compatible with an entity''s designated mime type (if any)
' id 'eb6683ed-f103-46af-aa28-4d1c0d6689f3' date '09/13/2010' time '16:17:53' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.22' message 'added support for server side basic authentication' id '55c0e0fa-9e16-428f-800a-0ed87537fb45' date '09/13/2010' time '13:54:44' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.21' message 'added support for client side basic authentication' id 'f61af145-d04a-4c18-b8a9-4dc9c904c636' date '09/12/2010' time '20:34:56' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.20' message 'added simple http client proxy support using the system settings (untested though) ' id 'bae5ca73-9f54-4b2b-bfa2-3eb66228c7e1' date '09/12/2010' time '11:55:51' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.19' message 'refactored ZnEntity hierarchy with new instance creation framework;
implementation of ZnApplicationFormUrlEncodedEntity;
created mock ZnMultiPartFormDataEntity;
added ZnUtils>>#parseQueryFrom:
ZnMimeType>>#printOn: now simply prints the RFC string
' id '10746c52-3fcb-4b36-895f-a5fc34b8dd04' date '09/12/2010' time '11:28:17' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.18' message 'added header name normalization;
added optional multi-valued header values;
added optional header value merging' id '1e65b930-7310-4677-b5cf-b779a38bf759' date '09/10/2010' time '21:06:19' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-pmm.17' message 'use
aStream print: anObject
instead of
aStream nextPutAll: anObject printString' id '4b6b2702-4ec3-4314-b712-ccc1d9da802c' date '09/10/2010' time '12:40:03' author 'pmm' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.16' message 'replaced usage of #displayString with #printString;
renamed ZnMimeType>>#greaseString to #asRFCString' id '10c584eb-c842-4aa1-8ac7-60d2ca426265' date '09/10/2010' time '12:22:15' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.15' message 'added #at:ifAbsent: to ZnHeaders;
added #headersDo: to ZnMessage;
added #isRunning to ZnServer;
ZnServer now sets a (ZnConstants remoteAddressHeader) header with the client''s remote IP address;
extended ZnServer with a general purpose delegate mechanism
' id 'b3fa69a2-3f1a-4ea5-94db-47447fcab5a6' date '09/09/2010' time '20:53:14' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.14' message '1st primitive but working ZnServer' id '996b6601-b412-48ae-a64c-7dc78dac058d' date '09/08/2010' time '11:06:03' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.13' message 'ZnClient #get: and #getJpeg: now work for normal situations' id 'cbbe9f1e-39a9-4b3a-a6f1-e08e11c4c5cf' date '09/07/2010' time '20:04:01' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.12' message 'Started the Zinc-HTTP-New implementation;
not much to see yet' id 'de2cead7-a4dd-4a3c-ac68-69e4cef2964d' date '09/06/2010' time '23:05:54' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.11' message 'some more recategorizations' id '7b109f45-7460-4edc-9983-3a201efa0815' date '09/05/2010' time '11:10:46' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.10' message 'refactoring for a cleaner #executeMethod: introducing #allHeadersFor:on: #generateRequestOn: #sendContentTo: removed #noContentLength: renamed #MIMEDocument to #getResponseAsMIMEDocument ;
renamed some post method classes' id '0e5bf523-5aa9-40f3-be02-17abc7a18d6b' date '09/03/2010' time '23:29:04' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.9' message 'forgot one usage of #page' id 'd56be428-7eed-4712-ab04-2094e3808c3a' date '09/02/2010' time '20:16:21' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.8' message 'fixed wrong header case in #mimeTypeHeaderOn: ;
refactored the extension protocol on HierarchicalUrl using new method names (using the concept of path directory and adding the String suffix for conversion methods)' id '28ab58db-ba2b-4db5-a473-2cd613cca92b' date '09/02/2010' time '20:10:41' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.7' message 'using code critics to remove some dead code and obvious problems (but may issues are left open);
more method categorizations' id '1c64f23b-0156-41d4-bc9b-72d9c52d0227' date '09/02/2010' time '16:36:45' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.6' message 'did an initial method categorization in the core classes ZnHTTPClient and ZnHTTMethod (and its subclasses);
removed one no-op #initialize' id '45e8c7be-7a6e-4aa3-8c8d-6f30c0e26bf5' date '09/02/2010' time '12:41:10' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.5' message 'introduced ZnConnectNew, a plugin replacement for ZnConnection.The old code was using its own SocketStream, now we''re using the system supplied SocketStream. Some backwards compatibility protocol was added, could be cleaned up later. It is probably also possible to use SocketStream directly;
added ZnHTTPClientFacade with 2 get methods' id '2d453fab-9a2f-4743-8ce5-d7879bbc14a1' date '09/02/2010' time '11:47:13' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.4' message 'reduced some dependencies on extensions' id 'e3317890-f543-461c-a2de-d32ba48b2af0' date '09/01/2010' time '21:02:15' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.3' message 'Some cleanup of ZnHTTPSocketFacade''s class methods' id '58105dc7-a59a-4e9b-add7-1ae71a212e3c' date '09/01/2010' time '19:59:08' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.2' message 'Renamed HC HTTP Client to Zinc HTTP Components;
Renamed all classes to use Zn namespace prefix;
Renamed all extension protocols to *zinc-http;
Renamed Facade to HTTPSocketFacade' id '42475f7f-909f-4292-90d2-78b2fe48c9a2' date '09/01/2010' time '19:13:12' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.1' message 'Renamed HC HTTP Client to Zinc HTTP Components;
Renamed all classes to use Zn namespace prefix;
Renamed all extension protocols to *zinc-http;
Renamed Facade to HTTPSocketFacade' id '4b0032ae-27eb-462c-b0db-29800c2cc647' date '09/01/2010' time '17:29:24' author 'SvenVanCaekenberghe' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())(name 'Zinc-HTTP-SvenVanCaekenberghe.242' message 'added ZnEntityTooLarge to the exceptions silently catched by ZnMultiThreadedServer>>#readRequestSafely:' id '8c18da8d-4ec0-40a7-92ea-01e7c09b9929' date '02/01/2012' time '11:26:10' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.241' message 'simplified and optimized implementation of ZnChunkedReadStream' id '36d5243f-deb3-4689-9315-d3d4c5393da7' date '01/31/2012' time '21:21:00' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.240' message 'added some speed improvements to the implementation of ZnLimitedReadStream' id '24874b38-2c00-4d0c-b3b3-cec7c4f91d71' date '01/31/2012' time '21:08:09' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.239' message 'fixed the implementation of ZnLimitedReadStream to honor EOF on the underlying stream' id '16a06aa4-34ec-4c81-87ca-701823088ac2' date '01/31/2012' time '20:55:24' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.238' message 'introduction of a resource limit to the size of entities read from a stream;
added ZnConstants class>>#maximumEntitySize[:]
added ZnEntityTooLarge resumable exception
added ZnUtils class>>#readUpToEnd:limit:
#readFrom: logic of Zn[String|ByteArray|MultiPartFormData]Entity now take the limit into account
extended ZnChunkedReadStream and ZnLimitedReadStream with #readInto:startingAt:count: as a first step to improve their performance' id '4af222aa-e05c-458b-a1ce-2d62b2d23d2d' date '01/31/2012' time '14:02:43' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.237' message 'changed ZnMimePart class>>#fieldName:value: to use ZnEntity>>#with: on the value so that Strings become ZnStringEntities and others become ZnByteArrayEntities;
changed ZnUrl>>#queryAt: to signal a KeyNotFound error when there is no query' id '37e466f7-592f-4f15-a016-f2689b56f3fb' date '01/29/2012' time '19:43:08' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.236' message 'added ZnUrl>>#retrieveContents convenience method' id 'b5d081c0-6b4f-40a2-8e4c-5b58c4a02de5' date '01/24/2012' time '11:59:43' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.235' message 'now using #trimBoth instead of #withBlanksTrimmed' id 'bc327259-a3d3-4829-a24a-504b08ab8cbf' date '01/08/2012' time '14:20:02' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.234' message 'changed the implementation of ZnHeaders to use ZnMultiValueDictionary;
ZnLineReader now uses ZnConstants class>>#maximumLineLength (4096) as default for signaling a ZnLineTooLong exception;
added a limit option to ZnMultiValueDictionary that defaults to ZnConstants class>>#maximumNumberOfDictionaryEntries (256) for signaling a ZnTooManyDictionaryEntries exception;
added new ZnTooManyDictionaryEntries error;
changed parent of ZnTooManyRedirects from Exception to Error and added a #isResumable true method;
extended ZnMultiThreadedServer>>#readRequestSafely: to also catch ZnTooManyDictionaryEntries' id 'add34728-015e-46b6-9aeb-eda8f63e1f03' date '01/03/2012' time '15:42:40' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.233' message 'Rewrote ZnServer and subclasses''s class methods #startDefaultOn: and #defaultOn: to treat the default instance like a singleton by reusing/restarting/reconfiguring existing instances; expanded comments;
Changed the implementation of ZnServer>>#start to automagically register the default instance;
Changed the implementation of ZnServer>>#stop to always unregister;
added ZnServer>>#stop: with an option to control the unregistering so that it does not happen when shutting down the image
' id '8dd541c9-2890-4a8f-b5cb-d6ac2e9341af' date '12/22/2011' time '12:54:05' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.232' message 'changed ZnClient>>#executeWithTimeout to use an explicit and selective #exceptionSetForIfFail so that only network, http parsing, http unsuccessful and unexpected content type exceptions trigger the #ifFailBlock;
this fixes the problem where HTTPProgress exceptions triggered the ifFail block;
thx Camillo Bruni ' id '3ca78fe3-4355-46ee-9ba3-5e0f540b9ec0' date '12/20/2011' time '14:24:53' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.231' message 'Extended the ZnHttpUnsuccessful and ZnUnexpectedContentType exceptions to contain the repsonse respectively the two content types so as to produce better error messages (thx Camillo Bruni for suggesting this)' id 'c94e86a8-3b1a-4c26-bae5-3aebc90764b2' date '12/20/2011' time '13:26:08' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.230' message 'Changed ZnClient>>#timeout to use the global ZnNetworkingUtils defaultSocketStreamTimeout as default' id 'fb0c7c07-a6dd-4105-bdd4-a65860b4b452' date '12/14/2011' time '14:07:42' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.229' message 'expanded the ZnUrl class comment' id 'b239edd4-c432-4139-a71a-d27618beef91' date '12/14/2011' time '13:45:28' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.228' message 'added ZnUrl>>#queryKeys' id 'f979e877-6dfa-4167-b159-ec322a629c98' date '12/13/2011' time '14:21:02' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.227' message 'added the WebDAV methods to ZnConstants class>>#knownHTTPMethods;
added convenience constructor #xml: to ZnStringEntity and ZnEntity' id 'd8262a06-7f5b-4a88-9fdb-cc4bb05ed422' date '12/11/2011' time '19:47:11' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.226' message 'changed ZnMimeType such that the ''constants'' returned by the methods in the class side convenience protocol can now be freely modified by returning a copy;
implemented ZnMimeType>>#postCopy;
ZnMimeType>>#parameters will now lazy initialize to a SmallDictionary instead of a regular Dictionary' id '52cc1692-4d4f-4c43-813c-21b61e386eaf' date '12/06/2011' time '20:56:22' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-NorbertHartl.225' message 'changed ZnApplicationFormUrlEncodedEntity to check encoding of contentType. If an encoding is present to presentation is written using the specified encoding' id '18a28639-5e95-4594-937c-268df69987ec' date '12/06/2011' time '18:30:33' author 'NorbertHartl' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.224' message 'added ZnLimitedReadStream>>#peek' id '4f9dffc5-3af2-4adc-a0c9-0bc22d1de76e' date '12/04/2011' time '20:10:11' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.223' message 'added missing ZnChunkedReadStream>>#next:into:
that was used by ZnEntityReader when reading a ZnByteArrayEntity
fix to Pharo issue 5053 (http://code.google.com/p/pharo/issues/detail?id=5053)
thanks Laurent Laffont for reporting' id '19ce4497-786a-46a7-bd6c-55fa682dba56' date '12/03/2011' time '17:51:17' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.222' message 'small fix to ZnEntityReader>>#readEntityFromStream
added an extra guard copying extraHeaders from a chunked stream since these are missing when reading a streaming entity' id 'a1b1d190-4690-4cc0-b9b5-eab77cc5153b' date '12/01/2011' time '10:40:29' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.221' message 'added new #followsRedirects boolean option to ZnClient
because setting #maxNumberOfRedirects to 0 did not work well
for an example see the ZnClientTests>>#testRedirectDontFollow
Thx Jan van de Sandt for reporting this' id '4df9982e-63e1-49ea-bfb0-2f9cb43f6f0b' date '11/23/2011' time '17:30:09' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.220' message 'added auto initialization of ZnNetworkingUtils>>#secureSocketStreamClass' id '147d6c42-b509-40e4-abb0-7c804d5df01d' date '11/13/2011' time '21:46:06' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.219' message 'reworked ZnNetworkingUtils to take over most if not all functionality of ZnZodiacNetworkingUtils so that HTTPS should work out of the box when Zodiac is loaded;
small refactoring to ZnServer hierarchy: use #socketStreamOn: consistently' id 'f0eb7dbf-ae05-4daa-87da-84feb09ba23a' date '11/10/2011' time '14:09:21' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.218' message 'renamed ZnNeoClient -> ZnClient; added a better class comment' id '8c789ded-a882-4491-bdf9-e9ad45af69f2' date '11/08/2011' time '22:33:34' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.217' message 'renamed ZnClient -> ZnClientOld' id 'df12536b-7fa7-4e00-84eb-6de051894eb6' date '11/08/2011' time '22:14:35' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-SvenVanCaekenberghe.216' message 'documented all public methods of ZnNeoClient;
minor fixes:
- #close sets state to nil
- #contents return the stream when streaming
- #headerAddAll: and #headerAt:add: now do a #resetRequestIfNeeded' id 'bfb5ff74-76f9-4689-a976-95ef34260531' date '11/08/2011' time '21:10:32' author 'SvenVanCaekenberghe' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())(name 'Zinc-HTTP-SvenVanCaekenberghe.283' message 'added an efficiency improvement to ZnMultiPartFormDataEntity>>#parse:boundary:
added convenience protocol to ZnUrl:
- #withPathSegment[s]: #/
- #withQuery: #? #&' id '51351ae8-99a9-44cc-856a-976fcd55e2cf' date '07/09/2012' time '04:38:29' author 'SvenVanCaekenberghe' ancestors ((name 'Zinc-HTTP-MarcusDenker.282' message 'Issue 6259: DataStream is still there
http://code.google.com/p/pharo/issues/detail?id=6259
Issue 6255: Zinc Pharo Conference update with FileSystem support
http://code.google.com/p/pharo/issues/detail?id=6255
Issue 6223: FileLocator and FileRerernce have extension from File Package
http://code.google.com/p/pharo/issues/detail?id=6223' id '03911f2b-c422-4142-bedf-617d90674243' date '07/04/2012' time '04:16:25' author 'MarcusDenker' ancestors () stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())) stepChildren ())
\ No newline at end of file