@@ -103,39 +103,35 @@ public class CRTClientEngine: HttpClientEngine {
103103 let crtRequest = try request. toHttpRequest ( )
104104 let streamReader : StreamReader = DataStreamReader ( )
105105
106- let makeStatusCode : ( HTTPStream ) -> HttpStatusCode = { stream in
107- guard
108- let statusCodeInt = try ? stream. statusCode ( ) ,
109- let statusCode = HttpStatusCode ( rawValue: statusCodeInt)
110- else { return . notFound }
111- return statusCode
112- }
113-
114- let requestOptions = HTTPRequestOptions ( request: crtRequest) { [ self ] ( stream, _, httpHeaders) in
115- logger. debug ( " headers were received " )
116- response. statusCode = makeStatusCode ( stream)
117- response. headers. addAll ( httpHeaders: httpHeaders)
118- } onIncomingHeadersBlockDone: { [ self ] ( stream, _) in
119- logger. debug ( " header block is done " )
120- response. statusCode = makeStatusCode ( stream)
121- } onIncomingBody: { [ self ] ( stream, data) in
122- logger. debug ( " incoming data " )
123- response. statusCode = makeStatusCode ( stream)
124- let byteBuffer = ByteBuffer ( data: data)
106+ let makeStatusCode : ( UInt32 ) -> HttpStatusCode = { statusCode in
107+ HttpStatusCode ( rawValue: Int ( statusCode) ) ?? . notFound
108+ }
109+
110+ let requestOptions = HTTPRequestOptions ( request: crtRequest) { statusCode, headers in
111+ response. statusCode = makeStatusCode ( statusCode)
112+ response. headers. addAll ( headers: Headers ( httpHeaders: headers) )
113+ } onResponse: { statusCode, headers in
114+ response. statusCode = makeStatusCode ( statusCode)
115+ response. headers. addAll ( headers: Headers ( httpHeaders: headers) )
116+ } onIncomingBody: { bodyChunk in
117+ let byteBuffer = ByteBuffer ( data: bodyChunk)
125118 streamReader. write ( buffer: byteBuffer)
126- } onStreamComplete: { [ self ] ( stream, error) in
127- logger. debug ( " stream completed " )
128- if let error = error, error. code != 0 {
129- logger. error ( " Response encountered an error: \( error) " )
130- continuation. resume ( throwing: CommonRunTimeError . crtError ( error) )
131- return
119+ } onTrailer: { headers in
120+ response. headers. addAll ( headers: Headers ( httpHeaders: headers) )
121+ } onStreamComplete: { result in
122+ streamReader. hasFinishedWriting = true
123+ switch result {
124+ case . success( let statusCode) :
125+ response. statusCode = makeStatusCode ( statusCode)
126+ continuation. resume ( returning: response)
127+ case . failure( let error) :
128+ self . logger. error ( " Response encountered an error: \( error) " )
129+ streamReader. onError ( error: . crtError( error) )
130+ continuation. resume ( throwing: error)
132131 }
133-
134- response. body = . stream( . reader( streamReader) )
135- response. statusCode = makeStatusCode ( stream)
136-
137- continuation. resume ( returning: response)
138132 }
133+
134+ response. body = . stream( . reader( streamReader) )
139135 return requestOptions
140136 }
141137}
0 commit comments