diff --git a/repository/Seaside-Canvas.package/WAAnchorTag.class/instance/safeToStream.st b/repository/Seaside-Canvas.package/WAAnchorTag.class/instance/safeToStream.st new file mode 100644 index 000000000..cffc32c09 --- /dev/null +++ b/repository/Seaside-Canvas.package/WAAnchorTag.class/instance/safeToStream.st @@ -0,0 +1,5 @@ +public +safeToStream + "Will stream this response" + + self url addField: '_f' \ No newline at end of file diff --git a/repository/Seaside-Core.package/.filetree b/repository/Seaside-Core.package/.filetree index 57a679737..8998102c2 100644 --- a/repository/Seaside-Core.package/.filetree +++ b/repository/Seaside-Core.package/.filetree @@ -1,5 +1,4 @@ { - "separateMethodMetaAndSource" : false, "noMethodMetaData" : true, - "useCypressPropertiesFile" : true -} \ No newline at end of file + "separateMethodMetaAndSource" : false, + "useCypressPropertiesFile" : true } diff --git a/repository/Seaside-Core.package/WARequest.class/instance/hasQueryField..st b/repository/Seaside-Core.package/WARequest.class/instance/hasQueryField..st new file mode 100644 index 000000000..970d7a2e0 --- /dev/null +++ b/repository/Seaside-Core.package/WARequest.class/instance/hasQueryField..st @@ -0,0 +1,5 @@ +testing +hasQueryField: aString + + ^ (self queryFields includesKey: aString) or: [ + self postFields includesKey: aString ] \ No newline at end of file diff --git a/repository/Seaside-Core.package/WARequest.class/instance/isSafeToStream.st b/repository/Seaside-Core.package/WARequest.class/instance/isSafeToStream.st new file mode 100644 index 000000000..fa432e44d --- /dev/null +++ b/repository/Seaside-Core.package/WARequest.class/instance/isSafeToStream.st @@ -0,0 +1,4 @@ +testing +isSafeToStream + + ^ self hasQueryField: '_f' \ No newline at end of file diff --git a/repository/Seaside-Core.package/WAResponse.class/instance/writeStatusOn..st b/repository/Seaside-Core.package/WAResponse.class/instance/writeStatusOn..st index 1b094f358..bbd3fe02f 100644 --- a/repository/Seaside-Core.package/WAResponse.class/instance/writeStatusOn..st +++ b/repository/Seaside-Core.package/WAResponse.class/instance/writeStatusOn..st @@ -1,11 +1,14 @@ writing -writeStatusOn: aStream - aStream nextPutAll: self httpVersion. - aStream - nextPut: $ ; - nextPutAll: self status greaseString. - self message isNil ifFalse: [ - aStream - nextPut: $ ; - nextPutAll: self message ]. - aStream crlf \ No newline at end of file +writeStatusOn: aStream + "32 = ascii value for Character space" + + aStream nextPutAll: self httpVersion. + aStream + space; + nextPutAll: self status greaseString. + self message isNil + ifFalse: [ + aStream + space; + nextPutAll: self message ]. + aStream crlf \ No newline at end of file diff --git a/repository/Seaside-Core.package/WAResponse.class/properties.json b/repository/Seaside-Core.package/WAResponse.class/properties.json index da08b29e9..b2280316d 100644 --- a/repository/Seaside-Core.package/WAResponse.class/properties.json +++ b/repository/Seaside-Core.package/WAResponse.class/properties.json @@ -1,18 +1,17 @@ { - "commentStamp" : "pmm 2/18/2011 23:07", - "super" : "WAObject", "category" : "Seaside-Core-HTTP", - "classinstvars" : [ ], - "pools" : [ ], + "classinstvars" : [ + ], "classvars" : [ - "StatusMessages" - ], + "StatusMessages" ], + "commentStamp" : "pmm 2/18/2011 23:07", "instvars" : [ "headers", "cookies", "status", - "message" - ], + "message" ], "name" : "WAResponse", - "type" : "normal" -} \ No newline at end of file + "pools" : [ + ], + "super" : "WAObject", + "type" : "normal" } diff --git a/repository/Seaside-Core.package/monticello.meta/categories.st b/repository/Seaside-Core.package/monticello.meta/categories.st index c60fc8765..600f22472 100644 --- a/repository/Seaside-Core.package/monticello.meta/categories.st +++ b/repository/Seaside-Core.package/monticello.meta/categories.st @@ -1,4 +1,3 @@ -SystemOrganization addCategory: #'Seaside-Core'! SystemOrganization addCategory: #'Seaside-Core-Backtracking'! SystemOrganization addCategory: #'Seaside-Core-Base'! SystemOrganization addCategory: #'Seaside-Core-Cache'! @@ -10,7 +9,6 @@ SystemOrganization addCategory: #'Seaside-Core-Exceptions'! SystemOrganization addCategory: #'Seaside-Core-Filter'! SystemOrganization addCategory: #'Seaside-Core-HTTP'! SystemOrganization addCategory: #'Seaside-Core-Libraries'! -SystemOrganization addCategory: #'Seaside-Core-Manifest'! SystemOrganization addCategory: #'Seaside-Core-Rendering'! SystemOrganization addCategory: #'Seaside-Core-RequestHandling'! SystemOrganization addCategory: #'Seaside-Core-Server'! diff --git a/repository/Seaside-GemStone-Adaptors-Zinc.package/.filetree b/repository/Seaside-GemStone-Adaptors-Zinc.package/.filetree index 57a679737..8998102c2 100644 --- a/repository/Seaside-GemStone-Adaptors-Zinc.package/.filetree +++ b/repository/Seaside-GemStone-Adaptors-Zinc.package/.filetree @@ -1,5 +1,4 @@ { - "separateMethodMetaAndSource" : false, "noMethodMetaData" : true, - "useCypressPropertiesFile" : true -} \ No newline at end of file + "separateMethodMetaAndSource" : false, + "useCypressPropertiesFile" : true } diff --git a/repository/Seaside-GemStone-Adaptors-Zinc.package/WAGsZincAdaptor.class/instance/process..st b/repository/Seaside-GemStone-Adaptors-Zinc.package/WAGsZincAdaptor.class/instance/process..st index 7b6d5a189..85b6202a7 100644 --- a/repository/Seaside-GemStone-Adaptors-Zinc.package/WAGsZincAdaptor.class/instance/process..st +++ b/repository/Seaside-GemStone-Adaptors-Zinc.package/WAGsZincAdaptor.class/instance/process..st @@ -1,7 +1,9 @@ as yet unclassified process: aNativeRequest - - ^GRPlatform current - seasideProcessRequest: aNativeRequest - adaptor: self - resultBlock: [:aRequest | super process: aRequest ] \ No newline at end of file + aNativeRequest isSafeToStream + ifTrue: [ ^ self processStreamingRequest: aNativeRequest ] + ifFalse: [ + ^ GRPlatform current + seasideProcessRequest: aNativeRequest + adaptor: self + resultBlock: [ :aRequest | self processBufferedRequest: aRequest ] ] \ No newline at end of file diff --git a/repository/Seaside-GemStone-Adaptors-Zinc.package/WAGsZincAdaptor.class/properties.json b/repository/Seaside-GemStone-Adaptors-Zinc.package/WAGsZincAdaptor.class/properties.json index 40d7d8c53..8eab205c2 100644 --- a/repository/Seaside-GemStone-Adaptors-Zinc.package/WAGsZincAdaptor.class/properties.json +++ b/repository/Seaside-GemStone-Adaptors-Zinc.package/WAGsZincAdaptor.class/properties.json @@ -1,11 +1,14 @@ { - "commentStamp" : "", - "super" : "ZnZincServerAdaptor", "category" : "Seaside-GemStone-Adaptors-Zinc", - "classinstvars" : [ ], - "pools" : [ ], - "classvars" : [ ], - "instvars" : [ ], + "classinstvars" : [ + ], + "classvars" : [ + ], + "commentStamp" : "", + "instvars" : [ + ], "name" : "WAGsZincAdaptor", - "type" : "normal" -} \ No newline at end of file + "pools" : [ + ], + "super" : "ZnZincServerAdaptor", + "type" : "normal" } diff --git a/repository/Seaside-Session.package/.filetree b/repository/Seaside-Session.package/.filetree index 57a679737..8998102c2 100644 --- a/repository/Seaside-Session.package/.filetree +++ b/repository/Seaside-Session.package/.filetree @@ -1,5 +1,4 @@ { - "separateMethodMetaAndSource" : false, "noMethodMetaData" : true, - "useCypressPropertiesFile" : true -} \ No newline at end of file + "separateMethodMetaAndSource" : false, + "useCypressPropertiesFile" : true } diff --git a/repository/Seaside-Session.package/WASession.class/instance/actionUrlForKey..st b/repository/Seaside-Session.package/WASession.class/instance/actionUrlForKey..st index 9e7f51d7f..2e5ce841d 100644 --- a/repository/Seaside-Session.package/WASession.class/instance/actionUrlForKey..st +++ b/repository/Seaside-Session.package/WASession.class/instance/actionUrlForKey..st @@ -1,5 +1,8 @@ accessing actionUrlForKey: aString - ^ self url - addField: self actionField value: aString; - yourself \ No newline at end of file + | url | + url := self url. + url addField: self actionField value: aString. + self requestContext request isSafeToStream + ifTrue: [ url addField: '_f' ]. + ^ url \ No newline at end of file diff --git a/repository/Seaside-Session.package/WASession.class/properties.json b/repository/Seaside-Session.package/WASession.class/properties.json index 9f6d02fc0..9646fcce5 100644 --- a/repository/Seaside-Session.package/WASession.class/properties.json +++ b/repository/Seaside-Session.package/WASession.class/properties.json @@ -1,16 +1,17 @@ { - "commentStamp" : "pmm 2/18/2012 11:03", - "super" : "WARequestHandler", "category" : "Seaside-Session-Base", - "classinstvars" : [ ], - "pools" : [ ], - "classvars" : [ ], + "classinstvars" : [ + ], + "classvars" : [ + ], + "commentStamp" : "pmm 2/18/2012 11:03", "instvars" : [ "continuations", "properties", "documentHandlers", - "key" - ], + "key" ], "name" : "WASession", - "type" : "normal" -} \ No newline at end of file + "pools" : [ + ], + "super" : "WARequestHandler", + "type" : "normal" } diff --git a/repository/Seaside-Session.package/monticello.meta/categories.st b/repository/Seaside-Session.package/monticello.meta/categories.st index 77d4282b8..97621211c 100644 --- a/repository/Seaside-Session.package/monticello.meta/categories.st +++ b/repository/Seaside-Session.package/monticello.meta/categories.st @@ -1,4 +1,3 @@ -SystemOrganization addCategory: #'Seaside-Session'! SystemOrganization addCategory: #'Seaside-Session-Base'! SystemOrganization addCategory: #'Seaside-Session-Continuations'! SystemOrganization addCategory: #'Seaside-Session-Filter'! diff --git a/repository/Seaside-Welcome.package/WAWelcomeGettingStarted.class/instance/renderExamplesStepOn..st b/repository/Seaside-Welcome.package/WAWelcomeGettingStarted.class/instance/renderExamplesStepOn..st index 910daf557..5cb6ca537 100644 --- a/repository/Seaside-Welcome.package/WAWelcomeGettingStarted.class/instance/renderExamplesStepOn..st +++ b/repository/Seaside-Welcome.package/WAWelcomeGettingStarted.class/instance/renderExamplesStepOn..st @@ -1,23 +1,27 @@ rendering-steps renderExamplesStepOn: html + html heading level3; with: 'Try out some examples'. - - html - unorderedList: [ - html listItem: [ - html anchor - callback: [ self show: WAWelcomeExampleCounter new ]; - with: 'Counter'. - html text: ', a simple Seaside component.' ]. - html listItem: [ - html anchor - callback: [ self show: WAWelcomeExampleMultiCounter new ]; - with: 'Multi-Counter'. - html text: ', showing how Seaside components can be re-used.' ]. - html listItem: [ - html anchor - callback: [ self show: WAWelcomeExampleFlow new ]; - with: 'Task'. - html text: ', illustrating Seaside''s innovative approach to application control flow.' ] ] \ No newline at end of file + + html unorderedList: [ + html listItem: [ + html anchor + safeToStream; + navigation; + callback: [ self show: WAWelcomeExampleCounter new ]; + with: 'Counter'. + html text: ', a simple Seaside component.' ]. + html listItem: [ + html anchor + safeToStream ; + callback: [ self show: WAWelcomeExampleMultiCounter new ]; + with: 'Multi-Counter'. + html text: ', showing how Seaside components can be re-used.' ]. + html listItem: [ + html anchor + callback: [ self show: WAWelcomeExampleFlow new ]; + with: 'Task'. + html text: + ', illustrating Seaside''s innovative approach to application control flow.' ] ] \ No newline at end of file diff --git a/repository/Zinc-Seaside.package/.filetree b/repository/Zinc-Seaside.package/.filetree index 57a679737..8998102c2 100644 --- a/repository/Zinc-Seaside.package/.filetree +++ b/repository/Zinc-Seaside.package/.filetree @@ -1,5 +1,4 @@ { - "separateMethodMetaAndSource" : false, "noMethodMetaData" : true, - "useCypressPropertiesFile" : true -} \ No newline at end of file + "separateMethodMetaAndSource" : false, + "useCypressPropertiesFile" : true } diff --git a/repository/Zinc-Seaside.package/ZdcAbstractSocketStream.extension/instance/crlf.st b/repository/Zinc-Seaside.package/ZdcAbstractSocketStream.extension/instance/crlf.st new file mode 100644 index 000000000..aedb13d0a --- /dev/null +++ b/repository/Zinc-Seaside.package/ZdcAbstractSocketStream.extension/instance/crlf.st @@ -0,0 +1,3 @@ +*Zinc-Seaside +crlf + self nextPut: 13; nextPut: 10 \ No newline at end of file diff --git a/repository/Zinc-Seaside.package/ZdcAbstractSocketStream.extension/instance/space.st b/repository/Zinc-Seaside.package/ZdcAbstractSocketStream.extension/instance/space.st new file mode 100644 index 000000000..bff114e43 --- /dev/null +++ b/repository/Zinc-Seaside.package/ZdcAbstractSocketStream.extension/instance/space.st @@ -0,0 +1,3 @@ +*Zinc-Seaside +space + self nextPut: 32 \ No newline at end of file diff --git a/repository/Zinc-Seaside.package/ZdcAbstractSocketStream.extension/properties.json b/repository/Zinc-Seaside.package/ZdcAbstractSocketStream.extension/properties.json new file mode 100644 index 000000000..6ed2f94bb --- /dev/null +++ b/repository/Zinc-Seaside.package/ZdcAbstractSocketStream.extension/properties.json @@ -0,0 +1,2 @@ +{ + "name" : "ZdcAbstractSocketStream" } diff --git a/repository/Zinc-Seaside.package/ZnDeferredResponse.class/instance/isStreamingResponse.st b/repository/Zinc-Seaside.package/ZnDeferredResponse.class/instance/isStreamingResponse.st new file mode 100644 index 000000000..b6a2c349f --- /dev/null +++ b/repository/Zinc-Seaside.package/ZnDeferredResponse.class/instance/isStreamingResponse.st @@ -0,0 +1,3 @@ +writing +isStreamingResponse + ^ true \ No newline at end of file diff --git a/repository/Zinc-Seaside.package/ZnDeferredResponse.class/properties.json b/repository/Zinc-Seaside.package/ZnDeferredResponse.class/properties.json index e6bc10fe9..2250e5f56 100644 --- a/repository/Zinc-Seaside.package/ZnDeferredResponse.class/properties.json +++ b/repository/Zinc-Seaside.package/ZnDeferredResponse.class/properties.json @@ -1,13 +1,14 @@ { - "commentStamp" : "", - "super" : "ZnResponse", "category" : "Zinc-Seaside", - "classinstvars" : [ ], - "pools" : [ ], - "classvars" : [ ], + "classinstvars" : [ + ], + "classvars" : [ + ], + "commentStamp" : "", "instvars" : [ - "onWrite" - ], + "onWrite" ], "name" : "ZnDeferredResponse", - "type" : "normal" -} \ No newline at end of file + "pools" : [ + ], + "super" : "ZnResponse", + "type" : "normal" } diff --git a/repository/Zinc-Seaside.package/ZnRequest.extension/instance/hasQueryField..st b/repository/Zinc-Seaside.package/ZnRequest.extension/instance/hasQueryField..st new file mode 100644 index 000000000..e21930531 --- /dev/null +++ b/repository/Zinc-Seaside.package/ZnRequest.extension/instance/hasQueryField..st @@ -0,0 +1,3 @@ +*Zinc-Seaside +hasQueryField: aString + ^self uri hasQueryField: aString \ No newline at end of file diff --git a/repository/Zinc-Seaside.package/ZnRequest.extension/instance/isSafeToStream.st b/repository/Zinc-Seaside.package/ZnRequest.extension/instance/isSafeToStream.st new file mode 100644 index 000000000..2f800d033 --- /dev/null +++ b/repository/Zinc-Seaside.package/ZnRequest.extension/instance/isSafeToStream.st @@ -0,0 +1,3 @@ +*Zinc-Seaside +isSafeToStream + ^self hasQueryField:'_f' \ No newline at end of file diff --git a/repository/Zinc-Seaside.package/ZnRequest.extension/instance/nativeRequest.st b/repository/Zinc-Seaside.package/ZnRequest.extension/instance/nativeRequest.st new file mode 100644 index 000000000..876e7bd45 --- /dev/null +++ b/repository/Zinc-Seaside.package/ZnRequest.extension/instance/nativeRequest.st @@ -0,0 +1,3 @@ +*Zinc-Seaside +nativeRequest + ^self \ No newline at end of file diff --git a/repository/Zinc-Seaside.package/ZnRequest.extension/properties.json b/repository/Zinc-Seaside.package/ZnRequest.extension/properties.json new file mode 100644 index 000000000..e71ed4ec5 --- /dev/null +++ b/repository/Zinc-Seaside.package/ZnRequest.extension/properties.json @@ -0,0 +1,2 @@ +{ + "name" : "ZnRequest" } diff --git a/repository/Zinc-Seaside.package/ZnResponse.extension/instance/isStreamingResponse.st b/repository/Zinc-Seaside.package/ZnResponse.extension/instance/isStreamingResponse.st new file mode 100644 index 000000000..576259833 --- /dev/null +++ b/repository/Zinc-Seaside.package/ZnResponse.extension/instance/isStreamingResponse.st @@ -0,0 +1,3 @@ +*Zinc-Seaside +isStreamingResponse + ^ false \ No newline at end of file diff --git a/repository/Zinc-Seaside.package/ZnResponse.extension/properties.json b/repository/Zinc-Seaside.package/ZnResponse.extension/properties.json new file mode 100644 index 000000000..c28f1fea3 --- /dev/null +++ b/repository/Zinc-Seaside.package/ZnResponse.extension/properties.json @@ -0,0 +1,2 @@ +{ + "name" : "ZnResponse" } diff --git a/repository/Zinc-Seaside.package/ZnSeasideRequest.class/instance/isSafeToStream.st b/repository/Zinc-Seaside.package/ZnSeasideRequest.class/instance/isSafeToStream.st new file mode 100644 index 000000000..f011dd083 --- /dev/null +++ b/repository/Zinc-Seaside.package/ZnSeasideRequest.class/instance/isSafeToStream.st @@ -0,0 +1,3 @@ +accessing +isSafeToStream + ^true \ No newline at end of file diff --git a/repository/Zinc-Seaside.package/ZnSeasideRequest.class/instance/nativeRequest..st b/repository/Zinc-Seaside.package/ZnSeasideRequest.class/instance/nativeRequest..st index 0759b5f7a..da747644b 100644 --- a/repository/Zinc-Seaside.package/ZnSeasideRequest.class/instance/nativeRequest..st +++ b/repository/Zinc-Seaside.package/ZnSeasideRequest.class/instance/nativeRequest..st @@ -1,3 +1,4 @@ accessing nativeRequest: anObject + nativeRequest := anObject \ No newline at end of file diff --git a/repository/Zinc-Seaside.package/ZnSeasideRequest.class/instance/nativeRequest.st b/repository/Zinc-Seaside.package/ZnSeasideRequest.class/instance/nativeRequest.st index 30f70fdcb..cd149aaf1 100644 --- a/repository/Zinc-Seaside.package/ZnSeasideRequest.class/instance/nativeRequest.st +++ b/repository/Zinc-Seaside.package/ZnSeasideRequest.class/instance/nativeRequest.st @@ -1,3 +1,4 @@ accessing nativeRequest + ^ nativeRequest \ No newline at end of file diff --git a/repository/Zinc-Seaside.package/ZnUrl.extension/instance/hasQueryField..st b/repository/Zinc-Seaside.package/ZnUrl.extension/instance/hasQueryField..st new file mode 100644 index 000000000..7b09fc3f2 --- /dev/null +++ b/repository/Zinc-Seaside.package/ZnUrl.extension/instance/hasQueryField..st @@ -0,0 +1,5 @@ +*Zinc-Seaside +hasQueryField: aString + + self queryAt: aString ifAbsent: [ ^ false ]. + ^ true \ No newline at end of file diff --git a/repository/Zinc-Seaside.package/ZnUrl.extension/properties.json b/repository/Zinc-Seaside.package/ZnUrl.extension/properties.json new file mode 100644 index 000000000..ed0059c92 --- /dev/null +++ b/repository/Zinc-Seaside.package/ZnUrl.extension/properties.json @@ -0,0 +1,3 @@ +{ + "name" : "ZnUrl" +} \ No newline at end of file diff --git a/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/bufferedResponseFor..st b/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/bufferedResponseFor..st new file mode 100644 index 000000000..503c48413 --- /dev/null +++ b/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/bufferedResponseFor..st @@ -0,0 +1,4 @@ +converting +bufferedResponseFor: aZnRequest + + ^ super responseFor: aZnRequest \ No newline at end of file diff --git a/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/bufferedResponseFrom..st b/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/bufferedResponseFrom..st new file mode 100644 index 000000000..d1003a4a1 --- /dev/null +++ b/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/bufferedResponseFrom..st @@ -0,0 +1,19 @@ +converting +bufferedResponseFrom: aRequestContext + | partialHeaders cookies fullHeaders seasideResponse contents entity contentType | + seasideResponse := aRequestContext response. + partialHeaders := seasideResponse headers. + cookies := seasideResponse cookies. + fullHeaders := ZnHeaders defaultResponseHeaders. + partialHeaders keysAndValuesDo: [ :key :value | + fullHeaders at: key add: value greaseString ]. + cookies do: [ :each | + fullHeaders at: 'Set-Cookie' add: each rfc6265String ]. + contentType := seasideResponse contentType greaseString. + contents := seasideResponse contents. + entity := (ZnEntity bytes: contents) contentType: contentType; yourself. + ^ ZnResponse new + statusLine: (ZnStatusLine code: seasideResponse status); + headers: fullHeaders; + entity: entity; + yourself \ No newline at end of file diff --git a/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/process..st b/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/process..st new file mode 100644 index 000000000..98b57f81b --- /dev/null +++ b/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/process..st @@ -0,0 +1,5 @@ +processing +process: aZnRequest + ^ aZnRequest isSafeToStream + ifTrue: [ self processStreamingRequest: aZnRequest ] + ifFalse: [ self processBufferedRequest: aZnRequest ] \ No newline at end of file diff --git a/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/processBufferedRequest..st b/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/processBufferedRequest..st new file mode 100644 index 000000000..042e9b3e1 --- /dev/null +++ b/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/processBufferedRequest..st @@ -0,0 +1,3 @@ +processing +processBufferedRequest: aZnRequest + ^ super process: aZnRequest \ No newline at end of file diff --git a/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/processStreamingRequest..st b/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/processStreamingRequest..st new file mode 100644 index 000000000..8bd110fd2 --- /dev/null +++ b/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/processStreamingRequest..st @@ -0,0 +1,7 @@ +processing +processStreamingRequest: aZnRequest + ^ ZnDeferredResponse + onWrite: [ :stream | + | request | + request := ZnSeasideRequest nativeRequest: aZnRequest stream: stream. + super process: request ] \ No newline at end of file diff --git a/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/requestFor..st b/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/requestFor..st new file mode 100644 index 000000000..bb92b7b17 --- /dev/null +++ b/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/requestFor..st @@ -0,0 +1,4 @@ +converting +requestFor: aZnRequest + + ^ super requestFor: aZnRequest nativeRequest \ No newline at end of file diff --git a/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/requestUrlFor..st b/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/requestUrlFor..st index b8eaca364..6efd6aaec 100644 --- a/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/requestUrlFor..st +++ b/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/requestUrlFor..st @@ -1,6 +1,7 @@ converting requestUrlFor: aZincRequest | zincUrl seasideUrl | + zincUrl := aZincRequest url. seasideUrl := WAUrl new scheme: zincUrl schemeOrDefault greaseString; diff --git a/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/responseFor..st b/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/responseFor..st new file mode 100644 index 000000000..678a43377 --- /dev/null +++ b/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/responseFor..st @@ -0,0 +1,6 @@ +converting +responseFor: aZnRequest + + ^ aZnRequest isSafeToStream + ifTrue: [ self streamingResponseFor: aZnRequest ] + ifFalse: [ self bufferedResponseFor: aZnRequest ] \ No newline at end of file diff --git a/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/responseFrom..st b/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/responseFrom..st index 560c00376..acb801c58 100644 --- a/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/responseFrom..st +++ b/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/responseFrom..st @@ -1,19 +1,6 @@ converting responseFrom: aRequestContext - | partialHeaders cookies fullHeaders seasideResponse contents entity contentType | - seasideResponse := aRequestContext response. - partialHeaders := seasideResponse headers. - cookies := seasideResponse cookies. - fullHeaders := ZnHeaders defaultResponseHeaders. - partialHeaders keysAndValuesDo: [ :key :value | - fullHeaders at: key add: value greaseString ]. - cookies do: [ :each | - fullHeaders at: 'Set-Cookie' add: each rfc6265String ]. - contentType := seasideResponse contentType greaseString. - contents := seasideResponse contents. - entity := (ZnEntity bytes: contents) contentType: contentType; yourself. - ^ ZnResponse new - statusLine: (ZnStatusLine code: seasideResponse status); - headers: fullHeaders; - entity: entity; - yourself \ No newline at end of file + + ^ aRequestContext request isSafeToStream + ifTrue: [ self streamingResponseFrom: aRequestContext ] + ifFalse: [ self bufferedResponseFrom: aRequestContext ] \ No newline at end of file diff --git a/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/streamingResponseFor..st b/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/streamingResponseFor..st new file mode 100644 index 000000000..81f1df81f --- /dev/null +++ b/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/streamingResponseFor..st @@ -0,0 +1,8 @@ +converting +streamingResponseFor: aZnRequest + | bufferedStream codecStream | + bufferedStream := GRPlatform current writeCharacterStreamOn: (self codec encodedStringClass new: 4096). + codecStream := self codec encoderFor: bufferedStream. + ^ WAComboResponse + onBuffered: (GRCountingStream on: codecStream) + external: aZnRequest stream \ No newline at end of file diff --git a/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/streamingResponseFrom..st b/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/streamingResponseFrom..st new file mode 100644 index 000000000..3ec63e0a8 --- /dev/null +++ b/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/instance/streamingResponseFrom..st @@ -0,0 +1,8 @@ +converting +streamingResponseFrom: aRequestContext + "Since the response knows how to write itself on the stream (and may already be partly written), + there's not much left to do." + + aRequestContext response + flush; + close \ No newline at end of file diff --git a/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/properties.json b/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/properties.json index 668c5c526..e3fe91b57 100644 --- a/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/properties.json +++ b/repository/Zinc-Seaside.package/ZnZincServerAdaptor.class/properties.json @@ -1,13 +1,14 @@ { - "commentStamp" : "", - "super" : "WAServerAdaptor", "category" : "Zinc-Seaside", - "classinstvars" : [ ], - "pools" : [ ], - "classvars" : [ ], + "classinstvars" : [ + ], + "classvars" : [ + ], + "commentStamp" : "", "instvars" : [ - "server" - ], + "server" ], "name" : "ZnZincServerAdaptor", - "type" : "normal" -} \ No newline at end of file + "pools" : [ + ], + "super" : "WAServerAdaptor", + "type" : "normal" } diff --git a/repository/Zinc-Seaside.package/ZnZincStreamingServerAdaptor.class/instance/process..st b/repository/Zinc-Seaside.package/ZnZincStreamingServerAdaptor.class/instance/process..st index c2d98c4dd..483bcaf9f 100644 --- a/repository/Zinc-Seaside.package/ZnZincStreamingServerAdaptor.class/instance/process..st +++ b/repository/Zinc-Seaside.package/ZnZincStreamingServerAdaptor.class/instance/process..st @@ -1,9 +1,9 @@ processing process: aZnRequest - ^ ZnDeferredResponse - onWrite: [ :stream | - | request | - request := ZnSeasideRequest - nativeRequest: aZnRequest - stream: stream. - super process: request ] \ No newline at end of file + + ^ ZnDeferredResponse onWrite: [ :stream | + | request | + request := ZnSeasideRequest + nativeRequest: aZnRequest + stream: stream. + super process: request ] \ No newline at end of file